Форум русской поддержки Joomla!® CMS
03.12.2016, 19:44:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Как в модели ограничить количество выводимых материалов для каждой категории?

 (Прочитано 370 раз)
0 Пользователей и 1 Гость смотрят эту тему.
fbr
Живу я здесь
******

Репутация: +136/-6
Offline Offline

Сообщений: 1250


« : 04.09.2015, 16:06:53 »

Привет!
Копаюсь в модуле. Задача из нескольких категорий вывести одинаковое количество материалов.

Пытался через модель в helper.php - никак ((

Код
...
$model->setState('list.limit', 100);
$model->setState('list.select', 'a.id, a.title, a.alias, a.introtext, a.catid' );
$model->setState('filter.category_id', $params->get('catid', array()));
...

Как задать лимит вывода для каждой категории? Например 10.

Гуглил, думал, решения не нашел ... Устал тупить.
Или стандартно не решается? Отказаться от Joomla-API и писать запрос в рукопашную? (честно, не силен ..)
Записан
Aponte
Осваиваюсь на форуме
***

Репутация: +3/-3
Offline Offline

Сообщений: 129


« Ответ #1 : 04.09.2015, 16:10:03 »

Так посмотри как сделано в стандартном модуле, там же есть количество материалов.
Просто добавить туда фильтр по категориям
Записан
fbr
Живу я здесь
******

Репутация: +136/-6
Offline Offline

Сообщений: 1250


« Ответ #2 : 04.09.2015, 16:13:53 »

В стандартном модуле задается лимит на общее количество записей.
А мне нужен лимит в каждой категории
Записан
Taatshi
Support Team
*****

Репутация: +430/-3
Offline Offline

Пол: Женский
Сообщений: 4712

Мама, я снова верстал во сне...


« Ответ #3 : 05.09.2015, 09:50:08 »

Тут дело не в АПИ. Если Вы придумаете такую структуру запроса к БД, чтоб Вам подошла - перевести на АПИ будет раз плюнуть. Сначала словами напишите как должен выглядеть запрос. Структуру запроса. Логику.

Думаю, нужно писать несколько запросов - к каждой категории, и потом их объединять в один. Если количество категорий не известно заранее - в цикле.
« Последнее редактирование: 05.09.2015, 09:59:40 от Taatshi » Записан
fbr
Живу я здесь
******

Репутация: +136/-6
Offline Offline

Сообщений: 1250


« Ответ #4 : 05.09.2015, 12:44:14 »

Вот такое решение с переменными нашел в интернете:
Код
SET @num := 0, @type := '';
 
SELECT type, variety, price, @num
FROM fruits
WHERE
  (@num := IF(type = @type, @num + 1, 1)) IS NOT NULL
  AND (@type := type) IS NOT NULL
  AND (@num <= 2);
 
+--------+----------+-------+------+
| type   | variety  | price | @num |
+--------+----------+-------+------+
| apple   | gala       |  2.79 | 1    |
| apple   | fuji        |  0.24 | 2    |
| orange | valencia |  3.59 | 1    |
| orange | navel     |  9.36 | 2    |
| pear    | bradford |  6.05 | 1    |
| pear    | bartlett   |  2.14 | 2    |
| cherry | bing       |  2.55 | 1    |
| cherry | chelan     |  6.33 | 2    |
+--------+----------+-------+------+
 
 

Вывод
Интересно, как это будет выглядеть при использовании апи Joomla
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #5 : 05.09.2015, 12:51:53 »

Вот такое решение с переменными нашел в интернете:
Интересно, как это будет выглядеть при использовании апи Joomla
Да обычно будет выглядеть
Показать текстовый блок

 вот только на просторах интернета пишут о больших проблемах в производительности в запросах которые используют IF ELSE
« Последнее редактирование: 05.09.2015, 12:58:06 от Istaan » Записан
fbr
Живу я здесь
******

Репутация: +136/-6
Offline Offline

Сообщений: 1250


« Ответ #6 : 05.09.2015, 13:06:10 »

Подскажите, пожалуйста, как это упрощенно выглядело бы с использованием

$model->setState()

или

$query = $db->getQuery(true)
        ->select(array())
        ... ;
Записан
robert
Профи
********

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3567


« Ответ #7 : 05.09.2015, 13:53:41 »

Не совсем понял тему, но IMHO, можно попробовать через foreach выводить каждую категорию.
Записан
fbr
Живу я здесь
******

Репутация: +136/-6
Offline Offline

Сообщений: 1250


« Ответ #8 : 05.09.2015, 14:11:28 »

Тема простая: есть массив $list, содержащий материалы из разных категорий
Количество определено в $model->setState('list.limit', 20);
Сортировку задал по catId, publish_up

Предположим, категорий 5, в первой категории 15 материалов, во второй 5
Запрос к БД вернет только 2 категории из 5
В foreach прогонять поздно ...
Нужно на уровне запроса задать лимит для каждой категории
Можно, конечно, лимит сделать с запасом 1000 ... Но это как-то расточительно)

Может я логику Неправильно построил?
Подскажете как, плз))
« Последнее редактирование: 05.09.2015, 14:15:55 от fbr » Записан
robert
Профи
********

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3567


« Ответ #9 : 05.09.2015, 15:08:02 »

Если у вас модуль и нет необходимости в JPagination, то я бы просто сделал свой запрос в БД с использованием UNION.
Если вы хотите использовать Joomla API (в данном случае метод getItems(), я подозреваю), то можно попробовать прогонять через foreach, как я писал выше, но не результат запроса, а массив ID нужных категорий, каждый раз задать нужный лимит и получить нужное количество материалов конкретной категории. Это предположение, не проверял еще, но думаю, что должно сработать.

P.S. Проверил, работает.
« Последнее редактирование: 05.09.2015, 20:34:25 от robert » Записан
robert
Профи
********

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3567


« Ответ #10 : 05.09.2015, 20:34:34 »

Вот рабочий код
Код
$model=JModelLegacy::getInstance('Articles','ContentModel');
$items=array();
$cats2lims=array('8'=>'2','2'=>'3');
foreach($cats2lims as $cat=>$lim){
$model->setState('filter.category_id',$cat);
$model->setState('list.limit',(int)$lim);
$subitems=$model->getItems();
$items=array_merge($items,$subitems);
}
 
Выводит 2 материала из категории 8 и 3 - из категории 2, $items и есть ваша $list.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #11 : 06.09.2015, 00:19:36 »

Вот рабочий код
О ужас )
Записан
robert
Профи
********

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3567


« Ответ #12 : 06.09.2015, 00:43:47 »

О ужас )
Sad

P.S. Istaan, все-таки почему этот код навел на вас такой ужас? Уточню, я это делал в view компонента с целью выводить на каждой странице по 2 материала из категории 8 и 3 - из категории 2.
« Последнее редактирование: 06.09.2015, 10:36:58 от robert » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet