CakePHP cakedc поиск найти все товары по категориям и категориям детей
Я использую поисковый плагин CakeDC. У меня есть простая корзина с продуктами, которые принадлежат исключительно подкатегориям. например, подкатегориями продуктов питания могут быть фрукты, овощи, мясо и т. д., поэтому груша относится только к категории фруктов.
Таким образом, у меня есть выпадающий список, в котором есть все категории: если я выберу еду родительской категории, никакие продукты не появятся, если я выберу фрукты, то фрукты появятся.
Сначала я хочу показать только родительские категории, такие как еда, спортивные товары и т. Д., А затем, когда они выбирают еду, я хочу, чтобы произошло несколько разных вещей:
1) показать все товары, которые связаны с этой категорией, а также все дочерние категории
2) отобразить еще одно выпадающее меню с фруктами, овощами, мясом и т. Д. Для дальнейшей фильтрации
3) если в этой подкатегории есть подкатегории, покажите их детей, пока они не отфильтрованы.
Мой код только сейчас позволяет мне находить прямые ассоциации с категорией
Вот код из моей модели Product.php
public $actsAs = array('Search.Searchable');
public $filterArgs = array(
array('name' => 'cid', 'field' => 'category_id', 'type' => 'value', 'method' => 'query', 'method' => 'query', 'allowEmpty' => true);
public function filterCat($data, $field = null) {
if (empty($data['cid'])) {
return array();
}
$cat = $data['cid'];
return array(
'OR' => array(
$this->alias . '.category_id' => $cat,
));
}
Я искал решение проблемы как можно выше, но я бы ничего не нашел. Любая помощь высоко ценится!
1 ответ
Я смог достичь желаемой функциональности, изменив функцию filterCat(), как показано ниже.
public function filterCat($data, $field = null) {
if (empty($data['cid'])) {
return array();
}
$cat[] = $data['cid'];
// Get child categories
$children = $this->Category->children($cat['0'],false,'id');
// extract the ids of the child categories
$children = Hash::extract($children, '{n}.Category.id');
// if no child categories, return requested category id
if(empty($children)){
return array(
$this->alias . '.category_id' => $cat);
}else{
// else merge array of child category ids with parent category id
// and create SQL string to match the list of category ids
$children = array_merge($cat,$children);
return array(
$this->alias . '.category_id IN ' => $children);
}
}
Функция ищет дочерние категории, если нет дочерних категорий, она возвращает строку поиска с идентификатором категории. Если есть дочерние категории, он возвращает строку поиска с идентификаторами родительской и дочерней категорий в списке.
Я знаю, что это старый вопрос, но, надеюсь, это поможет другим.
CakePHP версия 2.2.3 и CakeDC поисковый плагин версия 2.1