0 Пользователей и 1 Гость просматривают эту тему.
  • 12 Ответов
  • 1295 Просмотров
*

fbr

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

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

Код: 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

  • Захожу иногда
  • 122
  • 3 / 3
Так посмотри как сделано в стандартном модуле, там же есть количество материалов.
Просто добавить туда фильтр по категориям
*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
В стандартном модуле задается лимит на общее количество записей.
А мне нужен лимит в каждой категории
*

Taatshi

  • Глобальный модератор
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Тут дело не в АПИ. Если Вы придумаете такую структуру запроса к БД, чтоб Вам подошла - перевести на АПИ будет раз плюнуть. Сначала словами напишите как должен выглядеть запрос. Структуру запроса. Логику.

Думаю, нужно писать несколько запросов - к каждой категории, и потом их объединять в один. Если количество категорий не известно заранее - в цикле.
« Последнее редактирование: 05.09.2015, 08:59:40 от Taatshi »
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

fbr

  • Завсегдатай
  • 1625
  • 189 / 7
Вот такое решение с переменными нашел в интернете:
Код: sql
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

  • Живу я здесь
  • 3406
  • 428 / 4
Вот такое решение с переменными нашел в интернете:
Интересно, как это будет выглядеть при использовании апи Joomla
Да обычно будет выглядеть
Спойлер
[свернуть]

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

fbr

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

$model->setState()

или

$query = $db->getQuery(true)
        ->select(array())
        ... ;
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Не совсем понял тему, но IMHO, можно попробовать через foreach выводить каждую категорию.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

fbr

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

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

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

robert

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

P.S. Проверил, работает.
« Последнее редактирование: 05.09.2015, 19:34:25 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Вот рабочий код
Код: php-brief
$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.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
О ужас )
:(

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

Получить количество активных модулей в определенной позиции

Автор zemelea

Ответов: 2
Просмотров: 1710
Последний ответ 18.02.2014, 11:13:05
от Aleks.Denezh
[Решено] Пагинация в Joomla 2.5 Жестко прописать количество элементов на страницу

Автор Зверушь

Ответов: 4
Просмотров: 3261
Последний ответ 10.01.2014, 16:03:03
от Зверушь
[Решено] Удаление ID из материалов в своём компоненте

Автор n_drey

Ответов: 9
Просмотров: 1208
Последний ответ 25.12.2013, 16:46:54
от n_drey
Как добавить свой фильтр к выводу материалов?

Автор Roporak

Ответов: 1
Просмотров: 3879
Последний ответ 27.11.2013, 23:44:35
от voland
Как добавить вид отображения категории?

Автор Asttoxa

Ответов: 3
Просмотров: 5159
Последний ответ 20.11.2013, 14:07:59
от Asttoxa