在产品 Prestashop 1.7 中添加字段
[英] Add field in product Prestashop 1.7
本文介绍了在产品 Prestashop 1.7 中添加字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
为什么 prestashop 不将我的修改保存到数据库中?使用 prestashop 1.7
/override/classes/Product.php
class Product 扩展 ProductCore {公共 $por_gan;公共函数 __construct ($idProduct = null, $idLang = null, $idShop = null) {$definition = self::$definition;$definition['fields']['por_gan'] = array('type' => self::TYPE_INT, 'required' => false);parent::__construct($idProduct, $idLang, $idShop);} }
在 ProductInformation.php 中
->add('por_gan', 'Symfony\Component\Form\Extension\Core\Type\NumberType', array('必需' =>错误的,'标签' =>$this->translator->trans('Beneficio', [], 'Admin.Catalog.Feature'),'约束' =>大批(新断言\NotBlank(),new Assert\Type(array('type' => 'numeric'))),))
在 form.html.twing 中
<label class="form-control-label">% de beneficio</label{{ form_widget(form.step1.por_gan) }}
谢谢
解决方案
我已经成功地在管理产品页面中添加了一个额外的选项卡.它工作正常.我认为更好的方法是创建一个模块,以便使修改更易于维护.
或者你可以使用 displayAdminProductsExtra hook、actionProductUpdate hook 和 actionProductAdd
额外的字段是:frais_a_prevoir
我显示了所有要修改的文件,但您必须检查文件中应该在哪里进行修改(进行搜索,您会找到)
覆盖/classes/Product.php
在/classes/Product.php
类中,有3处修改:
1)
/** @var string Frais à prévoir */公共 $frais_a_prevoir;
2)
'frais_a_prevoir' =>array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
3)
$sql->select('p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) 作为数量, pl.`description`, pl.`description_short`, pl.`frais_a_prevoir`, pl.`link_rewrite`, pl.`元描述`,pl.`meta_keywords`, pl.`meta_title`, pl.`name`, pl.`available_now`, pl.`available_later`, image_shop.`id_image` id_image, il.`legend`, m.`name` AS制造商名称,(DATEDIFF(product_shop.`date_add`,DATE_SUB("'.$now.'",间隔'.$nb_days_new_product.'日)) >0) 作为新的');
在/src/PrestaShopBundle/Resources/views/Admin/Product/form.html.twig
<li id="tab_description_short" class="nav-item"><a href="#description_short" data-toggle="tab" class="nav-link description-tab active">{{ 'Summary'|trans({}, 'Admin.Catalog.Feature') }}</a></li><li id="tab_description" class="nav-item"><a href="#description" data-toggle="tab" class="nav-link description-tab">{{ 'Description'|trans({}, 'Admin.Global') }}</a></li><li id="tab_frais_a_prevoir" class="nav-item"><a href="#frais_a_prevoir" data-toggle="tab" class="nav-link description-tab">{{ 'frais_a_prevoir'|trans({}, 'Admin.Global') }}</a></li>
<div class="tab-content bordered"><div class="tab-pane panel panel-default active" id="description_short">{{ form_widget(form.step1.description_short) }}
<div class="tab-pane panel panel-default" id="description">{{ form_widget(form.step1.description) }}
<div class="tab-pane panel panel-default" id="frais_a_prevoir">{{ form_widget(form.step1.frais_a_prevoir) }}
在/src/PrestaShopBundle/Form/Admin/Product/productInformation.php
->add('frais_a_prevoir', 'PrestaShopBundle\Form\Admin\Type\TranslateType', array('类型' =>'Symfony\Component\Form\Extension\Core\Type\TextareaType','选项' =>['属性' =>数组('class' => 'autoload_rte'),'必需' =>错误的],'地区' =>$this->locales,'隐藏标签' =>真的,'标签' =>$this->translator->trans('frais_a_prevoir', [], 'Admin.Global'),'必需' =>错误的))
在 src/PrestaShopBundle/Model/Product/AdminModelAdapter.php:
$this->translatableKeys = array('名称','描述','description_short','frais_a_prevoir','link_rewrite','元标题','元描述','现在有空','可用_稍后','标签',);//为手动绑定定义未使用的密钥$this->unmapKeys = array('name','描述','description_short','frais_a_prevoir','图片','相关产品','类别',供应商",'显示选项','特征','特定价格','虚拟产品','附件_产品',);
2)
'frais_a_prevoir' =>$this->product->frais_a_prevoir,
在数据库中,在表product_lang中添加一列frais_a_prevoir
Why is prestashop don't save my modification into database?
Using prestashop 1.7
/override/classes/Product.php
class Product extends ProductCore {
public $por_gan; public function __construct ($idProduct = null, $idLang = null, $idShop = null) {
$definition = self::$definition;
$definition['fields']['por_gan'] = array('type' => self::TYPE_INT, 'required' => false);
parent::__construct($idProduct, $idLang, $idShop); } }
In ProductInformation.php
->add('por_gan', 'Symfony\Component\Form\Extension\Core\Type\NumberType', array(
'required' => false,
'label' => $this->translator->trans('Beneficio', [], 'Admin.Catalog.Feature'),
'constraints' => array(
new Assert\NotBlank(),
new Assert\Type(array('type' => 'numeric'))
),
))
In form.html.twing
<div class="col-md-6">
<label class="form-control-label">% de beneficio</label
{{ form_widget(form.step1.por_gan) }}
</div>
Thanks
解决方案
I’ve successfully added an extra tab in admin product page.
It's working fine. I think a better approach would be to create a module in order to make that modification easier to maintain.
Or you can use displayAdminProductsExtra hook, actionProductUpdate hook and actionProductAdd
The extra field is : frais_a_prevoir
I show all the files to modify but you have to check where the modification should be done inside the file (make a search and you will find)
Override /classes/Product.php
In class /classes/Product.php
, there are 3 modifications to do :
1)
/** @var string Frais à prévoir */
public $frais_a_prevoir;
2)
'frais_a_prevoir' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
3)
$sql->select(
'p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, pl.`description`, pl.`description_short`, pl.`frais_a_prevoir`, pl.`link_rewrite`, pl.`meta_description`,
pl.`meta_keywords`, pl.`meta_title`, pl.`name`, pl.`available_now`, pl.`available_later`, image_shop.`id_image` id_image, il.`legend`, m.`name` AS manufacturer_name,
(DATEDIFF(product_shop.`date_add`,
DATE_SUB(
"'.$now.'",
INTERVAL '.$nb_days_new_product.' DAY
)
) > 0) as new'
);
In /src/PrestaShopBundle/Resources/views/Admin/Product/form.html.twig
<ul class="nav nav-tabs bordered">
<li id="tab_description_short" class="nav-item"><a href="#description_short" data-toggle="tab" class="nav-link description-tab active">{{ 'Summary'|trans({}, 'Admin.Catalog.Feature') }}</a></li>
<li id="tab_description" class="nav-item"><a href="#description" data-toggle="tab" class="nav-link description-tab">{{ 'Description'|trans({}, 'Admin.Global') }}</a></li>
<li id="tab_frais_a_prevoir" class="nav-item"><a href="#frais_a_prevoir" data-toggle="tab" class="nav-link description-tab">{{ 'frais_a_prevoir'|trans({}, 'Admin.Global') }}</a></li>
</ul>
<div class="tab-content bordered">
<div class="tab-pane panel panel-default active" id="description_short">
{{ form_widget(form.step1.description_short) }}
</div>
<div class="tab-pane panel panel-default " id="description">
{{ form_widget(form.step1.description) }}
</div>
<div class="tab-pane panel panel-default " id="frais_a_prevoir">
{{ form_widget(form.step1.frais_a_prevoir) }}
</div>
</div>
In /src/PrestaShopBundle/Form/Admin/Product/productInformation.php
->add('frais_a_prevoir', 'PrestaShopBundle\Form\Admin\Type\TranslateType', array(
'type' => 'Symfony\Component\Form\Extension\Core\Type\TextareaType',
'options' => [
'attr' => array('class' => 'autoload_rte'),
'required' => false
],
'locales' => $this->locales,
'hideTabs' => true,
'label' => $this->translator->trans('frais_a_prevoir', [], 'Admin.Global'),
'required' => false
))
in src/PrestaShopBundle/Model/Product/AdminModelAdapter.php:
$this->translatableKeys = array(
'name',
'description',
'description_short',
'frais_a_prevoir',
'link_rewrite',
'meta_title',
'meta_description',
'available_now',
'available_later',
'tags',
);
//define unused key for manual binding
$this->unmapKeys = array('name',
'description',
'description_short',
'frais_a_prevoir',
'images',
'related_products',
'categories',
'suppliers',
'display_options',
'features',
'specific_price',
'virtual_product',
'attachment_product',
);
2)
'frais_a_prevoir' => $this->product->frais_a_prevoir,
In database, add a column frais_a_prevoir
in table product_lang
这篇关于在产品 Prestashop 1.7 中添加字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!