mFilter2 - из метода boolean убрать значение "нет"
Здравствуйте!
Помогите, пожалуйста, доработать метод фильтрации. У товара есть поле ms|favorite. У некоторых товаров это поле отмечено (чекбокс). Нужно в фильтре вывести только одну галочку, по клику на которую бы фильтровались товары. Можно выводить методом boolean, но тогда будет выбор «да» и «нет».
Нашел направление, куда копать.
Создал новый метод Positive, присвоил:
Грубо говоря, из метода boolean, который я взял за основу, нужно убрать те варианты, где поле не отмечено (нулевое?). Далее чистый boolean с исправленными названиями на positive.
Помогите, пожалуйста, доработать метод фильтрации. У товара есть поле ms|favorite. У некоторых товаров это поле отмечено (чекбокс). Нужно в фильтре вывести только одну галочку, по клику на которую бы фильтровались товары. Можно выводить методом boolean, но тогда будет выбор «да» и «нет».
Нашел направление, куда копать.
Создал новый метод Positive, присвоил:
&filters=`ms|favorite:positive`
Но дальше эксперименты-правки не увенчались успехом. Грубо говоря, из метода boolean, который я взял за основу, нужно убрать те варианты, где поле не отмечено (нулевое?). Далее чистый boolean с исправленными названиями на positive.
<?php
class myCustomFilter extends mse2FiltersHandler {
public function buildPositiveFilter(array $values, $name = '') {
if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
return array();
}
$results = array();
foreach ($values as $value => $ids) {
$empty = empty($value) || (is_numeric($value) && (int)$value === 0);
$title = $empty
? $this->modx->lexicon('mse2_filter_positive_no')
: $this->modx->lexicon('mse2_filter_positive_yes');
if (!isset($results[$title])) {
$results[$title] = array(
'title' => $title,
'value' => (int)!$empty,
'type' => '<b>positive</b>',
'resources' => $ids,
);
}
else {
$results[$title]['resources'] = array_merge($results[$title]['resources'], $ids);
}
}
ksort($results);
return $results;
}
public function filterPositive(array $requested, array $values, array $ids) {
$matched = array();
$tmp = array_flip($ids);
foreach ($requested as $value) {
foreach ($values as $k => $resources) {
$empty = empty($k) || (is_numeric($k) && (int)$k === 0);
if ((empty($value) && !$empty) || (!empty($value) && $empty)) {
continue;
}
foreach ($resources as $id) {
if (isset($tmp[$id])) {
$matched[] = $id;
}
}
}
}
return $matched;
}
}
Комментарии: 2
Я делал так:
Чанк outer для фильтра:
Чанк rows для фильтра:
То есть, тупо не показываю вторую галочку.
Чанк outer для фильтра:
<div id="mse2_[[+table]][[+delimeter]][[+filter]]">
[[+rows]]
</div>
Чанк rows для фильтра:
{if $idx == 0}
<label for="mse2_[[+table]][[+delimeter]][[+filter]]_[[+idx]]">
<input type="checkbox" name="[[+filter_key]]"
id="mse2_[[+table]][[+delimeter]][[+filter]]_[[+idx]]"
value="[[+value]]" [[+checked]] [[+disabled]]/> [[+title]] <sup>[[+num]]</sup>
</label>
{/if}
То есть, тупо не показываю вторую галочку.
Спасибо! Работает!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.