Актуальная проблема (1 из веток
instantcms.ru/forum/thread11911.html): разместить статью сразу в нескольких разделах instantcms
Допустим, есть вложенное меню
Добавляем мы статью "
салат греческий" в раздел "
салаты". Логично при этом чтобы она отображалась также в разделах "
Еда" и "
Первое".
Как решил эту проблему я: не добавлением статьи в несколько категорий, но выводом её анонса в родительской категории, если статья есть в одной из вложенных.
Правим файла /components/content/model.php вообще и функции
public function getArticles($category_id, $page=1, $perpage=100, $orderby='title', $orderto='asc') {
в частности
после строки
вставляем код
//!---связи
//1 уровень
$sql1 = "SELECT id FROM cms_category WHERE parent_id = '$category_id'"; //узнаём, кому мы являемся родителем
$result1 = $this->inDB->query($sql1);
$innercats=(int)$category_id; //исходно показываем только в одной категории
if ($this->inDB->num_rows($result1)) { //если есть вложенные категории
while($innercat1 = $this->inDB->fetch_assoc($result1)){
$innercats = $innercats.", ".(int)$innercat1['id']; //добавляем их id
}
}
//2 уровень аналогично 1-му
$sql2 = "SELECT id FROM cms_category WHERE parent_id IN($innercats)";
$result2 = $this->inDB->query($sql2);
if ($this->inDB->num_rows($result2)) {
while($innercat2 = $this->inDB->fetch_assoc($result2)){
$innercats = $innercats.", ".(int)$innercat2['id'];
}
}
//!---
костыль, конечно, но для меню с уровнем вложенности не больше 2 (как в примере) пойдёт
если есть более глубокие уровни, "2 уровень" нужно скопировать и вставить ещё раз
Далее, в след. запросе, который начинается
исправляем часть строки
WHERE con.category_id = '$category_id'
на
WHERE con.category_id IN ($innercats)