Как получить доступ к настраиваемым текстовым полям из модуля Prestashop?

Я создаю новый модуль для Prestashop, где пользователи могут создавать свои собственные продукты из сторонних сервисов. Когда пользователь позже добавляет продукт в свою корзину, я хотел бы сохранить идентификатор, который я получаю от этой сторонней службы, где пользователь разработал свой продукт.

Я думаю, лучший способ сделать это — создать текстовое поле настройки в Prestashop под названием «designID». Теперь я хочу знать, как я сохраняю данные в этом поле из разработки модуля в Prestashop вместо того, чтобы позволить пользователям вручную заполнять данные.

Итак, в основном... Как мне добавить данные в эти настраиваемые поля из модуля Prestashop, когда пользователь добавляет товар в свою корзину?


person Marcus Lind    schedule 18.02.2014    source источник


Ответы (2)


Эти поля настройки используются, если вы простой пользователь и не разрабатываете модуль. Использование его для сохранения designID будет просто хаком.

Поскольку вы создаете новый модуль, я советую сохранить сторонний идентификатор во вновь созданной таблице базы данных, которая будет соответствовать id_product, id_design, id_cart, id_order и т. д.

Вы можете подключиться к «actionCartSave» и добавить запись с соответствующими идентификаторами и всеми другими необходимыми данными в свою таблицу.

Если вы хотите придерживаться этой функции настройки, добавьте образец поля и просмотрите следующие таблицы базы данных:

ps_customization ps_customization_field ps_customization_field_lang ps_customized_data

и повторите изменения, когда получите сторонний идентификатор.

Если все ваши продукты будут настроены, рассмотрите возможность добавления необходимых данных в ps_customization_field и ps_customization_field_lang (таблица для структуры поля) во время установки модуля, поэтому после его установки вы можете просто заполнить ps_customization и ps_customized_data (таблицы для данных поля)

PrestaShop не имеет надлежащего API для добавления настроек, только для получения данных, поэтому вам придется писать SQL-запросы самостоятельно. Просто просмотрите ProductController для изменений ps_customization и ps_customized_data и AdminProductsController для ps_customization_field и ps_customization_field_lang.

Не забудьте удалить код разметки Customization из шаблонов товаров и корзины.

person PrestaShopDeveloper    schedule 18.02.2014

Я смог выяснить это сам, сначала безуспешно пытаясь использовать настройку в течение нескольких часов.

Таким образом, мой модуль работает так: клиент может открыть всплывающее окно iframe в стороннем инструменте дизайна, а затем сохранить дизайн в iframe, который затем отправляет данные в родительское окно (окно Prestashop).

Итак, чтобы сохранить это, я сделал следующее:

  • Добавить новый столбец в таблицу базы данных ps_cart_product
  • Подключитесь к любому дисплею на странице продукта и проверьте, отправляются ли какие-либо данные публикации, содержащие данные из стороннего модуля. Если так, то:

    if(isset($_POST['thirdparty'])){
            $id_product = (int)Tools::getValue('id_product');
    
            if (!$this->context->cart->id){
                $this->context->cart->add();
                if ($this->context->cart->id)
                    $this->context->cookie->id_cart = (int)$this->context->cart->id;
            }
    
            $this->context->cart->updateQty(1, $id_product);
    
            if(!Db::getInstance()->update('cart_product', array('id_design'=> pSQL(trim($_POST['thirdparty']))) ,'id_cart = '.$this->context->cart->id.' AND id_product = '.(int)Tools::getValue('id_product') ))
            $this->context->controller->_errors[] = Tools::displayError('Error: ').mysql_error();
        }
    

    Итак, в основном сначала я проверяю, установлен ли POST, затем я проверяю, существует ли какая-либо корзина, если корзины не существует, затем добавляю новую корзину с помощью ->add() (на поиск этой функции ушло несколько часов, 0 документации). updateQty() используется для обновления корзины новым продуктом.

    Последняя часть — это SQL-запрос, который обновляет значение столбца id_design данными, отправленными третьей стороной.

person Marcus Lind    schedule 19.02.2014