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

Другие вопросы по тегам