Перейти к содержимому


Фотография
- - - - -

Можно ли ограничить Related Items auto несколькими категориями?


Лучший Ответ Cheren-dow , 05 October 2015 - 12:02

а можно поподробнее? что конкретно менять и где?   сам пробовал поменять в файле media\zoo\applications\jbuniversal\framework\models\jbmodel.related.php

Здравствуйте поменять необходимо метод _getFromDatabase() все в том же файле:

\media\zoo\applications\jbuniversal\framework\models\jbmodel.related.php

После строк:

// create empty SQL query
$select = $this->_getItemSelect(null, null, 0)
    ->clear('select')
    ->select('tItem.id AS id')
    ->where('tItem.id <> ?', $item->id);

Добавьте следующий код:

if (isset($data['e_itemcategory_s'])) {
    $select
        ->where('tCategoryItem.category_id IN (' . implode(',', $data['e_itemcategory_s']) . ')')
        ->leftJoin(ZOO_TABLE_CATEGORY_ITEM . ' AS tCategoryItem ON tCategoryItem.item_id = tItem.id');
}
Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 28

#21 laRus

laRus

Отправлено 02 October 2015 - 14:14

Сегодня будем вместе с Денисом смотреть.

лирику - del 

 

...

ждёмс! 


Сообщение отредактировал Ursa: 03 October 2015 - 19:57

  • 0
..minimum effort for maximum effect? - Oh yeah! It's good!..

#22 Cheren-dow

Cheren-dow

Отправлено 03 October 2015 - 11:43

.polega., здравствуйте. Указание доп поля т.е категорий происходит во вложенном запросе основного запроса в базу данных, именно поэтому если релевантность меньше выводятся материалы с других категорий. Другими словами указывая доп. условие оно не ограничивает выборку именно по этим категориям. В независимости от выбора релевантности если необходимо учитывать категории необходимо внести не большой хак в модель Related. Хак достаточно простой и его вполне можно внести когда требуется выбирать материалы именно по категориям.


  • 0
Изображение
 

#23 .polega.

.polega.

Отправлено 03 October 2015 - 13:31

Другими словами указывая доп. условие оно не ограничивает выборку именно по этим категориям.

как я и предполагал... это касается только категорий? или это касается любого элемента ядра?

 

 

 

если необходимо учитывать категории необходимо внести не большой хак в модель Related. Хак достаточно простой и его вполне можно внести когда требуется выбирать материалы именно по категориям.

а можно поподробнее? что конкретно менять и где?

 

