Prestashop 1.6 - 将自定义字段添加到类别
Prestashop 1.6 - Add custom field to category
我想知道如何将自定义字段添加到类别以及如何在后台(在描述字段下)进行编辑。
我要添加的字段是名称 description_long
字段类型为TEXT
我已经覆盖了我的Front office,我的领域也很好地展示了。
override\classes\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),
),
);
}
没有找到walktrough,有人可以帮忙吗?
要在后台添加字段,您需要重写 AdminCategoriesController,准确地说是函数 renderForm() 并在其中添加新字段。
为此,在 /override/controllers/admin/ 下创建一个新文件 AdminCategoriesController,然后在其中声明原始控制器的扩展,并从原始核心文件(完全)复制到 renderForm 函数中。
class AdminCategoriesController extends AdminCategoriesControllerCore
{
public function renderForm()
{
...
}
}
现在我们必须在几个地方编辑它,首先我们需要在描述下添加新字段,所以搜索声明 'name' => 'description' 在您的 renderForm() 中,您会看到它是一个数组列表,每个数组都描述一个表单字段。在描述数组之后添加我们的新字段:
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()
,在原来的 class 正在调用 AdminController 要求它呈现表单,但是现在因为我们正在扩展 class 指令正在调用我们的父级 AdminCategoriesControllerCore,覆盖我们所有的工作并显示默认表单。为避免这种情况,将 parent::renderForm
更改为 AdminController::renderForm()
,明确调用感兴趣的 class.
将此行添加到您的 __construct
重写 class
函数中
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);
}
其中 description_long
是您的新字段名称。
对于在这里苦苦挣扎的任何人来说都是完整答案:
要将新的 description_long 字段添加到 Prestashop 类别中的类别,您需要 3 个步骤:
- 更新数据库
将名为description_long的字段添加到category_langtable,可以模仿描述栏的特点
- 覆盖类别 class
在此处 /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);
}
}
- 覆盖 AdminCategoriesControllerCore class
在此处 /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();
}
}
我想知道如何将自定义字段添加到类别以及如何在后台(在描述字段下)进行编辑。
我要添加的字段是名称 description_long
字段类型为TEXT
我已经覆盖了我的Front office,我的领域也很好地展示了。
override\classes\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),
),
);
}
没有找到walktrough,有人可以帮忙吗?
要在后台添加字段,您需要重写 AdminCategoriesController,准确地说是函数 renderForm() 并在其中添加新字段。 为此,在 /override/controllers/admin/ 下创建一个新文件 AdminCategoriesController,然后在其中声明原始控制器的扩展,并从原始核心文件(完全)复制到 renderForm 函数中。
class AdminCategoriesController extends AdminCategoriesControllerCore
{
public function renderForm()
{
...
}
}
现在我们必须在几个地方编辑它,首先我们需要在描述下添加新字段,所以搜索声明 'name' => 'description' 在您的 renderForm() 中,您会看到它是一个数组列表,每个数组都描述一个表单字段。在描述数组之后添加我们的新字段:
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()
,在原来的 class 正在调用 AdminController 要求它呈现表单,但是现在因为我们正在扩展 class 指令正在调用我们的父级 AdminCategoriesControllerCore,覆盖我们所有的工作并显示默认表单。为避免这种情况,将 parent::renderForm
更改为 AdminController::renderForm()
,明确调用感兴趣的 class.
将此行添加到您的 __construct
重写 class
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);
}
其中 description_long
是您的新字段名称。
对于在这里苦苦挣扎的任何人来说都是完整答案:
要将新的 description_long 字段添加到 Prestashop 类别中的类别,您需要 3 个步骤:
- 更新数据库
将名为description_long的字段添加到category_langtable,可以模仿描述栏的特点
- 覆盖类别 class
在此处 /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);
}
}
- 覆盖 AdminCategoriesControllerCore class
在此处 /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();
}
}