Июл
20
2021

Как создать страницу новостей на комплексном компоненте в Битрикс с ЧПУ

Научимся создавать новые страницы на комплексном компоненте bitrix:news, как осуществляется настройка ЧПУ Битрикс, настроим автоматические кеширование. Сам комплексный компонент будет вызывать простые компоненты bitrix:news.detail и bitrix:news.list.

Создание инфоблока новостей и его настройка

Самое первое, что стоит сделать - создать нужный инфоблок. Можно в отдельном типе инфоблоков, можно в уже существиющем.

Но обратите внимание на галочку в типе инфоблока "Использовать древовидный классификатор элементов по разделам", если её снять, в инфоблоках внутри не будет разделов.

Переходим в панель управления сайтом, открываем Контент - Инфоблоки - Типы инфоблоков и жмем "Добавить новый тип".

Создание типа инфоблока в 1С Битрикс

Указываем ID "novosti", название на русском - Новости, на английском - News. Галочку "Использовать древовидный классификатор элементов по разделам" оставляем. Жмем Сохранить.

Создание типа инфоблока новостей в 1C-Bitrix

Далее снова раскрываем Контент - Инфоблоки - Типы инфоблоков. В списке находим наш новый тип и жмем на него. В нужном нам типе инфоблоков жмем "Добавить инфоблок".

Добавление инфоблока в БУС Битрикс

Настройка инфоблока

Символьный код укажите novosti, выберите нужный сайт, название Новости.

Для работы ЧПУ требуется настроить параметры работы URL.

  • URL страницы информационного блока: "#SITE_DIR#/novosti/" - адрес страницы, где будет располагаться комплексный компонент.
  • URL страницы раздела: "#SITE_DIR#/novosti/#SECTION_CODE#/" - шаблон URL страницы раздела. Если используете #SECTION_CODE#, не забудьте в последующем указать обязательность заполнения символьного кода раздела.
  • URL страницы детального просмотра: "#SITE_DIR#/novosti/detail/#ELEMENT_CODE#/" - шаблон страницы детального просмотра элемента. Так же, если используется #ELEMENT_CODE#, не забудьте указать обязательность символьного кода записей в будущем.

В адресе детального просмотра можно вместо detail использовать макрос адреса раздела, чтобы структура пути была такой "SITE_DIR#/novosti/#SECTION_CODE#/#ELEMENT_CODE#/", но тогда потребется всем разделам в обязательном порядке указывать раздел, либо для записей без раздела не будет #SECTION_CODE#, а соответственно не будет работать детальная страница.

Доступные макросы для формирования шаблона адреса доступны рядом с полем по кнопке.

Настройка ЧПУ в инфоблоке Битрикс

Важно. Надо чтобы битрикс мог различать пути раздела и детальной страницы. Не получится разделу указать макрос /catalog/#SECTION_CODE#/, а детальной /catalog/#ELEMENT_CODE#/. А если вы так уже сделали, то скажите адрес /catalog/aaa/ - это должна быть детальная страница или раздел? Не понятно, вот и битрикс тоже не поймет и вместо детальной будет пытаться открыть раздел, которого нет. Не спасет даже установка /catalog/#SECTION_CODE#/ и /catalog/#ELEMENT_ID#/. Вам кажется что если передано число - то это детальная, а если код - то раздел. Но код элемента тоже может быть числом. Если детальной установить /catalog/#SECTION_CODE#/#ELEMENT_CODE#/ - то тут уже всё понятно. /catalog/aaa/ - это раздел, а /catalog/aaa/bbb/ - это детальная.

"Индексировать разделы для модуля поиска" и "Индексировать элементы для модуля поиска" - галочки оставим, они нужны для того, чтобы мы могли находить в поиске (например через компонент bitrix:search.page) по сайту разделы и элементы инфоблока.

В итоге должно получиться так. Проверьте слеши в конце в параметрах URL, без них могут быть ошибки.

Если не работает ЧПУ в Битрикс, проверить

Переходим к вкладке Поля

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

Если мы не хотим указывать уникальность кода, тогда нам надо уникализировать адреса детальных страниц, например, путем добавления в него ID записи, тогда даже если у некоторых элементов будет одинаковый код, их адреса будут разными.
URL страницы детального просмотра: "#SITE_DIR#/novosti/detail/#ELEMENT_ID#-#ELEMENT_CODE#/"

Аналогично сделаем обязательным символьный код раздела во вкладке "Поля разделов".

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

