Статья сразу в нескольких разделах

возможное решение, делал для себя для версии 1.09

#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)
#2 25 октября 2012 в 14:30
Касаемо урл статьи, один из спорных моментов, что при добавлении статьи в несколько категорий, у статьи появятся дубли:
site.ru/eda/pervoe/salaty/grecheskij.html
site.ru/eda/pervoe/grecheskij.html
site.ru/eda/grecheskij.html
В примере таких дублей не будет.
#3 25 октября 2012 в 15:41
Более подходящим для ветки было б название "Отображение статьи в родительской категори".
А вообще интересное решение, если б ещё выбор был: отображать — не отображать статьи из дочерних категорий
(или снизу вверх — "отображать статью в родительской категории", вообще сказка была б.
В любом случае, спасибо!
#4 25 октября 2012 в 15:53


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

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

да и не вижу смысла допиливать больше ввиду того что совсем скоро выйдет 1.10 =)
#5 25 октября 2012 в 21:51
в стандартном движке, при переносе статей из категорий, сохраняется урл родительский
нечто такое нельзя сделать?
#6 25 октября 2012 в 21:58


в стандартном движке, при переносе статей из категорий, сохраняется урл родительский
нечто такое нельзя сделать ?

lezginka.ru
не совсем понял что именно сделать, но мы на нашем проекте пришли к решению сократить путь с

site.ru/eda/pervoe/salaty/grecheskij.html

до

site.ru/grecheskij.html

чтобы, во-первых, не менялся путь при переносе статьи в другую категорию (что плохо для сео), а во-вторых сократить урл, потому что бывают и такие

site.ru/gotovim-bystro-doma-grecheskij-salat.html

и урлы вида

site.ru/eda/pervoe/salaty/gotovim-bystro-doma-grecheskij-salat.html

становятся непомерно длинными
#7 25 октября 2012 в 23:10

(что плохо для сео)

я это и имел ввиду.
хорошо бы это оформить файлами.
кстати, у максисофта есть решение, но там по другому
#8 26 октября 2012 в 00:28


(что плохо для сео)

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

lezginka.ru
оформить файлами — что?
если Вы о смене структуры урл,- могу выложить как я сделал на 9 версии, там аналогично, пару строк правим и готово
#9 26 октября 2012 в 00:37

могу выложить как я сделал на 9 версии

Cruzka
Конечно выкладывайте, используют кому нужно.
Вобщем выкладывайте все что не жалко! smile
#10 26 октября 2012 в 00:47



(что плохо для сео)

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

lezginka.ru
оформить файлами — что?
если Вы о смене структуры урл,- могу выложить как я сделал на 9 версии, там аналогично, пару строк правим и готово

Cruzka

готовый файлы, с внесенными поправками
#11 26 октября 2012 в 00:52


готовый файлы, с внесенными поправками

lezginka.ru
готовые не буду, мало ли какие обновления по безопасности или ещё чего. там правки простые, проще на готовом исправить


могу выложить как я сделал на 9 версии

Cruzka
Конечно выкладывайте, используют кому нужно.
Вобщем выкладывайте все что не жалко! smile

eoleg
мм ок, а в блоге лучше, или темой на форуме?
#12 26 октября 2012 в 00:57
В компоненте видео, хорошо сделано — когда при смене формата урл идет редирект со старого адреса.

А ваш прием, хорош для новых сайтов, которые не наполнены еще статьями
#13 26 октября 2012 в 01:04


В компоненте видео, хорошо сделано — когда при смене формата урл идет редирект со старого адреса.

А ваш прием, хорош для новых сайтов, которые не наполнены еще статьями

Минона

если есть встроенный механизм алиасов (синонимов, наподобии Друпаловского: добавляешь урл1 и урл2, при вводе урл1 редирект на урл2), то должно быть несложно исправить в админке чтобы при редактировании статьи добавлялся алиас со старого названия на новое.
хотя могут быть коллизии если злоупотреблять😊урл1 -> урл2 -> урл3 -> урл1
#14 26 октября 2012 в 01:20

мм ок, а в блоге лучше, или темой на форуме?

Cruzka
у вас по моему еще нет возможности блог заводить, плюс добавил
#15 26 октября 2012 в 02:07


мм ок, а в блоге лучше, или темой на форуме?

Cruzka
у вас по моему еще нет возможности блог заводить, плюс добавил

eoleg

Вы правы =)

Вам не хватает кармы для создания личного блога. Требуется — 35, имеется — 4.

instantcms.ru

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