Задать вопрос
Express777
@Express777

Вывести разные хедеры на странице главного раздела, подраздела, детальной новости в Битрикс?

Здравствуйте.
Есть задача вывести разный кусок ХТМЛ кода на странице главного раздела, подраздела, детальной новости.

Исходные данные:
Битрикс 15 версий, стандарт.
Главная страница, mysite.com. Раздел mysite.com/news/, в котором развернуть комплекcный компонент news. Комплекcный компонент берет данные из одного инфоблока news (символьный код такой же как название физ раздела).
ЧПУ комплексного компонента news настроено так:

Каталог ЧПУ (относительно корня сайта): /news/
Страница раздела: #SECTION_CODE_PATH#/
Страница детального просмотра: #SECTION_CODE_PATH#/#ELEMENT_ID#/

#SECTION_CODE_PATH#/ потому что в разделах есть подразделы.
Чпу работает норм. mysite.com/news/ отображаются все элементы из инфоблока news. mysite.com/news/section1/ все элементы из инфоблока раздела section1 . mysite.com/news/section1/11/ детальная новость.

Мне нужно вставить в хедер 4 относительно разных сайдбара. Контент в них меняется в зависимости от страницы.
На главной странице mysite.com сайдбар1.
mysite.com/news/ сайдбар2
mysite.com/news/название раздела/ сайдбар3
В детальной новости сайдбар4.
Можно было бы поставить условие по урл. Но название раздела и название детальной новости генеруется динамически. Название раздела может глубокой вложенности. То есть mysite.com/news/section1/subsection1/subsubsection1/

Можно было бы вставить сайдбар в шаблон компонентов раздела и детальной новости. Но в таком случае теряется гибкость. Сегодня news, завтра articles с другим шаблоном. И в каждый из них пихать сайдбар2. Поддерживать то будут и другие программисты. Этот код они могут не понять :)

Есть ли какой то глобальная констатанта в битриксе, которая определяет тип страницы.? Чтобы в хедере можно было поставить условие.
Если тип страницы "главный раздел", делай то то. Если тип страницы "подраздел" делай то то. Если "детальная новость" и т.д.

Может есть еще какие то варианты решения?
  • Вопрос задан
  • 6141 просмотр
Подписаться 3 Оценить Комментировать
Решения вопроса 1
babarun
@babarun Куратор тега 1С-Битрикс
Безумный план моих идей в руках больных людей
Для начала в хедере, там где должен быть html сайдбара, размещаете
<?$APPLICATION->ShowViewContent("sidebar");?>
- здесь будет буферезированный вывод.

Потом, внутри комплексного компонента news, создаёте в шаблонах news.detail и news.list файлы component_epilog.php. Для каждого из этих шаблонов в component_epilog.php создаёте глобальную переменную, например
$SIDEBAR_FOR = 'news_detail'; //глобальная переменная для детальной новости

или
$SIDEBAR_FOR = 'news_section'; //глобальная переменная для раздела


Далее в футере шаблона сайта проверяете значение $SIDEBAR_FOR и в зависимости от неё делаете буферезированный вывод в header.php с помощью функции AddViewContent("sidebar", $html_sidebar).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Не используйте комплексные компоненты.
Не используйте настройки ЧПУ в компонентах.
Это все сделано для того, чтобы продавать, а не для того чтобы использовать ;)
Мое мнение: комплексный компонент - это почти всегда плохо, и в редких случаях - очень плохо.

По реализации можно предложить 100500 вариантов.
1 Полностью разные шаблоны c разными header и переключением скажем по константе, которую выставлять прямо в странице до подключения хедера и запуская ядра. Тут придется отказаться от комплексного компонента, чтобы скрипты mysite.com/news/ и mysite.com/news/название раздела/, а так же детальная страница новости были реально различными. Что не очень хорошо, та как по сути mysite.com/news/ частный случай mysite.com/news/название раздела/.
2 С помощью отложенных функций отложить создание сайдбара до выполнения комплексного компонента. В зависимости от его результата формировать сайдбар. Как получать результат дело десятое - можно встроить генерацию в эпилоги компоентов комплексного, можно задавать какую-то переменную и потом реагировать на ее значение.
3 js
3.1 То же что и два, но генерить динамический инлайн скрипт который создаст сайдбар. Точнее скрипа создания должен быть один - генерировать данные для него в зависимости от результата компонента, чтобы этот скрипт создал из этих данных сайдбар.
3.2 Отложить еще сильнее создание сайдбара. Пусть ваши компоненты выгружают какое-то значение в js на страницу, а после загрузки получать сайдбар ajax'ом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы