在前端和后端(以及电子邮件)上解码产品自定义

时间:2016-04-04 15:25:53

标签: php json smarty prestashop

我有一个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代码来“解码”该字符串用于发送的电子邮件 - 所以看到长丑陋的字符串而不是用户输入的几行自定义。

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

1 个答案:

答案 0 :(得分:0)

你可以尝试使用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;
    }
}