列表视图中的管理模块排序和筛选不起作用

时间:2014-05-14 23:35:31

标签: prestashop prestashop-1.5

我正在研究后台模块控制器。我能够在列表视图中显示我的对象,并使用帮助器表单创建一个新对象。但是,我有默认列表视图,不排序或筛选任何东西。列表视图显示了用于排序和过滤的控件,但单击它们不会执行任何操作。这是我的后台控制器:

class AdminCustomController extends AdminController {

public $module;

public function __construct() {
    $this->table = 'custom_table';
    $this->className = 'CustomTable';
    $this->module = 'customtable';
    $this->lang = false;
    $this->bootstrap = true;
    $this->need_instance = 0;        

    // Building the list of records stored within the "test" table
    $this->fields_list = array(
        'id_custom_table' => array(
            'title' => $this->l('ID'),
            'align' => 'center',
            'width' => 25,
            'type' => 'text'
        ),
        'name' => array(
            'title' => $this->l('Name'),
            'width' => 'auto',
            'type' => 'text',
            'orderby' => true,
            'search' => true   
//the ordering and filtering controls do appear but they don't work
        ),//...some more fields
    );

    $this->_select = '....';

    $this->_join = '
    LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` b ON (b.`id_product` = a.`id_product`)';

    $this->_defaultOrderBy = 'a.some_date';
    $this->_defaultOrderWay = 'ASC';

    $this->context = Context::getContext();

    parent::__construct();
}

public function renderForm() {

    // Building the Add/Edit form
    $this->fields_form = array(
        'submit' => array(
            'title' => $this->l('    Save   '),
            'class' => 'button'
        )
    );

    $this->addJqueryUI(array('ui.datepicker', 'ui.autocomplete'));
    return parent::renderForm();
}

public function renderList() {
    return parent::renderList();
}
}

我查看了其他模块的代码以及默认的PS控制器,所有这些都只返回父列表视图,除非它被修改,默认情况下排序和过滤功能可以正常工作。我没有看到任何排序或过滤特定代码,这就是我的管理员控制器没有任何代码。

如果您能帮我理解并启用后台列表视图中的排序和过滤,我将不胜感激。我觉得我错过了一些东西,但我无法弄清楚是什么?

4 个答案:

答案 0 :(得分:2)

在prestashop 1.6中(我认为它必须在PS 1.5中相同):

我发现在自定义ModuleAdminController中进行排序和过滤的最简单方法是初始化postProcess()的父级,如果它被覆盖:

public function postProcess() {
    parent::postProcess(); 
    ...
}

排序/过滤就像没有任何自定义代码一样。

享受。 =)

答案 1 :(得分:1)

确实,我确实找到了解决方案,但没有时间发布它。它们的关键在于以下两行:

[tablename]Orderby=

因此,除了我在示例中提到的所有内容之外,我们还需要从查询字符串中获取这些字段的值。在我的例子中,查询字符串参数看起来像custom_tableOrderby=,即在上面的示例中它将是construct

要从查询字符串中获取值,请在$sortBy = Tools::getValue('custom_tableOrderby'); $sortWay = Tools::getValue('custom_tableOrderway', 'ASC'); // default sortWay is Ascending $this->_defaultOrderWay = $sortWay; if ($sortBy == 'field_name_in_your_view') { $this->_defaultOrderBy = 'field_name_in_table'; } else if ($sortBy == 'another_field_name_in_your_view') { $this->_defaultOrderBy = 'another_field_name_in_table'; 函数中执行以下操作:

{{1}}

我希望它能在你很久以前在Prestashop 1.5中实现它。

答案 2 :(得分:0)

您必须包括 parent :: postProcess();在postProcess函数中

public function postProcess()
{
    parent::postProcess();
}

答案 3 :(得分:-1)

您是否尝试在$this->list_simple_header=false;功能中设置__construct

排序/过滤/分页是由属性HelperList->simple_header完成的。

使用控制器,一切正常。在一个模块中,如果我们调用一个HelperList,我们只有简单的头文件(除非你添加缺少的函数来执行完整的头文件)。因此,列表中的排序/过滤/分页仅适用于控制器。 {Prestashop 1.5}