我想知道如何在类别中添加自定义字段以及如何在后台编辑(在说明字段下)。
我要添加的字段是名称description_long
字段类型为TEXT
我已经覆盖了我的前厅,我的场地显示得很好。
替换\类\ Category.php
<?php
class Category extends CategoryCore
{
public $description_long;
/**
* @see ObjectModel::$definition
*/
public static $definition = array(
'table' => 'category',
'primary' => 'id_category',
'multilang' => true,
'multilang_shop' => true,
'fields' => array(
'nleft' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
'nright' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
'level_depth' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'required' => true),
'id_parent' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
'id_shop_default' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'is_root_category' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
'position' => array('type' => self::TYPE_INT),
'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
// Lang fields
'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128),
'link_rewrite' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isLinkRewrite', 'required' => true, 'size' => 128),
'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
'description_long' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'), // CUSTOM FIELD
'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128),
'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),
'meta_keywords' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),
),
);
}
没有发现任何助手,有人可以帮忙吗?
答案 0 :(得分:12)
对于在这里苦苦挣扎的人来说,完整
要将新的description_long字段添加到Prestashop类别中的类别,您需要3个步骤:
将名为description_long的字段添加到category_lang表中,您可以模仿描述列的特征
使用以下代码在此处/override/classes/Category.php创建一个文件:
class Category extends CategoryCore
{
public $description_long;
public function __construct($id_category = null, $id_lang = null, $id_shop = null){
self::$definition['fields']['description_long'] = array('type' => self::TYPE_HTML, 'lang' => true);
parent::__construct($id_category, $id_lang, $id_shop);
}
}
使用以下代码在/override/controllers/admin/AdminCategoriesController.php中创建一个文件:
class AdminCategoriesController extends AdminCategoriesControllerCore{
public function renderForm()
{
$this->fields_form_override =array(
array(
'type' => 'textarea',
'label' => $this->l('Description long'),
'name' => 'description_long',
'lang' => true,
'autoload_rte' => true,
'hint' => $this->l('Invalid characters:').' <>;=#{}',
),
);
return parent::renderForm();
}
}
答案 1 :(得分:3)
要在后台添加一个字段,您需要覆盖AdminCategoriesController,正好是函数renderForm()并在其中添加新字段。 为此,在/ override / controllers / admin /下创建一个新文件AdminCategoriesController,然后在其中声明原始控制器的扩展名,并从原始核心文件中完全复制renderForm函数。
class AdminCategoriesController extends AdminCategoriesControllerCore
{
public function renderForm()
{
...
}
}
现在我们必须在几个地方编辑它,首先我们需要在描述下添加新字段,因此搜索声明'name'=&gt;在renderForm()中的'description',你会看到它是一个数组列表,每个数组都在描述一个表单字段。在描述数组后面添加我们的新字段:
array(
'type' => 'textarea',
'label' => $this->l('Description long'),
'name' => 'description_long',
'lang' => true,
'autoload_rte' => true,
'hint' => $this->l('Invalid characters:').' <>;=#{}',
),
此声明要求Prestashop创建一个具有以下规范的新字段:
要编辑的javascript插件
名称“description_long”
通过这种方式声明一个字段,我们将允许prestashop像任何其他Class属性一样处理它,因此我们不需要任何工作来添加和更新数据库中的字段。
现在我们的 renderForm()函数还有最后一件事要做,现在最后一条指令是parent::renderForm()
,在原始类中调用AdminController来询问它渲染表单,但是现在因为我们正在扩展类,所以指令调用我们的父级AdminCategoriesControllerCore,覆盖我们所有的工作并显示默认表单。为了避免这种情况,请将parent::renderForm
更改为AdminController::renderForm()
,以明确调用感兴趣的类。
答案 2 :(得分:0)
在覆盖类<{p>>的url = 'http://mozilla.org'
client.navigate(url)
client.go_back()
client.go_forward()
assert client.get_url() == url
函数中添加此行
__construct
其中public function __construct($id_category = null, $id_lang = null, $id_shop = null)
{
self::$definition['fields']['description_long'] = array('type' => self::TYPE_HTML, 'lang' => true);
parent::__construct($id_category, $id_lang, $id_shop);
}
是您的新字段名称。