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


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

我有一个prestashop设置,它有一个小的"自定义表单",当前将信息保存到产品默认自定义文本输入中。我这样做是为了节省时间,因为我必须编写一个完整的自定义模块来添加额外的自定义表单字段等等。

目前,所有的输入都被序列化(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代码来"解码"正在发送的电子邮件的字符串——所以看到的是长而难看的字符串,而不是用户输入的几行漂亮的自定义内容。

有什么想法吗?有没有一个地方我可以将解码的字符串全局分配给产品定制?

您可以在发送电子邮件之前尝试PaymentModule类来解码字符串,也可以尝试Product的方法"getAllCustomizedDatas"来获得更"全局"的方法。然后测试很多,当然:)

以下是第二种方法的快速草案:

<?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;
    }
}