Настройка прав доступа к инфоблоку, если не показываются новости на сайте Битрикс не авторизованным пользователям.

Наконец, сохраним инфоблок.

Создание страницы новостей

Вручную копировать откуда-то вызов $APPLICATION->IncludeComponent(...) не будем, потому что вызов компонентов меняется с разными версиями битрикс. Самая актуальная и подходящая версия вызова компонента - в визуальном редакторе на нашем сайте. Этот способ еще и самый удобный.

Не надо помнить для bitrix:news.list свойства, для bitrix:news.detail. Все параметры будем задавать через визуальный редактор.

Перейдем на главную страницу сайта, раскроем панель администратора (эрмитаж), нажмем Создать раздел.

Создание страницы раздела в Битрикс
  • Заголовок раздела: Новости. Этот параметр в будущем будет влиять на формирование хлебных крошек в разделе.
  • Имя папки - novosti. Имя папки в настройках инфоблока должно быть таким же, как тут. Если там мы указали "#SITE_DIR#/novosti/", то #SITE_DIR# у нас пустой, так как сайт не в отдельной папке, папка раздела novosti.
  • Добавить пункт меню можно снять, либо настройте его нажав Далее.

Жмем готово.

Должна открыться такая страница. "Текст..." сразу удаляем.

Создание страницы в Битрикс

В поиске компонентов ищем news, зеленый компонент перетаскиваем в окно редактирования. Зеленый цвет компонента говорит о том, что он комплексный.

Если списка компонентов у вас нет, нажмите на кнопку справа, он откроется. Если компонент не перетаскивается, проверьте включенный режим правки, должен быть первый "Визуальный режим".

Если не показывается список компонентов в визуальном редакторе битрикс

Перетаскиванием добавьте компонент на страницу.. Так мы добавили на страницу комплексный компонент bitrix:news.

Через несколько секунд, после перетаскивания компонента, у вас появится окно его редактирования.

Выберите тип инфоблока и сам инфоблок - те, которые мы недавно создавали.

Настройки ЧПУ

Далее перейдем к вкладке Управление адресами страниц.

  • Каталог ЧПУ относительно корня сайта: "/novosti/". Это папка, в которой располагается файл с компонент и текущая соответственно.
  • Страница общего списка - оставляем пустым, так как список у нас на главной странице компонента
  • Страница раздела: "#SECTION_CODE#/"
  • Страница детального просмотра: "detail/#ELEMENT_CODE#/"

Если склеить значения "Каталог ЧПУ" и "Страница раздела" и из параметров компонента, у вас должен получиться "URL страницы раздела" из параметров информационного блока, только без макроса #SITE_DIR#. У нас это и там и тут "/novosti/#SECTION_CODE#/", всё верно.

Если склеить значения "Каталог ЧПУ" и "Страница детального просмотра" и из параметров компонента, у вас должен получиться "URL страницы детального просмотра" из параметров информационного блока, но без макроса #SITE_DIR#.

Если вкратце, то принцип работы комплексного компонента такой:

  1. Получить адрес, открытый пользователем.
  2. По маскам, которые мы указали на настройках ЧПУ определить, какая страница нужна - список новостей, страница раздела или детальная новость.
  3. В зависимости от этого подключить нужный файл из шаблона комплексного компонента. (news.php, section.php, detail.php)
  4. В подключенном файле уже происходит вызов простого компонента. Для страницы общего списка это news.php, для раздела section.php, для детальной новости - detail.php

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

В каких файлах какой компонент вызывать:

  • news.php - bitrix:news.list, либо bitrix:catalog.section.list, для вывода разделов, вместо элементов.
  • section.php - тот же bitrix:news.list с передачей в параметрах этого:
"PARENT_SECTION" => $arResult["VARIABLES"]["SECTION_ID"],
"PARENT_SECTION_CODE" => $arResult["VARIABLES"]["SECTION_CODE"],

Либо можно использовать компонент bitrix:catalog.section.

  • detail.php - bitrix:news.detail с передачей:
"ELEMENT_ID" => $arResult["VARIABLES"]["ELEMENT_ID"],
"ELEMENT_CODE" => $arResult["VARIABLES"]["ELEMENT_CODE"],

Кеширование

В параметрах кеширования проверяем, чтобы было Авто + Управляемое, задано приемлемое время кеширования и снята галочка Учитывать права доступа.

Галочку "Учитывать права доступа" требуется установить только в том случае, если разным группам пользователей будет показываться разный контент. У нас же для всех пользователей новости одни и те же. Лишний кеш на каждую отдельную группу пользователей создавать не будем.

