Как вставить предустановленный фильтр в renderList в prestashop?

Поскольку я смог выбрать предыдущую проблему с большой помощью из @TheDrot, теперь с этим пришла другая, когда я ренитиализирую фильтрацию, она не возвращается со стандартным фильтром, мне нужна помощь, чтобы знать, что я должен изменить в коде. заставить его работать.
результат в изображении
Я отправляю код и изображение результата без успеха.
Спасибо за вашу помощь.
Спасибо.
результат 2

public function processResetFilters($list_id = null)
{
if ($list_id === null) {
$list_id = isset($this->list_id) ? $this->list_id : $this->table;
}

$prefix = '';//var_dump($list_id, $prefix, $this->context->cookie);
$filters = $this->context->cookie->getFamily($prefix.$list_id.'Filter_');
foreach ($filters as $cookie_key => $filter) {
if (strncmp($cookie_key, $prefix.$list_id.'Filter_', 7 + Tools::strlen($prefix.$list_id)) == 0) {
$key = substr($cookie_key, 7 + Tools::strlen($prefix.$list_id));
if (is_array($this->fields_list) && array_key_exists($key, $this->fields_list)) {
$this->context->cookie->$cookie_key = null;
}
unset($this->context->cookie->$cookie_key);
}
}

if (isset($this->context->cookie->{'submitFilter'.$list_id})) {
unset($this->context->cookie->{'submitFilter'.$list_id});
}
if (isset($this->context->cookie->{$prefix.$list_id.'Orderby'})) {
unset($this->context->cookie->{$prefix.$list_id.'Orderby'});
}
if (isset($this->context->cookie->{$prefix.$list_id.'Orderway'})) {
unset($this->context->cookie->{$prefix.$list_id.'Orderway'});
}

$_POST = array();
$this->_filter = false;
unset($this->_filterHaving);
unset($this->_having);

//your code
$table= 'contabilidade_faturacao';
$startTime = date('Y-m-d', mktime(0, 0, 0, date('m')-1  , 1 , date('Y')));
$endTime = date('Y-m-d', mktime(23, 59, 59, date('m'), date('d')-date('j'), date('Y')));
$table = 'contabilidade_faturacao';
$date_filter_key = $table.'Filter_cf!data';
$this->context->cookie->{$date_filter_key} = serialize(array(
$startTime,
$endTime
));
$this->context->cookie->write();
}

0

Решение

Это может быть достигнуто путем переопределения файла ядра HelperList.php (путь: /classes/helper/HelperList.php)

Существует функция с именем displayListHeader (), которая получает все фильтры в списке и передает их в файл TPL (/admin/themes/default/template/helpers/list/list_header.tpl), который отображает все фильтры.

Вы можете переопределить функцию displayListHeader () в классе HelperList.php, чтобы изменить поведение фильтров в HelperList.

0

Другие решения

I apologize @TheDrot, but nothing is happening, I send my code to vers and can tell me where I am missing.
I send the image of my result.[result code in image][1]
I'm sorry I'm not figuring out how I can make it work but I'm still new to prestashop.
Thank you for your precious help.

public function processResetFilters($list_id = null)
{
if ($list_id === null) {
$list_id = isset($this->list_id) ? $this->list_id : $this->table;
}

$prefix = '';//var_dump($list_id, $prefix, $this->context->cookie);
$filters = $this->context->cookie->getFamily($prefix.$list_id.'Filter_');
foreach ($filters as $cookie_key => $filter) {
if (strncmp($cookie_key, $prefix.$list_id.'Filter_', 7 + Tools::strlen($prefix.$list_id)) == 0) {
$key = substr($cookie_key, 7 + Tools::strlen($prefix.$list_id));
if (is_array($this->fields_list) && array_key_exists($key, $this->fields_list)) {
$this->context->cookie->$cookie_key = null;
}
unset($this->context->cookie->$cookie_key);
}
}

if (isset($this->context->cookie->{'submitFilter'.$list_id})) {
unset($this->context->cookie->{'submitFilter'.$list_id});
}
if (isset($this->context->cookie->{$prefix.$list_id.'Orderby'})) {
unset($this->context->cookie->{$prefix.$list_id.'Orderby'});
}
if (isset($this->context->cookie->{$prefix.$list_id.'Orderway'})) {
unset($this->context->cookie->{$prefix.$list_id.'Orderway'});
}

$_POST = array();
$this->_filter = false;
unset($this->_filterHaving);
unset($this->_having);

//your code
$startTime = date('Y-m-d', mktime(0, 0, 0, date('m')-1  , 1 , date('Y')));
$endTime = date('Y-m-d', mktime(23, 59, 59, date('m'), date('d')-date('j'), date('Y')));
$table = 'contabilidade_faturacao';
$date_filter_key = $this->table.'Filter_cf!data';
if (!Tools::getIsset('local_'.$date_filter_key) && !isset($this->context->cookie->{$date_filter_key})) {
$this->context->cookie->{$date_filter_key} = serialize(array(
$startTime,
$endTime
));
$this->context->cookie->write();
}
}[1]: https://i.stack.imgur.com/2peoP.png
0

Перед отображением списка проверьте, не установлены ли фильтры даты, затем запишите фильтры даты по умолчанию в cookie.

$date_filter_key = $table.'Filter_cf!data';
if (!Tools::getIsset('local_'.$date_filter_key) && !isset($this->context->cookie->{$date_filter_key}) {
$this->context->cookie->{$date_filter_key} = serialize(array(
'2017-02-01',
'2017-02-28'
));
$this->context->cookie->write();
}

Когда вы сбрасываете фильтры, вы должны переписать куки с фильтрами по умолчанию.

public function processResetFilters($list_id = null)
{
...
// your code
$startTime = date('Y-m-d', mktime(0, 0, 0, date('m')-1  , 1 , date('Y')));
$endTime = date('Y-m-d', mktime(23, 59, 59, date('m'), date('d')-date('j'), date('Y')));
$table = 'contabilidade_faturacao';
$date_filter_key = $this->table.'Filter_cf!data';
$this->context->cookie->{$date_filter_key} = serialize(array(
$startTime,
$endTime
));
$this->context->cookie->write();
}
0