我正在为Prestashop创建一个后台模块,除了显示管理页面的最佳方式之外,它已经找到了所有内容。目前我正在使用renderView()
方法来显示view.tpl。
我想显示一个包含值的表和一个添加新行的选项。我应该在view.tpl中创建它还是有更好的方法?我已经看过renderForm()
方法,但还没弄清楚它是如何工作的。
我遇到的最大问题是,如何将内容提交回我的控制器以进行特定方法?
答案 0 :(得分:1)
ModuleAdminController
用于管理某些类型的记录,即ObjectModel
个。此控制器的默认页面是一个列表,然后您可以单独编辑每个记录或查看其完整数据(view
)。
如果您想拥有设置页面,最好的方法是为您的模块创建getContent()
功能。此外,HelperOptions
对于此模块配置页面优于HelperForm
,因为它会自动提供值。在此函数及其上方定义表单,添加一个if (Tools::isSubmit('submit'.$this->name))
- 提交按钮name
,然后将值保存到configuration
表中。 Configuration::set(...)
。
当然可以在AdminController
中创建某种设置页面,但它并不意味着这一点。如果你真的想:到HookCore.php
并找到exec
方法。然后添加error_log($hook_name)
,您将打开/保存/关闭页面/表单时执行所有挂钩。也许你会以这种方式找到你的钩子。 Bettter方式是检查父类AdminControllerCore
甚至ControllerCore
。它们通常具有可以覆盖的特定功能,您应该保存您的东西。它们已经是执行过程的一部分,但却是空的。
编辑:你应该看看其他AdminController
课程,它们很简单;您只需定义一些属性即可使用:
public function __construct()
{
// Define associated model
$this->table = 'eqa_category';
$this->className = 'EQACategory';
// Add some record actions
$this->addRowAction('edit');
$this->addRowAction('delete');
// define list columns
$this->fields_list = array(
'id_eqa_category' => array(
'title' => $this->l('ID'),
'align' => 'center',
),
'title' => array(
'title' => $this->l('Title'),
),
);
// Define fields for edit form
$this->fields_form = array(
'input' => array(
array(
'name' => 'title',
'type' => 'text',
'label' => $this->l('Title'),
'desc' => $this->l('Category title.'),
'required' => true,
'lang' => true
),
'submit' => array(
'title' => $this->l('Save'),
)
);
// Call parent constructor
parent::__construct();
}
其他人喜欢将列表和表单定义移动到呈现它们的实际函数:
public function renderForm()
{
$this->fields_form = array(...);
return parent::renderForm();
}
您实际上不需要做任何其他事情,控制器会将字段与模型匹配,加载它们,保存它们等。
同样,了解这些控制器的最佳方法是查看其他AdminControllers。