如何使用模块和挂钩将自定义产品字段添加到prestashop

时间:2019-05-20 12:59:59

标签: php prestashop e-commerce prestashop-1.7

我需要向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捆绑在一起的任何模块的代码的建议,以帮助完成此任务。

Add field in product Prestashop 1.7

1 个答案:

答案 0 :(得分:0)

这部分代码仅描述了如何创建具有必填字段的表单,但不处理产品类扩展。因此,如果您将这个属性(ebay_reference)与产品类中的所有关系都使用,则一切正常。因此,我想您需要从此处Add field in product Prestashop 1.7的原始答案中为/classes/Product.phpsrc/PrestaShopBundle/Model/Product/AdminModelAdapter.php实现步骤,并将必要的字段添加到数据库中。

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