使用设置页面创建Prestashop后台模块

时间:2015-03-16 23:04:17

标签: prestashop prestashop-1.6

我正在为Prestashop创建一个后台模块,除了显示管理页面的最佳方式之外,它已经找到了所有内容。目前我正在使用renderView()方法来显示view.tpl。

的内容

我想显示一个包含值的表和一个添加新行的选项。我应该在view.tpl中创建它还是有更好的方法?我已经看过renderForm()方法,但还没弄清楚它是如何工作的。

我遇到的最大问题是,如何将内容提交回我的控制器以进行特定方法?

1 个答案:

答案 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。