сам пробовал поменять в файле media\zoo\applications\jbuniversal\framework\models\jbmodel.related.php

    /**
     * Get search data from item
     * @param Item $item
     * @param JSONData $params
     * @return array
     */
    protected function _getSearchData(Item $item, $params)
    {
        // get related categories
        $itemCategories = array();
        $checkCategory  = (int)$params->get('check_category', 1);
        if ($checkCategory == 1) {
            $itemCategories[] = $item->getPrimaryCategoryId();
        } else if ($checkCategory == 2) {
//            $itemCategories = $item->getRelatedCategoryIds();
            $itemCategories[] = 12;
            $itemCategories[] = 13;
        }

Закомментировал получение связанных категорий и жёстко прописал, какие категории являются связанными (12 и 13). Но что-то не работает, как задумывалось. Вывод связанных материалов не ограничивается категориями 12 и 13.


Сообщение отредактировал .polega.: 03 October 2015 - 13:36

  • 0

#24 laRus

laRus

Отправлено 03 October 2015 - 20:10

указывая доп. условие оно не ограничивает выборку именно по этим категориям
 

А в документации читаю "будут переопределены" и "по произвольному критерию" :

 

 

Опция Доп. настройки помогает ограничить вывод материалов по произвольному критерию, при этом реальные значения полей будут переопределены на те, что указаны в опции.

 

Надо внести правку в доку?.. И что еще не переопределяется?..


  • 0
..minimum effort for maximum effect? - Oh yeah! It's good!..

#25 Cheren-dow

Cheren-dow

Отправлено 05 October 2015 - 12:02   Лучший Ответ

а можно поподробнее? что конкретно менять и где?   сам пробовал поменять в файле media\zoo\applications\jbuniversal\framework\models\jbmodel.related.php

Здравствуйте поменять необходимо метод _getFromDatabase() все в том же файле:

\media\zoo\applications\jbuniversal\framework\models\jbmodel.related.php

После строк:

// create empty SQL query
$select = $this->_getItemSelect(null, null, 0)
    ->clear('select')
    ->select('tItem.id AS id')
    ->where('tItem.id <> ?', $item->id);

Добавьте следующий код:

if (isset($data['e_itemcategory_s'])) {
    $select
        ->where('tCategoryItem.category_id IN (' . implode(',', $data['e_itemcategory_s']) . ')')
        ->leftJoin(ZOO_TABLE_CATEGORY_ITEM . ' AS tCategoryItem ON tCategoryItem.item_id = tItem.id');
}

  • 2
Изображение
 

#26 SmetDenis

SmetDenis

Отправлено 05 October 2015 - 12:12

Документацию менять не нужно.

Другими словами указывая доп. условие оно не ограничивает выборку именно по этим категориям.


Переопределение значений - это не тоже самое что и постоянное условие поиска. В этом случае категории, которые указаны в материале переопределяются на те, что указаны настройках элемента. Но их наличие по прежнему не являются обязательным условием поиска.

Хак, который предложил выше Сергей (Cheren-dow) как раз делает так, чтобы указанные категории были обязательными.

это касается только категорий? или это касается любого элемента ядра?

В данном случае нет разницы между типами полей. С точки зрения этого элемента они все равны.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#27 .polega.

.polega.

Отправлено 05 October 2015 - 12:58

Здравствуйте поменять необходимо метод _getFromDatabase() все в том же файле:

спасибо, после этих изменений всё работает, как требуется, ограничение по категориям срабатывает.


  • 0

#28 .polega.

.polega.

Отправлено 05 October 2015 - 14:58

Переопределение значений - это не тоже самое что и постоянное условие поиска. В этом случае категории, которые указаны в материале переопределяются на те, что указаны настройках элемента. Но их наличие по прежнему не являются обязательным условием поиска.

 

и всё же не совсем понятно, почему в моём случае без хака ограничение не срабатывало.

Вот выдержка из документации:

 

 

Принцип работы дополнительных условий

Опция Доп. настройки помогает ограничить вывод материалов по произвольному критерию, при этом реальные значения полей будут переопределены на те, что указаны в опции.

Например, у нас есть магазин одежды. Под каждым из товаров мы хотим отображать спец. предложения магазина. В дополнительных условиях указываем

_itemtag = Распродажа

Теперь, если мы зайдем на какой-нибудь товар магазина, то будут выбраны все похожие товары и у них обязательно будет присутствовать тег «Распродажа». При этом не важно какие теги указаны у основного материала, потому что при совпадении Element ID с доп. условиями значение переопределяется на последнее.

Таким образом, можно дополнительно корректировать результат поиска элемента.

 

Добавляем в доп.условия

_itemcategory = ["12","13"]

Дословно по документации и применительно к своему случаю - "будут выбраны все похожие товары и у них обязательно будет присутствовать" "категория 12 или 13". "При этом не важно какие категории указаны у основного материала, потому что при совпадении Element ID с доп. условиями значение переопределяется на последнее."

Но у меня без хака выбирались материалы, у которых не было категории 12 или 13!

На предыдущем своём сайте доп.условием было значение флажка "Опубликовано - Да", и это ограничение срабатывало и было исключительным, т.е. если не стоял флажок "Опубликовано" в материале, материал в связанные материалы не попадал никогда, какой бы низкий уровень релевантности не выставлялся. Я считал, что с категориями должно быть аналогично.
 


  • 1

#29 laRus

laRus

Отправлено 05 October 2015 - 15:32

Я считал, что с категориями должно быть аналогично.
.. и я тоже так думала..

 

Но, в любом случае, спасибо  Cheren-dow и SmetDenis за решение и пояснения, а Вам, .polega., за отличный вопрос, благодаря которому и появилось это решение! .. может, в рецепты добавить?


  • 0
..minimum effort for maximum effect? - Oh yeah! It's good!..




Click to return to top of page in style!