настройки кеширования в комплексном компоненте новостей Битрикс

Навигация

Установим параметры работы заголовка страницы и хлебных крошек как на скриншоте. Уберем галочку "Включать инфоблок в цепочку навигации", иначе в хлебных крошках будет дублироваться пункт "Новости", ведь он будет ставиться и от названия раздела и от названия инфоблока.

Настройки хлебных крошек в компоненте новостей Битрикс

Когда страница отсутствует

Последний пункт в настройках компонента - настройка 404 ошибки. Поставим галочки "Устанавливать статус 404" и "Показ специальной страницы", чтобы при отсутствии страницы пользователь видел что страница отсутствует при наборе не верного адреса, а не список новостей. Это важно для SEO, чтобы не было дублей страниц.

Настройка 404 страницы в компоненте новостей Битрикс

Всё сохраним и получим раздел с новостями на сайте! При сохранении комплексного компонента, в корне сайта в файле urlrewrite.php создается запись, с помощью которой битрикс определяет обработчик для адресов, которых физически на сайте не существует.
Если компонент сохранять вручную, через FTP, то запись не создастся и ЧПУ работать не будет. Тогда достаточно пересохранить компонент.

Если у вас 404 ошибка в комплексном компоненте

Если в разделе с комплексным компонентом Битрикс говорит вам, что страницы нет, возможно у вас следующая ошибка:

ЧПУ настроен на работу с символьными кодами, а они не заполнены

Если в макросе адресов используется #CODE#, #ELEMENT_CODE#, #SECTION_CODE# - требуется включать обязательность заполнения символьного кода. К сожалению, об этом часто забывают.

Включите обязательность, автогенерацию из названия элемента и заполните для всех записей код.

Разные настройки ЧПУ в параметрах компонента и инфоблока.

Как проверить правильность настройки ЧПУ я описал в статье выше. Перейти

Не создалась запись в urlrewrite.php

В корне сайте откройте файл urlrewrite.php, в нем должны быть строки по типу

array (
    'CONDITION' => '#^/novosti/#',
    'RULE' => '',
    'ID' => 'bitrix:news',
    'PATH' => '/novosti/index.php',
    'SORT' => 100,
  ),

Где /novosti - папка с комплексным компонентом.

Чтобы исправить проблему, пересохраните компонент через визуальный редактор. Если проблема не ушла - требуется разобраться почему не добавляется запись в urlrewrite.php.

Побился .htaccess

В корне сайт откройте файл .htaccess. В нем обязательно должны быть строки:

  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
  RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]

Если их нет - добавьте. В случае этой проблемы на сайте не будет работать ни один комплексный компонент.

Так можно исправить проблему в bitrix 404 при включённом чпу в комплексном компоненте.

Проблему сразу можно определить или отсечь посмотрев на ошибку 404. Если загружен шаблон сайта, то 404 из Битрикс, если же вы видите черно белую ошибку от Apache или Nginx, то в битрикс лезть нет смысла. Надо разбираться с .htaccess.

Тут стоит искать проблему в .htacces, Apache, Nginx:

А тут мы видим уже работу Битрикс, значит до него запрос дошел, надо разбираться с ним:

Не верная передача параметров из комплексного компонента в простой

Когда вы на странице добавили комплексный компонент, например bitrix:news, то настраиваете вы его. При том сам он никакую логику не несет, кроме как распределение запросов между простыми компонентами.

И проблема может быть в том, что не все параметры корректно передаются в простой компонент.

Откройте шаблон комплексного компонента и посмотрите как вызываются простые компоненты. Всё должно передаваться из $arParams или $arResult.

Вот я открыл файл шаблона детальной страницы в комплексном шаблоне, тут вызов bitrix:news.detail, у меня путь такой: /bitrix/templates/furniture_pale-blue/components/bitrix/news/.default/detail.php. В файле я вижу что всё хорошо, "захардкоженых" параметров нет.

Битрикс не может определить какую страницу открывать

Не получится разделу указать макрос /catalog/#SECTION_CODE#/, а детальной /catalog/#ELEMENT_CODE#/. А если вы так уже сделали, то скажите адрес /catalog/aaa/ - это должна быть детальная страница или раздел?

Подробнее это разобрано в блоке "Настройка инфоблока", выделил "Важно"

Пожалуйста, оцените на сколько вам понравилась статья!
Голосов: 13 Среднее: 4.6