Как изменить глубиномер

InstantCMS 2.X

Добавить или удалить пункты

#16 2 октября 2017 в 13:23


  1.  
  2. if($childs){
  3. if (!empty($childs['tabs'])){
  4. foreach($childs['tabs'] as $relation_name => $relation){
  5. $this->addBreadcrumb($relation['title'], href_to($relation_name));
  6. }
  7. }
  8. if (!empty($childs['lists'])){
  9. foreach($childs['lists'] as $relation){
  10. $this->addBreadcrumb($relation['title'], href_to($relation['ctype_name']));
  11. }
  12. }
  13. }
  14.  

Loadырь

Спасибо! Но не пашет. Думаю потому, что в вашем коде идет проверка на дочерние записи, а их как раз нет, поскольку запись сама дочерняя. Нам нужно найти родителя.

То есть
  1. !empty($childs['tabs']
вернет false, то есть отсутствие дочерних.
Как и
  1. !empty($childs['lists']
Любо я туплю.
#17 2 октября 2017 в 13:29

Думаю потому, что в вашем коде идет проверка на дочерние записи

iDrevniy
Да, правильно. Вам нужны не дочерние, а родитель. Которого можно вытащить из дочернего по полю parent_catalog_id.

Ну а код который выше кидал сами попробуйте, поменял там названия типов контента на ваши.
#18 2 октября 2017 в 13:33


Комрады! Может еще кто носом ткнет куда посмотреть, где покопать? Прям хочется сделать нормальный глубиномер.

iDrevniy
Не уверен, что понял как именно вы хотите сделать.

Попробуйте так, добавьте в файл /templates/default/controllers/content/item_view.tpl.php строки
  1.  
  2. if($item["ctype_name"] == 'details') {
  3. $this->addBreadcrumb("Каталог", href_to('catalog'));
  4. $news = cmsCore::getModel('content')->getContentItem('catalog', $item['parent_catalog_id']);
  5. $this->addBreadcrumb($news['title'], href_to('catalog', $news['slug'] . '.html'));
  6. } else {
  7. .................
  8. тут старый код по формированию крошек
  9. .................
  10.  
  11. }
  12. $this->addBreadcrumb($item['title']); //эта строка остается
  13.  
У меня пример можно посмотреть тут. Это объявление созданное внутри новости. И крошки получаются Новости -> Моя новость -> Мое объявление

@SmartControl

Закрываем тему. Вам огромное спасибо! Как отблагодарить?
#19 2 октября 2017 в 13:36
@SmartControl, в $item['parent_catalog_id'] может быть несколько записей.
#20 2 октября 2017 в 13:38


@SmartControl, в $item['parent_catalog_id'] может быть несколько записей.

Loadырь

А какие? Но все работает чудесно! Откорректировал ваш код под свои name'ы типа контента и без проблем!

По сути у меня все упиралось в эту строчку
  1. $news = cmsCore::getModel('content')->getContentItem('catalog', $item['parent_catalog_id']);
Ее я не мог придумать.
#21 2 октября 2017 в 13:41

@SmartControl, в $item['parent_catalog_id'] может быть несколько записей.

Loadырь
Согласен. Но что интересно — это не ломает мой код. В этом случае будет использоваться первый родитель.

А какие?

iDrevniy
Если вы к пяти записям каталога привяжете одну и ту же деталь, то в этом поле будут пять родителей через запятую.
#22 2 октября 2017 в 13:42

А какие?

iDrevniy
Все какие добавите при редактировании этого поля. Например добавьте к поршню мотор и стойку.
#23 2 октября 2017 в 13:44

В этом случае будет использоваться первый родитель.

@SmartControl
А если мы зашли во второго или в четвёртого из пяти, не комильфо показывать в остальных тоже первого родителя.
#24 2 октября 2017 в 13:45
Да, конструкция получилась крутая. Еще раз спасибо вам @SmartControl и вам Loadырь.

Еще раз убедился, что система оч крутая, вопросы решаются проще, чем казалось сначала.
#25 2 октября 2017 в 13:48
Loadырь, да это понятно… Это не универсальное решение, не для всех. Для всех его может быть и не существует (нужны тогда настройки в админке как именно формировать крошки). Надо смотреть как именно там построены связи, и что выводить если у дочернего элемента 15 родителей. В самом простом случае с одним родителем все будет работать отлично и логично.
#26 2 октября 2017 в 14:19
Я специально не писал про нескольких родителей. Думаю что при таком раскладе дочерний элемент должен быть самостоятельным. Иначе пользователь просто заблудится, один и тот же элемент принадлежит разному типу.

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