php - 如何使用模块和挂钩将自定义产品字段添加到 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 捆绑的任何模块的代码以帮助解决此问题。
解决方案
这部分代码仅描述了如何创建具有必要字段的表单,但它不处理产品类扩展。因此,如果您的产品类中的所有关系都具有此属性(ebay_reference),那么一切都会起作用。因此,我想您需要从此处在产品 Prestashop 1.7 中添加字段的原始答案中执行步骤,/classes/Product.php
并将必要的字段添加到数据库中。src/PrestaShopBundle/Model/Product/AdminModelAdapter.php
此外,如果您不想修改或覆盖默认产品类,您可以创建自己的表以将数据保存在其中,就像使用 id_product 键一样,但将这些数据传播到所有产品实例可能会更加困难店铺。
推荐阅读
- html - 如何将文本与圆圈分开
- java - JAX-WS 将 Username-Token 添加到 SOAP-Header
- java - 405 Method Not Allowed when deploying artifact to Nexus
- javascript - Javascript 将一些计算结果一一追加到表行中
- javascript - 将锚标记作为自身传递给函数而不是通过 id
- android - 如何在 Nativescript 中的嵌套 ListView 上启用滚动?
- kubernetes - Promtail 忽略 extraScrapeConfigs
- firebase - 如何使用 dart 和颤振从 cloud firestore 数据创建每日 csv 文件?
- visual-c++ - 如何创建 Windows 静态库...如果我使用 lib.exe 和太多参数?
- touch - STM32 TSC Slider_3 Ch_Capacitive Touch_STM32F072 Discovery_ 0...255范围内的分辨率和位置计算