我需要向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捆绑在一起的任何模块的代码的建议,以帮助完成此任务。
答案 0 :(得分:0)
这部分代码仅描述了如何创建具有必填字段的表单,但不处理产品类扩展。因此,如果您将这个属性(ebay_reference)与产品类中的所有关系都使用,则一切正常。因此,我想您需要从此处Add field in product Prestashop 1.7的原始答案中为/classes/Product.php
和src/PrestaShopBundle/Model/Product/AdminModelAdapter.php
实现步骤,并将必要的字段添加到数据库中。
此外,如果您不想修改或覆盖默认产品类别,则可以创建自己的表以将数据保留在其中,就像使用id_product键一样,但是将数据传播到所有产品可能会更加困难商店中的实例。