1.10 Отображение статьи во всех родительских категориях

показываем тизеры статей от вложенных категорий

#1 31 октября 2012 в 19:11
Решение для версии 1.9: Статья сразу в нескольких разделах

Решение для 1.10

Преамбула:

Актуальная проблема (1 из веток instantcms.ru/forum/thread11911.html): разместить статью сразу в нескольких разделах.
Допустим, есть вложенное меню
  1.  
  2. Еда
  3. -Первое
  4. --Салаты
Добавляем мы статью "салат греческий" в раздел "салаты". Логично при этом чтобы она отображалась также в разделах "Еда" и "Первое".

Как решил эту проблему я: не добавлением статьи в несколько категорий, но выводом её анонса в родительской категории, если статья есть в одной из вложенных.

Экшн:

Правим 2 файла. Первый: /components/content/model.php
Добавляем рядом с
  1. /**
  2.   * Условия выборки
  3.   */
функцию
  1. public function whereCatIn($category_ids) {
  2. $this->inDB->where("con.category_id IN (".$category_ids.")"); //условие выборки статьи из перечисленных категорий
  3. }
  4.  
Второй: /components/content/frontend.php
Находим "Условия" (около 108 строки) и комментируем строку:
  1. // Условия
  2. //$model->whereCatIs($cat['id']);
добавляем после неё
  1. //!---связи
  2. //1 уровень
  3. $sql1 = "SELECT id FROM cms_category WHERE parent_id = '".(int)$cat['id']."'";
  4.  
  5. $result1 = $inDB->query($sql1);
  6.  
  7. $innercats=(int)$cat['id']; //исходно показываем только в одной категории
  8.  
  9. if ($inDB->num_rows($result1)) {
  10. while($innercat1 = $inDB->fetch_assoc($result1)){
  11. $innercats = $innercats.", ".(int)$innercat1['id'];
  12. }
  13. }
  14.  
  15. //2 уровень
  16. $sql2 = "SELECT id FROM cms_category WHERE parent_id IN($innercats)";
  17.  
  18. $result2 = $inDB->query($sql2);
  19.  
  20. if ($inDB->num_rows($result2)) {
  21. while($innercat2 = $inDB->fetch_assoc($result2)){
  22. $innercats = $innercats.", ".(int)$innercat2['id'];
  23. }
  24. }
  25. //!---
  26.  
  27. $model->whereCatIn($innercats);
для 3 и больше уровней вложенных категорий, скопируйте блок //2 уровень
#2 31 октября 2012 в 23:38
спасибо. для полного счастья еще бы сделать опционально для нужных категорий первого уровня :)

if $cat['id'] = тут номера нужных категорий где надо вывести статьи из подразделов ;
{
ваш код
}
#3 1 ноября 2012 в 00:58

спасибо. для полного счастья еще бы сделать опционально для нужных категорий первого уровня :)

picaboo
пожалуйста😊id категории смотрится в админке в каталоге статей
  1. $catsin=Array(1,2,3); //id категорий, для каких показывать
  2. if(in_array($cat['id'],$catsin)) {
  3. //здесь большой кусок кода из 1 сообщения темы
  4. } else {
  5. $model->whereCatIs($cat['id']);
  6. }
#4 1 ноября 2012 в 01:15
Я не понял. Кто греческий салат ест первым блюдом?
#5 1 ноября 2012 в 02:00

Я не понял. Кто греческий салат ест первым блюдом?

letsgo
да Вы эстет!
#6 1 ноября 2012 в 02:19
… мало того что ест, так ещё хочет чтобы он в находился в этом самом первом блюде)))
А решение таки очень гут!
#7 19 марта 2013 в 17:49
спасибо!
#8 26 октября 2013 в 23:02
Проверил на 1.10.3 — все работает. Не пойму, почему этого нет в базовом функционале?
#9 3 декабря 2013 в 13:50
Parse error: syntax error, unexpected T_PUBLIC in /public_html/components/content/model.php on line 220

Вот такую ошибку выдает, чянд?
#10 8 января 2014 в 23:06

Решение для 1.10

Cruzka

Спасибо! Проверил на 1.10. Все работает. Выводит отлично.
#11 17 февраля 2014 в 21:04
Подниму тему. Как сделать вывод новостей в порядке их добавления, что бы последняя добавленная показывалась вверху?
#12 17 февраля 2014 в 22:04
cmotp10, посмотрите в настройках раздела новостей.
#13 27 февраля 2014 в 01:57


cmotp10, посмотрите в настройках раздела новостей.

Madmax

Да, спасибо большое! В настойках вывода статей есть сортировка.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.