我正在尝试向Prestashop 1.6中的客户群添加自定义字段,可从管理区域进行编辑。我尝试了各种解决方案,但最有效的方法是本指南中描述的方法:http://nemops.com/extending-prestashop-objects/。我在阅读之前也做了同样的事情,但看起来这个人就是这样做的。
我所做的基本上是在ps_group
表中添加一个新列,使其不为空(所有组都必须使用新字段)。
然后,在文件classes/Group.php
中,我编辑了$definition
数组。 (我知道我不应该编辑核心。一旦我检查它,我将把所有这些外化。)
public static $definition = array(
'table' => 'group',
'primary' => 'id_group',
'multilang' => true,
'fields' => array(
'reduction' => array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat'),
'price_display_method' => array('type' => self::TYPE_INT, 'validate' => 'isPriceDisplayMethod', 'required' => true),
'show_prices' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
'provinces' => array('type' => self::TYPE_STRING, 'required' => true, 'size' => 200),
// Lang fields
'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 32),
),
);
'provinces'
键是我的补充。
然后我编辑了文件controllers/admin/AdminGroupsController.php
以在管理区域中添加新字段,因此它是可编辑的。在方法renderForm()
中,我添加了'input'
数组$this->fields_form
的新子项。我的修改如下:
array(
'type' => 'select',
'label' => $this->l('Provinces'),
'name' => 'provinces',
'required' => 'true',
'col' => 3,
'hint' => $this->l('The provinces belonging to this customer group.'),
'options' => array(
'query' => array(
array(
'id_method' => '1',
'name' => 'Option 1'
),
array(
'id_method' => '2',
'name' => 'Option 2'
)
),
'id' => 'id_method',
'name' => 'name'
)
),
我知道同样命名数据库列和字段会导致保存此字段中的值,就像其余字段一样。但它不会发生。当我编辑组,进行一些更改并保存时,窗口顶部会出现以下错误,附近有感叹号:
Property Group->provinces is empty
然而,POST表单正确发送,我的数据传递得很好,就像其他字段一样。
这里有什么我想念的吗?我认为这些是向任何对象添加新字段的必要步骤(产品除外,其工作方式不同)。
我的代码在某些时候是错的吗?或者,如何向客户组添加新字段?
非常感谢:)
答案 0 :(得分:2)
您缺少的是在$provinces
中添加属性classes/Group.php
,请参阅以下示例:
class GroupCore extends ObjectModel
{
public $id;
/** @var string Lastname */
public $name;
/** @var string Reduction */
public $reduction;
/** @var int Price display method (tax inc/tax exc) */
public $price_display_method;
/** @var bool Show prices */
public $show_prices = 1;
/** @var string Object creation date */
public $date_add;
/** @var string Object last modification date */
public $date_upd;
/** @var string Province */
public $provinces;
/**
* @see ObjectModel::$definition
*/
public static $definition = array(
此外,您可以在下面找到几种优化代码的方法:
不要直接修改PrestaShop核心的文件。这将阻止PrestaShop的任何进一步更新,应该避免。您可以使用PrestaShop站点根目录中的override
文件夹轻松覆盖核心行为,然后controllers
然后admin
。在那里,创建一个新文件AdminGroupsController.php
,因为这是您要编辑的内容。在此文件中,您可以通过创建新类来覆盖AdminGroupsController
行为;在你的情况下:
class AdminGroupsController extends AdminGroupsControllerCore
{
/* Your code here */
}
然后复制/粘贴并编辑您需要编辑的方法。这也是您应该添加属性$provinces
的地方。
保存修改后,请不要忘记删除位于PrestaShop网站根目录的class_index.php
文件夹中的文件cache
。