首页 > 解决方案 > 如何使用模块和挂钩将自定义产品字段添加到 prestashop

问题描述

我需要在 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 中添加字段

标签: phpprestashope-commerceprestashop-1.7

解决方案


这部分代码仅描述了如何创建具有必要字段的表单,但它不处理产品类扩展。因此,如果您的产品类中的所有关系都具有此属性(ebay_reference),那么一切都会起作用。因此,我想您需要从此处在产品 Prestashop 1.7 中添加字段的原始答案中执行步骤,/classes/Product.php并将必要的字段添加到数据库中。src/PrestaShopBundle/Model/Product/AdminModelAdapter.php

此外,如果您不想修改或覆盖默认产品类,您可以创建自己的表以将数据保存在其中,就像使用 id_product 键一样,但将这些数据传播到所有产品实例可能会更加困难店铺。


推荐阅读