我已经为Prestashop 1.7创建了一个模块,以便在Admin Product页面中添加一个新字段。 由于缺乏适当的文档,我想问一下添加自定义字段的正确方法,一个选择。 我想保存并更新产品保存。
我使用下面的代码添加包含表单的tpl
public function hookDisplayAdminProductsExtra($ params){ $这 - > smarty的;
$available_items = $this->getAvailableBadges();
$id_product = Tools::getValue('id_product');
$this->context->smarty->assign('items_number', $available_items);
return $this->display(__FILE__, '/views/templates/admin/admin_products.tpl');
}
问题是我不知道如何覆盖Product.php类以获得我的$字段以及如何为tpl创建表单元素。
我想创建的表单我就是那样
<select name="" id="">
{foreach from=$items_number item=option}
<option value="{$option}">
{$option}
</option>
{/foreach}
</select>
很抱歉缺少信息,但我发现创建模块的新方法非常混乱。提前致谢
答案 0 :(得分:0)
要覆盖Product类:
在override / classes /
中创建文件“ Product.php”并添加以下内容:
//override the class
class Product extends ProductCore {
//add your attribute
public $field_name;
//override the construct function
public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, \Context $context = null) {
//add your custom field to the array $definitions['fields']
self::$definition['fields']['field_name'] = [
'type' => self::TYPE_STRING,
'lang' => true, //if you have multiple languages on your site
'required' => false,
'size' => 255
];
}
}
然后,在数据库中添加一个新条目;如果lang设置为false,则在ps_product中添加“ field_name”;如果lang设置为true,则在ps_product_lang中添加一个新条目。
您有不同的类型:“ TYPE_STRING”,“ TYPE_HTML”,“ TYPE_BOOL”,“ TYPE_INT”,...我不知道详尽的列表。 根据您选择的类型,您必须在数据库中创建正确的列类型(“ VARCHAR”,“ TEXT”,....)
可以在论坛(stackoverflow,https://www.prestashop.com/forums/)中找到一些好的文档,也可以在类似这样的博客中找到:https://www.h-hennes.fr/blog/