C

Cruzka

Времена не выбирают..
+105
Репутация
1108
Рейтинг
#1 Статья сразу в нескольких разделах 25 октября 2012 в 15:53


Более подходящим для ветки было б название "Отображение статьи в родительской категори".
А вообще интересное решение, если б ещё выбор был: отображать — не отображать статьи из дочерних категорий
(или снизу вверх — "отображать статью в родительской категории", вообще сказка была б.
В любом случае, спасибо!

Олег Васильевич я
насчёт названия согласен
настройки — тогда будет уже не такое простое решение, придётся добавлять поля к базе данных, править админку..
если решать так же "костылями" — добавляйте проверку (если category_id==1 тогда отображаем только собственные статьи, в противном случае отображаем также статьи вложенных категорий)

да и не вижу смысла допиливать больше ввиду того что совсем скоро выйдет 1.10 =)
#2 Статья сразу в нескольких разделах 25 октября 2012 в 14:30
Касаемо урл статьи, один из спорных моментов, что при добавлении статьи в несколько категорий, у статьи появятся дубли:
site.ru/eda/pervoe/salaty/grecheskij.html
site.ru/eda/pervoe/grecheskij.html
site.ru/eda/grecheskij.html
В примере таких дублей не будет.
#1 Статья сразу в нескольких разделах 25 октября 2012 в 14:26
Актуальная проблема (1 из веток instantcms.ru/forum/thread11911.html): разместить статью сразу в нескольких разделах instantcms
Допустим, есть вложенное меню
  1.  
  2. Еда
  3. -Первое
  4. --Салаты
Добавляем мы статью "салат греческий" в раздел "салаты". Логично при этом чтобы она отображалась также в разделах "Еда" и "Первое".

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


Правим файла /components/content/model.php вообще и функции
  1. public function getArticles($category_id, $page=1, $perpage=100, $orderby='title', $orderto='asc') {
в частности
после строки
  1. $articles = array();
вставляем код
  1. //!---связи
  2. //1 уровень
  3. $sql1 = "SELECT id FROM cms_category WHERE parent_id = '$category_id'"; //узнаём, кому мы являемся родителем
  4.  
  5. $result1 = $this->inDB->query($sql1);
  6.  
  7. $innercats=(int)$category_id; //исходно показываем только в одной категории
  8.  
  9. if ($this->inDB->num_rows($result1)) { //если есть вложенные категории
  10. while($innercat1 = $this->inDB->fetch_assoc($result1)){
  11. $innercats = $innercats.", ".(int)$innercat1['id']; //добавляем их id
  12. }
  13. }
  14.  
  15. //2 уровень аналогично 1-му
  16. $sql2 = "SELECT id FROM cms_category WHERE parent_id IN($innercats)";
  17.  
  18. $result2 = $this->inDB->query($sql2);
  19.  
  20. if ($this->inDB->num_rows($result2)) {
  21. while($innercat2 = $this->inDB->fetch_assoc($result2)){
  22. $innercats = $innercats.", ".(int)$innercat2['id'];
  23. }
  24. }
  25. //!---
костыль, конечно, но для меню с уровнем вложенности не больше 2 (как в примере) пойдёт
если есть более глубокие уровни, "2 уровень" нужно скопировать и вставить ещё раз

Далее, в след. запросе, который начинается
  1. $sql = "SELECT con.*,
исправляем часть строки
  1. WHERE con.category_id = '$category_id'
на
  1. WHERE con.category_id IN ($innercats)
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.