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

InstantCMS 2.X

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

#1 2 октября 2017 в 00:39
Всем добра!

Закопался, не могу сообразить.

Идея такая: есть два типа контента (например: 1 — каталог, 2 — детали). Первый родительский, второй дочерний. Добавляем в каталог запись "Мотор", в детали "Поршень". Имеем следующие глубиномеры: /->Каталог->Мотор и /->Детали->Поршень. Понимаем, что не так это должно выглядеть, хочется получить Каталог->Мотор->Поршень.

Как я мыслю: отключаем отображение списка для ТК 2 Детали, тем самым получаем глубиномер /->Поршень.

Идем в файл /templates/default/controllers/content/item_view.tpl.php и пытаюсь написать следующее
  1.  
  2. if($item["ctype_name"] == 'details') {
  3. $this->addBreadcrumb( что писать тут? не могу сообразить! );
  4. $this->addBreadcrumb( что писать тут? не могу сообразить! );
  5. }
  6.  
То есть, понимаю, что в первой строчке должна быть прописана ссылка на ТК 1 Каталог, во второй строчке на родительскую запись по связи. Но запутался.

Спасибо!
#2 2 октября 2017 в 08:57
А что мешает создать подкатегорию "Детали" в "Моторе"? А так у вас навряд ли получится. У вас же по ссылке "Поршень" открывается другой тип контента. Соответственно и массив другой, в нём скорее всего нет нужных вам данных.
#3 2 октября 2017 в 09:31


А что мешает создать подкатегорию "Детали" в "Моторе"? А так у вас навряд ли получится. У вас же по ссылке "Поршень" открывается другой тип контента. Соответственно и массив другой, в нём скорее всего нет нужных вам данных.

Lora

Думаю вы ошибаетесь. При создании связи у дочернего типа контента автоматически создается поле со ссылкой на запись родительского типа контента к которой привязана дочерняя запись. Соответственно в дочернюю запись обязательно должен передаваться как минимум id типа контента родителя (потому что name поля формируется из name родителя) и id записи привязки (а иначе как).
#4 2 октября 2017 в 10:20
Первая часть проблемы решена.

Вот так будет выглядеть ссылка на родительский тип контента:
  1.  
  2. if($item["ctype_name"] == 'details') {
  3. $this->addBreadcrumb("Каталог (или языковая константа)", href_to('catalog'));
  4. }
  5.  
Остается вопрос со второй частью. Как прописать родительскую запись.
#5 2 октября 2017 в 10:38
Возможно я что то не так понял.) Итак
screenshots.firefox.com/lX099aX2vODALv9A/second

Далее
screenshots.firefox.com/2b58ZzubfTvyXXYj/second
Далее
screenshots.firefox.com/yWuyUZ0zl8pjLU3p/second

Теперь по ссылке "Поршень" вы переходите к типу контента "Детали" и никаких параметров ни пост ни гет там нет. Это просто ссылка на страницу контента. Или не то?
#6 2 октября 2017 в 11:07


Возможно я что то не так понял.) Итак
screenshots.firefox.com/lX099aX2vODALv9A/second

Далее
screenshots.firefox.com/2b58ZzubfTvyXXYj/second
Далее
screenshots.firefox.com/yWuyUZ0zl8pjLU3p/second

Теперь по ссылке "Поршень" вы переходите к типу контента "Детали" и никаких параметров ни пост ни гет там нет. Это просто ссылка на страницу контента. Или не то?

Lora

Нет, не так. Давайте немного изменим условия задачи.

Под двойку нет компонента, позволяющего создавать блоги. Но мы можем вполне успешно реализовать эту функцию через типы контента и связи. В итоге у нас получается следующая конструкция. Есть два типа контента: Блоги и Посты. Пользователь создает в Блогах запись (как бы создает блог), затем создает дочернюю (привязанную запись) пост.



Тип контента Блоги я в глубиномере вывел. Теперь нужно вывести родительскую запись (как бы категорию или как бы раздел) Блог юзера, к которой привязаны его посты (дочерние записи из типа контента Посты).

Да, еще момент. Отображение списка типа контента Посты выключено.

Есть вот такая конструкция
  1.  
  2. $this->addBreadcrumb($item['parent_title'], rel_to_href(str_replace('/content/'.$ctype['name'], '', $item['parent_url'])));
  3.  
Но она не хочет работать. Возможно вы правы, потому что не передается родительский массив. Но я сомневаюсь.
#7 2 октября 2017 в 11:25
Вы написали тоже самое.Ваш "Пост в блоге"это просто ссылка ведущая на страницу типа контента "Посты". И она ничего не знает о "Блогах". Попробуйте в этой ссылке гетом передать, что вам надо и потом уже на странице "Постов" обернуть глубиномер в условие(Если есть гет) и выводить как вам надо
#8 2 октября 2017 в 11:43


Вы написали тоже самое.Ваш "Пост в блоге"это просто ссылка ведущая на страницу типа контента "Посты". И она ничего не знает о "Блогах". Попробуйте в этой ссылке гетом передать, что вам надо и потом уже на странице "Постов" обернуть глубиномер в условие(Если есть гет) и выводить как вам надо

Lora

Не на столько я силен в программировании. Опять таки, понимаю что нужно скорее всего прописать
  1.  
  2. $this->getParentItems($parent_ctype_name);
  3.  
но вот куда. В item_view.tpl.php эта конструкция просто так не работает.

Думаю нужно этот запрос запихнуть в экшен item_view.php.

Вы были правы. Там нет ни строчки по родителей, только про дочерние записи.
#9 2 октября 2017 в 12:06

Под двойку нет компонента, позволяющего создавать блоги.

iDrevniy
Вообще то это группы вроде.Нет? Переименуйте в Блог, выставьте права и все дела.)
#10 2 октября 2017 в 12:14


Под двойку нет компонента, позволяющего создавать блоги.

iDrevniy
Вообще то это группы вроде.Нет? Переименуйте в Блог, выставьте права и все дела.)

Lora

Я об этом не подумал… Спасибо за идею.

Но у меня еще есть связанные типы контента, в которых я бы хотел реализовать правильный глубиномер.

Пока не могу понять как правильно передать параметры в экшене.
#11 2 октября 2017 в 12:34
Комрады! Может еще кто носом ткнет куда посмотреть, где покопать? Прям хочется сделать нормальный глубиномер.
#12 2 октября 2017 в 13:01
Эту темку можно как пожелание для следующей версии учесть.
#13 2 октября 2017 в 13:11
  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.  
#14 2 октября 2017 в 13:19


  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ырь

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

Любо я туплю.
#15 2 октября 2017 в 13:21

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

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.  
У меня пример можно посмотреть тут. Это объявление созданное внутри новости. И крошки получаются Новости -> Моя новость -> Мое объявление
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.