在前端和后端(和电子邮件)解码产品定制

Decode Product Customization on frontend and on backend (and emails)

我有一个 prestashop 设置,它有一个小的 'customization form' 当前将信息保存到产品默认自定义文本输入。我这样做是为了节省编写完整的自定义模块以添加其他自定义表单字段等的时间。

目前所有输入都被序列化(json)并作为长字符串输入到文本输入中,如下所示:

Client Customization: %5B%5B%7B%22name%22%3A%22trophy%5B1%5D%5Bline1%5D%22%2C%22engraving%22%3A%22Test%20Trophy%22%7D%2C%7B%22name%22%3A%22trophy%5B1%5D%5Bline2%5D%22%2C%22engraving%22%3A%22test%20trophy%22%7D%2C%7B%22name%22%3A%22trophy%5B1%5D%5Bline3%5D%22%2C%22engraving%22%3A%221111111%22%7D%5D%5D

在前端 - 当显示自定义数据时,我可以使用 PHP 对其进行适当解码和显示。

有没有一种方法可以在某个地方全局更改它,这样我就不必尝试找到它可能显示的每个地方并添加 PHP 代码?

我 运行 遇到了一个问题,我似乎无法找到将 PHP 代码添加到 'decode' 正在发送的电子邮件的字符串的位置- 所以看到的是长而难看的字符串,而不是用户输入的几行漂亮的自定义。

关于如何处理这个问题有什么想法吗?有没有地方可以将解码后的字符串全局分配给产品定制?

您可以尝试使用 PaymentModule class 在发送电子邮件之前对字符串进行解码,或者使用名为 "getAllCustomizedDatas" 的 Product 方法来获得更 "global" 的方法。 然后测试很多,当然:)

这是第二种方法的速写草稿:

<?php
class Product extends ProductCore
{
    public static function getAllCustomizedDatas($id_cart, $id_lang = null, $only_in_cart = true, $id_shop = null)
    {
        $datas = parent::getAllCustomizedDatas($id_cart, $id_lang, $only_in_cart, $id_shop);

        /*
         * Iterate over $datas, you're looking for
         * [id_product][id_product_attribute][id_address_delivery][id_customization][datas]
         * Datas will contain an array of fields broken by their type. You can then decode
         * the ones that need to be decoded and return the result:
         */

        return $datas;
    }
}