Как добавить пользовательские поля продукта в prestashop с помощью модуля и хуков - PullRequest
0 голосов
/ 20 мая 2019

Мне нужно добавить несколько полей в продукт prestashop (код HSN и еще одно). Я очень новичок в prestashop, и нет никакого руководства, чтобы сделать то же самое с последней сборкой 1.7.

Я следовал за ответами, сделанными на stackoverflow, и я могу показать поля формы, но не могу сохранить и проверить значение. Вот фрагмент кода, который я использовал (я предпочел это, потому что он использует хуки).

    use PrestaShopBundle\Form\Admin\Type\TranslateType;
    use PrestaShopBundle\Form\Admin\Type\FormattedTextareaType;
    use Symfony\Component\Form\Extension\Core\Type\TextareaType;
    use Symfony\Component\Form\Extension\Core\Type\FormType;
    public function hookDisplayAdminProductsExtra($params)
    {
        $productAdapter = $this->get('prestashop.adapter.data_provider.product');
        $product = $productAdapter->getProduct($params['id_product']);

        $formData = [
        'ebay_reference' => $product->ebay_reference,
        ];
        $formFactory = $this->get('form.factory');
        $form = $formFactory->createBuilder(FormType::class, $formData)
            ->add('ebay_reference', TranslateType::class, array(
                'required' => false,
                'label' => 'Ebay reference',
                'locales' => Language::getLanguages(),
                'hideTabs' => true,
                'required' => false
            ))
        ->getForm()
        ;
        return $this->get('twig')->render(_PS_MODULE_DIR_.'MyModule/views/display-admin-products-extra.html.twig', [
            'form' => $form->createView()
        ]) ;

    }
    public function hookActionAdminProductsControllerSaveBefore($params)
    {
        $productAdapter = $this->get('prestashop.adapter.data_provider.product');
        $product = $productAdapter->getProduct($_REQUEST['form']['id_product']);
        foreach(Language::getLanguages() as $language){
            $product->ebay_reference[ $language['id_lang'] ] = 
                $_REQUEST['form']['ebay_reference'][$language['id_lang']];
        }
        $product->save();

    }

Я застрял в части сохранения данных. Нужно некоторое руководство к нему рекомендуемым способом. Также, чтобы помочь в этом, вам нужно прочитать код любого модуля, входящего в комплект prestashop.

Добавить поле в товаре Prestashop 1.7

1 Ответ

0 голосов
/ 21 мая 2019

Эта часть кода просто описывает, как создать форму с необходимыми полями, но она не обрабатывает расширение класса продукта. Поэтому, если бы у вас был этот атрибут (ebay_reference) со всеми отношениями в вашем классе продуктов, все работало бы. Поэтому я предполагаю, что вам нужно реализовать шаги для /classes/Product.php и для src/PrestaShopBundle/Model/Product/AdminModelAdapter.php из исходного ответа здесь Добавить поле в продукт Prestashop 1.7 и добавить необходимое поле в БД.

Кроме того, если вы не хотите изменять или переопределять класс продукта по умолчанию, вы можете создать собственную таблицу (таблицы) для хранения своих данных, например, с помощью ключа id_product, но может быть сложнее распространить эти данные на весь продукт. экземпляры в магазине.

...