Настройки детального просмотра Битрикс

Новости (комплексный компонент)

Комплексный компонент позволяет создать новостной раздел на сайте. Доступен просмотр детальной информации, списка элементов, настройка экспорта в rss, организация голосования за новости (или другие элементы инфоблоков), настройка отзывов, вывода материалов по темам, настройки ЧПУ и многое другое.

Пример вызова

<?$APPLICATION->IncludeComponent(
«bitrix:news»,
«.default»,
Array(
«DISPLAY_DATE» => «Y»,
«DISPLAY_PICTURE» => «Y»,
«DISPLAY_PREVIEW_TEXT» => «Y»,
«SEF_MODE» => «N»,
«IBLOCK_TYPE» => «news»,
«IBLOCK_ID» => «33»,
«NEWS_COUNT» => «5»,
«USE_SEARCH» => «N»,
«USE_RSS» => «Y»,
«USE_RATING» => «N»,
«USE_CATEGORIES» => «Y»,
«USE_REVIEW» => «N»,
«USE_FILTER» => «N»,
«SORT_BY1» => «ACTIVE_FROM»,
«SORT_ORDER1» => «DESC»,
«SORT_BY2» => «SORT»,
«SORT_ORDER2» => «ASC»,
«PREVIEW_TRUNCATE_LEN» => «0»,
«LIST_ACTIVE_DATE_FORMAT» => «d.m.Y»,
«LIST_FIELD_CODE» => array(0=>»»,),
«LIST_PROPERTY_CODE» => array(0=>»»,),
«HIDE_LINK_WHEN_NO_DETAIL» => «N»,
«DISPLAY_NAME» => «Y»,
«META_KEYWORDS» => «KEYWORDS»,
«META_DESCRIPTION» => «DESCRIPTION»,
«DETAIL_ACTIVE_DATE_FORMAT» => «d.m.Y»,
«DETAIL_FIELD_CODE» => array(0=>»»,),
«DETAIL_PROPERTY_CODE» => array(0=>»SOURCE»,),
«DETAIL_DISPLAY_TOP_PAGER» => «N»,
«DETAIL_DISPLAY_BOTTOM_PAGER» => «Y»,
«DETAIL_PAGER_TITLE» => «Страница»,
«DETAIL_PAGER_TEMPLATE» => «»,
«DISPLAY_PANEL» => «Y»,
«SET_TITLE» => «Y»,
«INCLUDE_IBLOCK_INTO_CHAIN» => «N»,
«ADD_SECTIONS_CHAIN» => «Y»,
«USE_PERMISSIONS» => «N»,
«CACHE_TYPE» => «A»,
«CACHE_TIME» => «3600»,
«CACHE_FILTER» => «N»,
«DISPLAY_TOP_PAGER» => «N»,
«DISPLAY_BOTTOM_PAGER» => «Y»,
«PAGER_TITLE» => «Новости»,
«PAGER_SHOW_ALWAYS» => «N»,
«PAGER_TEMPLATE» => «»,
«PAGER_DESC_NUMBERING» => «N»,
«PAGER_DESC_NUMBERING_CACHE_TIME» => «36000»,
«NUM_NEWS» => «20»,
«NUM_DAYS» => «360»,
«YANDEX» => «N»,
«CATEGORY_IBLOCK» => array(0=>»33″,1=>»29″,2=>»8″,),
«CATEGORY_CODE» => «THEMES»,
«CATEGORY_ITEMS_COUNT» => «4»,
«VARIABLE_ALIASES» => Array(
«SECTION_ID» => «SECTION_ID»,
«ELEMENT_ID» => «news»
)
)
);?>

Описание параметров

Дополнительно

DISPLAY_DATE Вывод даты элементов. DISPLAY_PICTURE Вывод изображения для анонса. DISPLAY_PREVIEW_TEXT Вывод текст анонса для элементов.

Основные параметры

IBLOCK_TYPE Тип информационного блока. IBLOCK_ID Код информационного блока. NEWS_COUNT Количество новостей на странице при постраничной навигации. USE_SEARCH Разрешить поиск. При установленной опции будет выведена форма поиска. Поиск будет осуществляться только в выводимой данным компонентом информации.

Настройки RSS

USE_RSS Разрешен экспорт в RSS и доступны поля для спецификации настроек RSS. NUM_NEWS Количество новостей, экспортируемых в RSS. NUM_DAYS Количество дней для экспорта. Например, за последние 30 дней. YANDEX Экспортировать в диалект Яндекса. Опция служит для подключения формата для отправки новостей службе Яндекс.Новости и отличается дополнительной веткой, содержащей полный текст элемента информационного блока (DETAIL_TEXT). В этом случае элементы информационного блока выбираются за последние два дня без ограничения количества.

Настройки голосования

USE_RATING Разрешить голосование. Посетители смогут голосовать за новости, выставляя баллы, на странице с детальной информацией. При установленной опции становятся доступными следующие поля: MAX_VOTE Максимальный балл.
VOTE_NAMES Массив, в котором задаются подписи к баллам в таком виде: «VOTE_NAMES» => Array(«оч плохо»,»плохо»,»удв»,»хор»,»отл»,»»),
Если подписи заданы, то они будут выведены вместо оценок-цифр. Если массив не задан, то будут использованы значения по умолчанию.

Настройка материалов по теме

USE_CATEGORIES Опция включает возможность вывода материалов по теме. Материалы в привязке к темам создаются следующим образом. Создается инфоблок (например, «темы»), в котором определяются будущие темы материалов в виде разделов. Разделы заполнять элементами не требуется. В настройках инфоблока, элементы которого предполагается привязывать к созданным темам, определятся свойство типа «Привязка к разделам» и выбирается инфоблок, в котором разделы являются темами. И далее для каждого из элементов этого инфоблока можно задать свойство привязки к теме. CATEGORY_IBLOCK Инфоблоки. Выбираются инфоблоки, из которых будет происходить выборка информации. В коде задается в виде массива. array(0=>»33″,1=>»29″,2=>»8″,), CATEGORY_CODE Код свойства, в котором хранится привязка элемента к определенному разделу (например, THEMES). CATEGORY_ITEMS_COUNT Максимальное количество материалов из одного инфоблока.

Настройки отзывов

USE_REVIEW Разрешить отзывы. При установленной опции становятся доступными следующие поля: MESSAGES_PER_PAGE Количество сообщений на одной странице.
USE_ Определяется вывод изображения и поля ввода в форме добавления отзыва в публичной части. PATH_TO_SMILE Путь относительно корня сайта к папке со смайлами. Значение по умолчанию /bitrix/images/forum/smile/. FORUM_ID ID форума, созданного для отзывов посетителей. URL_TEMPLATES_READ Указывается относительный путь к странице чтения темы на форуме. Если поле пусто, путь к странице будет получен из настроек форума.

Настройки фильтра

USE_FILTER Показывать фильтр. При отмеченной опции доступны следующие поля:
FILTER_NAME Задается имя переменной, в которой передается массив параметров из фильтра. Служит для определения выходящих из фильтра элементов. Поле может быть оставлено пустым, тогда используется значение по умолчанию. FILTER_FIELD_CODE Выбрать нужные поля элементов инфоблока, по которым возможна фильтрация. Заполняется из публичной части редактора, удерживая клавишу Ctrl либо в коде, указывая массив: Array(«NAME»,»PREVIEW_TEXT»,»PREVIEW_PICTURE»,»DETAIL_TEXT»,»»), FILTER_PROPERTY_CODE Свойства элементов инфоблока, по которым будет возможна фильтрация. Заполняется из публичной части редактора, удерживая клавишу Ctrl либо в коде, указывая массив. Например, Array(«SOURCE»,»USER»,»»,»»).

Источник данных

SORT_BY1 Поле для первой сортировки новостей:

  • ID – по ID;
  • sort – по индексу сортировки;
  • timestamp_x – по дате изменения;
  • name – по заголовку;
  • active_from – по дате начала активности.

SORT_ORDER1 Направление для первой сортировки новостей:

  • asc – по возрастанию;
  • desc – по убыванию.

SORT_BY2 Поле для второй сортировки новостей.

  • ID – по ID;
  • sort – по индексу сортировки;
  • timestamp_x – по дате изменения;
  • name – по заголовку;
  • active_from – по дате начала активности.

SORT_ORDER2 Направление для второй сортировки новостей.

  • asc – по возрастанию;
  • desc – по убыванию.
Управление адресами страниц

SEF_MODE Включить поддержку ЧПУ. VARIABLE_ALIASES При отключенной опции SEF_MODE доступны поля для задания Идентификатора раздела (например, SECTION_ID) и Идентификатора новости (например, ELEMENT_ID). Данные поля хранятся в массиве идентификаторов раздела и новости, например:
«VARIABLE_ALIASES» => Array(
«SECTION_ID» => «SECTION_ID»,
«ELEMENT_ID» => «ELEMENT_ID»
) При включенной опции SEF_MODE доступны следующие параметры: SEF_FOLDER Каталог ЧПУ (относительно корня сайта).
SEF_URL_TEMPLATES В данном массиве определяются шаблоны адресов различных страниц в новостном разделе:

  • Cтраница общего списка. Указывается путь к общему списку элементов. Переход на эту страницу будет происходить по ссылке Вернуться к списку.
  • Страница раздела. Для перехода на страницу раздела в в качестве параметра должно передаваться ID раздела (#SECTION_ID#). По умолчанию поле содержит #SECTION_ID#/. Если разделы в инфоблоке не заданы, то поле требуется оставить пустым.
  • Страница детального просмотра. Указывается путь к странице детального просмотра. В качестве параметра должно передаваться ID элемента.
  • Страница поиска. Задается часть содержимого адресной строки при переходе к странице поиска. Например, search/.
  • Страница RSS. Задается часть содержимого адресной строки при переходе к странице rss. Например, rss/.
  • Страница RSS для раздела. Задается часть содержимого адресной строки при переходе к странице rss в каждом разделе. По умолчанию #SECTION_ID#/rss/.

«SEF_URL_TEMPLATES» => Array(
«news» => «list/»,
«section» => «section/»,
«detail» => «#ELEMENT_ID#/»,
«search» => «search/»,
«rss» => «rss/»,
«rss_section» => «#SECTION_ID#/rss/»
),
В публичной части редактора путь к каждой странице задается в отдельном поле.

Настройки кеширования

CACHE_TYPE Тип кеширования:

  • А — Авто: действует при включенном автокешировании на странице Настройки кэширования (Настройки > Настройки продукта > Автокеширование) и при установленном времени кэширования в поле CACHE_TIME.
  • Y — Кешировать: должно быть установлено время кеширования (CACHE_TIME). Настройки автокеширования не влияют на данный тип кеширования.
  • N — Не кешировать: кеширование не происходит.

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

Дополнительные настройки

DISPLAY_PANEL Добавлять кнопки в Административную панель в режиме редактирования сайта и в области редактирования данного компонента. SET_TITLE В качестве заголовка страницы установить имя текущего инфоблока. INCLUDE_IBLOCK_INTO_CHAIN В цепочку навигации будет добавлено имя инфоблока. ADD_SECTIONS_CHAIN При наличии разделов в инфоблоке и установленной опции при переходе по разделам в цепочку навигации будут добавлены названия разделов. USE_PERMISSIONS Использовать дополнительное ограничение доступа к детальной информации элементов инфоблока. При установленной опции становится доступным следующее поле: GROUP_PERMISSIONS Выбор групп пользователей, имеющих доступ к детальной информации.

Настройки детального просмотра

DISPLAY_NAME Вывод названия элемента. META_KEYWORDS Установить ключевые слова страницы из свойства. Среди всех свойств, определенных для данного инфоблока, выбирается то, в котором содержатся ключевые слова. META_DESCRIPTION Установить ключевые слова страницы из свойств инфоблока. DETAIL_ACTIVE_DATE_FORMAT Формат показа даты. В выпадающем списке перечислены все возможные варианты показа даты, формируемые внутри компонента. Выбрав пункт (другое)> можно сформировать свой вариант на основании php-функции date.
Предустановленные варианты формата даты:

Код Формат даты
d-m-Y 22-02-2007
m-d-Y 02-22-2007
Y-m-d 2007-02-22
d.m.Y 22.02.2007
m.d.Y 02.22.2007
j M Y 22 Фев 2007
M j, Y Фев 22, 2007
j F Y 22 Февраль 2007
F j, Y Февраль 22, 2007
d.m.y g:i A 22.02.07 7:30 AM
d.m.y G:i 22.02.07 7:30
d.m.Y H:i 22.02.2007 07:30

DETAIL_FIELD_CODE Поля, которые будут отображены на странице детального просмотра. Задается в виде массива с символьными именами полей в коде или в публичной части редактора, удерживая клавишу Ctrl. Если ничего не выбрано, то будут выведены поля по умолчанию. DETAIL_PROPERTY_CODE Свойства, которые будут отображены на странице детального просмотра. Задается в виде массива с символьными именами свойств в коде или в публичной части редактора, удерживая клавишу Ctrl. Если ничего не выбрано, то свойства отображены не будут.

Настройки списка

PREVIEW_TRUNCATE_LEN Максимальная длина анонса для вывода (только для типа текст), после которой текст анонс будет отсечен. LIST_ACTIVE_DATE_FORMAT Формат показа даты. В выпадающем списке перечислены все возможные варианты показа даты, формируемые внутри компонента. Выбрав пункт (другое)>, вы можете сформировать свой вариант на основании php-функции date.
Предустановленные варианты формата даты:

Код Формат даты
d-m-Y 22-02-2007
m-d-Y 02-22-2007
Y-m-d 2007-02-22
d.m.Y 22.02.2007
m.d.Y 02.22.2007
j M Y 22 Фев 2007
M j, Y Фев 22, 2007
j F Y 22 Февраль 2007
F j, Y Февраль 22, 2007
d.m.y g:i A 22.02.07 7:30 AM
d.m.y G:i 22.02.07 7:30
d.m.Y H:i 22.02.2007 07:30

LIST_FIELD_CODE Поля, которые будут отображены на странице списка элементов. Задается в виде массива с символьными именами полей в коде или в публичной части редактора, удерживая клавишу Ctrl. Если ничего не выбрано, то будут выведены поля по умолчанию. LIST_PROPERTY_CODE Свойства, которые будут отображены на странице списка элементов. Задается в виде массива с символьными именами свойств в коде либо в публичной части редактора, удерживая клавишу Ctrl. Если ничего не выбрано, то свойства отображены не будут. HIDE_LINK_WHEN_NO_DETAIL Скрывать ссылку, если нет детального описания или у пользователя нет прав на ее просмотр.

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

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

PAGER_TEMPLATE Название шаблона постраничной навигации. Если поле пусто, то выбирается шаблон по умолчанию (.default). Также в системе задан шаблон orange. PAGER_DESC_NUMBERING Использовать обратную навигацию, когда меняется лишь последняя страница при добавлении нового элемента. Это происходит, если новые элементы попадают всегда вверх списка (отсортированы по дате начала активности по убыванию). Эти страницы удобно закешировать на длительный срок PAGER_DESC_NUMBERING_CACHE_TIME Время кеширования страниц для обратной навигации.

Список новостей в Битрикс

Всем привет! Мы продолжаем запутанную историю с Битрикс:)

Раз уж мы начали потихоньку разбирать огромное количество компонентов этой системы, то давайте попробуем реализовать компонент, который служит для вывода списка новостей в Битрикс из инфоблока, а именно bitrix:news.list. Я надеюсь, что вы читаете начальные уроки документации по этой системе и уже знаете, что такое инфоблок и как его создать в админке…Кхм…

Ладно сделаю небольшой экскурс и по этому вопросу 🙂 так как он основополагающий, а дальше продолжим работу с компонентом.

Что такое Инфоблок?

Информационные блоки (Инфоблоки) — модуль, позволяющий каталогизировать и управлять различными типами (блоками) однородной информации. С помощью информационных блоков может быть реализована публикация различных типов динамической информации: каталоги товаров, блоки новостей, справочники и т.д.

Информационные блоки — ключевой момент Bitrix Framework. Практически всё, что делается в системе в той или иной мере завязано на этот модуль, даже если это и не отображается явно.

Информационные блоки представляют собой очередной уровень абстракции над обычными таблицами СУБД, своеобразная «база данных в базе данных». Поэтому к ним частично применимы все те правила, которых придерживаются при проектировании БД.

Как создать Инфоблок?

Чтобы компонент заработал, необходимо создать информационный блок. Предполагаем, что используется тип инфоблоков из дистрибутива программы (хотя вполне возможно, что администратор сайта создаст для этого другой тип информационных блоков). Перейдите в раздел Контент > Информ. Блоки > Типы информ. Блоков > Сервисы:

  1. Нажмите Добавить инфоблок на контекстной панели. Откроется форма создания инфоблока.
  2. Заполните закладку Инфоблок;
  3. Введите Символьный код: любое название на латинице;
  4. Осуществите привязку к нужному сайту;
  5. Введите Название инфоблока: любое осмысленное название на кириллице.
  6. Остальные поля закладки оставьте без изменений.
  7. Сохраните внесенные изменения.

Инфоблок создастся, система вернется к списку инфоблоков.

А теперь вернемся к компоненту bitrix:news.list.

Для начала создадим тип инфоблока «Контент» (id=Content), а в нём инфоблок «Новости» с символьным кодом NEWS (как создать тип инфоблока будет всем домашнее задание). Также при создании инфоблока настроим параметры URL примерно так как на скриншоте:

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

Во вкладке поля зададим:

  1. Обязательной привязку к разделам
  2. Дата начала активности = «текущие дата и время»
  3. Обязательность символьного кода (и генерацию транслитерацией или с помощью внешнего сервиса переводов)

Теперь на нашей тестовой странице разместим компонент bitrix:news.list и скопируем шаблон .default в шаблон сайта, переименовав его, к примеру, в my_newslist. Обратим внимание в параметрах компонента на пункт «Формат показа даты» — этим пунктом мы воспользуемся для формирования даты по образцу из макета. Так же в параметрах компонента (.parameters.php) зададим один новый параметр — NEWSLIST_TITLE — это будет заголовок нашей новостной страницы. В итоге код страницы в HTML макете будет выглядеть так (это уже отработанный код для того чтобы визуально видеть расположение элементов, далее покажу код в php-шаблоне):

<h4 class=»indent-2″>Последние новости:</h4> <ul class=»list-news»> <li> <a href=»#» class=»btn btn_»>Apr 07, 2016</a> <p class=»text-info»>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. <a href=»#» class=»underline»>Новость 1</a> </li> <li> <a href=»#» class=»btn btn_»>Apr 7, 2016</a> <p class=»text-info»>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. <a href=»#» class=»underline»>Новость 2</a> </li> <li> <a href=»#» class=»btn btn_»>Apr 8, 2016</a> <p class=»text-info»>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. <a href=»#» class=»underline»>Новость 3</a> </li> </ul>

В итоге код php-шаблона после интеграции этой разметки станет таким:

<?if(!defined(«B_PROLOG_INCLUDED») || B_PROLOG_INCLUDED!==true)die();?> <h4 class=»indent-2″><?=$arParams?>:</h4> <ul class=»list-news»> <?if($arParams):?> <?=$arResult?><br /> <?endif;?> <?foreach($arResult as $arItem):?> <? $this->AddEditAction($arItem, $arItem, CIBlock::GetArrayByID($arItem, «ELEMENT_EDIT»)); $this->AddDeleteAction($arItem, $arItem, CIBlock::GetArrayByID($arItem, «ELEMENT_DELETE»), array(«CONFIRM» => GetMessage(‘CT_BNL_ELEMENT_DELETE_CONFIRM’))); ?> <li id=»<?=$this->GetEditAreaId($arItem);?>»> <?if($arParams!=»N» && $arItem):?> <a <?if(!$arParams || ($arItem && $arResult)):?>href=»<?echo $arItem?>» <?endif;?>class=»btn btn_»><?echo $arItem?></a> <?endif?> <?if($arParams!=»N» && is_array($arItem)):?> <?if(!$arParams || ($arItem && $arResult)):?><a href=»<?=$arItem?>»> <img class=»preview_picture» border=»0″ src=»<?=$arItem?>» width=»<?=$arItem?>» height=»<?=$arItem?>» alt=»<?=$arItem?>» title=»<?=$arItem?>» style=»float:left» /></a> <?else:?> <img class=»preview_picture» border=»0″ src=»<?=$arItem?>» width=»<?=$arItem?>» height=»<?=$arItem?>» alt=»<?=$arItem?>» title=»<?=$arItem?>» style=»float:left» /> <?endif;?> <?endif?> <?if($arParams!=»N» && $arItem):?> <?if(!$arParams || ($arItem && $arResult)):?> <p class=»text-info»><?echo $arItem?></p> <?else:?> <p class=»text-info»><?echo $arItem?></p> <?endif;?> <?endif;?> <?if($arParams!=»N» && $arItem):?> <?echo $arItem;?> <?endif;?> <?if(!$arParams || ($arItem && $arResult)):?> <a href=»<?echo $arItem?>» class=»underline»>&gt;&gt;</a> <?endif;?> <?if($arParams!=»N» && is_array($arItem)):?> <div style=»clear:both»></div> <?endif?> <?foreach($arItem as $code=>$value):?> <small> <?=GetMessage(«IBLOCK_FIELD_».$code)?>:&nbsp;<?=$value;?> </small><br /> <?endforeach;?> <?foreach($arItem as $pid=>$arProperty):?> <small> <?=$arProperty?>:&nbsp; <?if(is_array($arProperty)):?> <?=implode(«&nbsp;/&nbsp;», $arProperty);?> <?else:?> <?=$arProperty;?> <?endif?> </small><br /> <?endforeach;?> </li> <?endforeach;?> <?if($arParams):?> <br /><?=$arResult?> <?endif;?> </ul>

Это на самом деле наш стандартный шаблон .default, в нем практически не внесено изменений, удалявших бы старый код, характерный для этого шаблона. В рамках данного урока нас устроит стандартный и лаконичный вывод новостной ленты. На самом деле он скопирован в папку шаблона сайта и мы можем смело править его в свое удовольствие, используя все доступные в шаблоне данные, а те которые не доступны мы можем всегда выбрать в файле result_modifier.php, если его нет в папке с шаблоном вы можете его смело создать и делать в нем все выборки с базы, дабы не мешать логику с версткой.

Теперь осталось вызвать компонент ленты новостей на главной странице или на любой другой вашей статической странице, или в header.php шаблона, или в footer.php шаблона (это зависит от того, где вы хотите видеть новости и где они должны быть доступны):

<?$APPLICATION->IncludeComponent(«bitrix:news.list», «my_newslist», array( «IBLOCK_TYPE» => «-«, «IBLOCK_ID» => «NEWS», «NEWS_COUNT» => «20», «SORT_BY1» => «ACTIVE_FROM», «SORT_ORDER1» => «DESC», «SORT_BY2» => «SORT», «SORT_ORDER2» => «ASC», «FILTER_NAME» => «», «FIELD_CODE» => array( 0 => «», 1 => «», ), «PROPERTY_CODE» => array( 0 => «», 1 => «», ), «CHECK_DATES» => «Y», «DETAIL_URL» => «», «AJAX_MODE» => «N», «AJAX_OPTION_JUMP» => «N», «AJAX_OPTION_STYLE» => «N», «AJAX_OPTION_HISTORY» => «N», «CACHE_TYPE» => «A», «CACHE_TIME» => «36000000», «CACHE_FILTER» => «N», «CACHE_GROUPS» => «Y», «PREVIEW_TRUNCATE_LEN» => «», «ACTIVE_DATE_FORMAT» => «f j, Y», «SET_TITLE» => «N», «SET_STATUS_404» => «N», «INCLUDE_IBLOCK_INTO_CHAIN» => «N», «ADD_SECTIONS_CHAIN» => «N», «HIDE_LINK_WHEN_NO_DETAIL» => «N», «PARENT_SECTION» => «», «PARENT_SECTION_CODE» => «», «INCLUDE_SUBSECTIONS» => «Y», «DISPLAY_TOP_PAGER» => «N», «DISPLAY_BOTTOM_PAGER» => «N», «PAGER_TITLE» => «Новости», «PAGER_SHOW_ALWAYS» => «N», «PAGER_TEMPLATE» => «», «PAGER_DESC_NUMBERING» => «N», «PAGER_DESC_NUMBERING_CACHE_TIME» => «36000», «PAGER_SHOW_ALL» => «N», «DISPLAY_DATE» => «Y», «DISPLAY_NAME» => «Y», «DISPLAY_PICTURE» => «Y», «DISPLAY_PREVIEW_TEXT» => «Y», «NEWSLIST_TITLE» => «Новости», «AJAX_OPTION_ADDITIONAL» => «» ), false );?>

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

На этом все 🙂 До скорых встреч!

Алексей Копча

Настройка ЧПУ ссылок 1С Битрикс

По умолчанию при создании информационного путь к страницам раздела и детального просмотра задается в виде ссылок на физические файлы которые должны содержать соответствующие компоненты.

Наша задача добиться чтобы ссылки на страницы раздела и страницы детального просмотра имели вид ЧПУ, т. е.: корневой раздел/название раздела/название статьи.

Для этого в настройках инфоблока необходимо внести адреса

URL страницы информационного блока: /#SITE_DIR#/poleznaya-informatsiya

URL страницы раздела: /#SITE_DIR#/poleznaya-informatsiya/#CODE#

RL страницы детального просмотра: /#SITE_DIR#/poleznaya-informatsiya/#SECTION_CODE#/#CODE#

где:

#SITE_DIR# — коневая папка сайта

poleznaya-informatsiya — физическая папка с файлом index.php и компонентой «Список новостей»

#SECTION_CODE# — символический код раздела

#CODE# — символический код элемента

В настройках полей элементов инфоблока указать обязательным «Символьный код» включить «Если код задан, то проверять на уникальность», «Транслитерировать из названия при добавлении элемента.», «Удалять лишние символы замены.».

Так как мы используем инфоблок с разделами то и в настройках полей разделов инфоблока задать соотвествующие параметры как и для элементов.

Теперь создадим соответствующие разделы и статьи для нашего инфоблока

Все первоначальные этапы по созданию инфоблока у нас созданы теперь необходимо позаботится о выводи информации на сайте, для этих целей у нас существует компоненты: «Список новостей» и «Новость детально».

Настройка и вывод списка статей

Создадим в нашей физической папке «poleznaya-informatsiya» файл index.php и добавим в него компоненту «Список новостей», выбираем соответствующий информационный блок, в нашем случае это «Статьи». Для того что бы наша компонента отображала только статьи принадлежащие разделу в дополнительным настройках компоненты необходимо указать переменным глобально массива $_REQUEST который будет содержать символический код, а именно ={$_REQUEST}

<?$APPLICATION->IncludeComponent(
«bitrix:news.list»,
«bar»,
array(
«ACTIVE_DATE_FORMAT» => «d.m.Y»,
«ADD_SECTIONS_CHAIN» => «N»,
«AJAX_MODE» => «Y»,
«AJAX_OPTION_ADDITIONAL» => «»,
«AJAX_OPTION_HISTORY» => «N»,
«AJAX_OPTION_JUMP» => «N»,
«AJAX_OPTION_STYLE» => «Y»,
«CACHE_FILTER» => «N»,
«CACHE_GROUPS» => «Y»,
«CACHE_TIME» => «36000000»,
«CACHE_TYPE» => «N»,
«CHECK_DATES» => «Y»,
«COMPONENT_TEMPLATE» => «bar»,
«DETAIL_URL» => «»,
«DISPLAY_BOTTOM_PAGER» => «N»,
«DISPLAY_DATE» => «Y»,
«DISPLAY_NAME» => «Y»,
«DISPLAY_PICTURE» => «Y»,
«DISPLAY_PREVIEW_TEXT» => «N»,
«DISPLAY_TOP_PAGER» => «N»,
«FIELD_CODE» => array(
0 => «»,
1 => «»,
),
«FILE_404» => «»,
«FILTER_NAME» => «»,
«HIDE_LINK_WHEN_NO_DETAIL» => «N»,
«IBLOCK_ID» => «4»,
«IBLOCK_TYPE» => «ARTICLES»,
«INCLUDE_IBLOCK_INTO_CHAIN» => «N»,
«INCLUDE_SUBSECTIONS» => «N»,
«MESSAGE_404» => «»,
«NEWS_COUNT» => «3»,
«PAGER_BASE_LINK_ENABLE» => «N»,
«PAGER_DESC_NUMBERING» => «N»,
«PAGER_DESC_NUMBERING_CACHE_TIME» => «36000»,

«PAGER_SHOW_ALL» => «N»,
«PAGER_SHOW_ALWAYS» => «N»,
«PAGER_TEMPLATE» => «all»,
«PAGER_TITLE» => «»,
«PARENT_SECTION» => $_REQUEST,
«PARENT_SECTION_CODE» => $_REQUEST,
«PREVIEW_TRUNCATE_LEN» => «»,
«PROPERTY_CODE» => array(
0 => «»,
1 => «»,
),
«SET_BROWSER_TITLE» => «N»,
«SET_LAST_MODIFIED» => «N»,
«SET_META_DESCRIPTION» => «N»,
«SET_META_KEYWORDS» => «N»,
«SET_STATUS_404» => «Y»,
«SET_TITLE» => «N»,
«SHOW_404» => «N»,
«SORT_BY1» => «RAND»,
«SORT_BY2» => «RAND»,
«SORT_ORDER1» => «RAND»,
«SORT_ORDER2» => «RAND»
),
false
);?>

Теперь для работы нашей ссылки необходимо настроить «Правило обработки адресов»

Условие: #^/poleznaya-informatsiya/(+)#

Файл: /poleznaya-informatsiya/index.php

Правило: SECTION_CODE=$1

Настройка и вывод детальной информации статьи

Создадим в нашей физической папке «poleznaya-informatsiya» файл detail.php и добавим в него компоненту «Новость детально», выбираем соответствующий информационный блок, в нашем случае это «Статьи». для того что бы наша компонента отображала нужную нас статью в основных параметрах компоненты необходимо указать переменные глобально массива $_REQUEST который будет содержать символический код, а именно ={$_REQUEST}

$APPLICATION->IncludeComponent(
«bitrix:news.detail»,
«»,
Array(
«ACTIVE_DATE_FORMAT» => «d.m.Y»,
«ADD_ELEMENT_CHAIN» => «N»,
«ADD_SECTIONS_CHAIN» => «Y»,
«AJAX_MODE» => «N»,
«AJAX_OPTION_ADDITIONAL» => «»,
«AJAX_OPTION_HISTORY» => «N»,
«AJAX_OPTION_JUMP» => «N»,
«AJAX_OPTION_STYLE» => «Y»,
«BROWSER_TITLE» => «-«,
«CACHE_GROUPS» => «Y»,
«CACHE_TIME» => «36000000»,
«CACHE_TYPE» => «A»,
«CHECK_DATES» => «Y»,
«DETAIL_URL» => «»,
«DISPLAY_BOTTOM_PAGER» => «Y»,
«DISPLAY_DATE» => «N»,
«DISPLAY_NAME» => «Y»,
«DISPLAY_PICTURE» => «Y»,
«DISPLAY_PREVIEW_TEXT» => «Y»,
«DISPLAY_TOP_PAGER» => «N»,
«ELEMENT_CODE» => $_REQUEST,
«ELEMENT_ID» => $_REQUEST,
«FIELD_CODE» => array(«»,»»),
«IBLOCK_ID» => «2»,
«IBLOCK_TYPE» => «info»,
«IBLOCK_URL» => «»,
«INCLUDE_IBLOCK_INTO_CHAIN» => «Y»,
«MESSAGE_404» => «»,
«META_DESCRIPTION» => «-«,
«META_KEYWORDS» => «-«,
«PAGER_BASE_LINK_ENABLE» => «N»,
«PAGER_SHOW_ALL» => «N»,
«PAGER_TEMPLATE» => «.default»,
«PAGER_TITLE» => «Страница»,
«PROPERTY_CODE» => array(«»,»»),
«SET_BROWSER_TITLE» => «Y»,
«SET_CANONICAL_URL» => «N»,
«SET_LAST_MODIFIED» => «N»,
«SET_META_DESCRIPTION» => «Y»,
«SET_META_KEYWORDS» => «Y»,
«SET_STATUS_404» => «N»,
«SET_TITLE» => «Y»,
«SHARE_HANDLERS» => array(«delicious»,»facebook»,»lj»,»mailru»,»twitter»,»vk»),
«SHARE_HIDE» => «N»,
«SHARE_SHORTEN_URL_KEY» => «»,
«SHARE_SHORTEN_URL_LOGIN» => «»,
«SHARE_TEMPLATE» => «»,
«SHOW_404» => «N»,
«STRICT_SECTION_CHECK» => «N»,
«USE_PERMISSIONS» => «N»,
«USE_SHARE» => «N»
)
);

Настройка правила аналогична так же как и для страницы «Списка новостей»

Условие: #^/poleznaya-informatsiya/(+)/(+)#

Файл: /poleznaya-informatsiya/detail.php

Bitrix и ошибка 404

Давно бились над проблемой с SEO и применением стандартных комплексных компонентов (bitrix:news, bitrix.catalog) при использовании ЧПУ.
Проблема заключалась вот в чем: при отдаче страницы с отсутствующим элементом или секцией инфоблока выставляется статус «404 Not Found» (в теле компонентов bitrix:news.list, bitrix:news.detail, bitrix:catalog.section, bitrix:catalog.element есть соответствующие строки, но к сожалению не было способа показать тело 404-ой страницы (мы обычно создаем страницу /404.php) с ее оформлением и пр.
Поначалу нас устраивал редирект на эту страницу вида:

LocalRedirect(«/404.php», «404 Not Found»);

но чтобы им воспользоваться приходилось создавать дубликаты компонентов в своем пространстве имен (anima:catalog.section, например).
Потом было найдено более изящное решение, не задевающее компоненты. В стандартных компонентах используется определение константы ERROR_404 в случае проблем с поиском инфоблока, секии, элемента во время выполнения компонента, но по заверениям разработчиков она используется исключительно для статистики. Однако, отображение стрницы – единый runtime и определенные константы можно использовать практически в самом его (runtime-a) конце. Результатом этих роазмышлений стал код в init.php:

/* Неочевидное перенаправление на страницу 404-ой ошибки */ AddEventHandler(«main», «OnEpilog», «Redirect404»); function Redirect404() { if(defined(«ERROR_404») ) { LocalRedirect(«/404.php», «404 Not Found»); } }

Довольно легко для понимания и универсально и работает везде, но… У данной конструкции (у редиректа) естьи темные стороны.

  • Пользователь сайта, случайно вбив ошибочный длинный URL перебрасывался на /404.php без возможности увидеть и исправить ошибку в строке адреса.
  • Поисковой робот, придя на ошибочную страницу видел странную последовательность: при обращении к несуществующей странице он получал статус 301 Moved Permanently (в редких случаях «404 Not found» и переадресацию на страницу /404.php, которая выставляла статус «404 Not found». Немного путано.

Тогда появилась идея: в функции Redirect404() очистить буфер вывода с помощью $APPLICATION->RestartBuffer(); и «заинклюдить» /404.php. Но тут на словах оказалось проще, чем на деле. Беда крылась в том, что пролог и эпилог сайта вызываются через конструкцию require_once и повторно вызвать их (для отображения шапки, футера, стилей на заветной 404-ой странице) оказалось невозможно; другими словами мы теряли, к примеру, меню, вставленное в визуальную часть пролога (header.php шаблона).
Путем экспериментов, проб и ошибок мы пришли к довольно универсальной записи:
Внимательный зритель заметит, что в функции появилась константа PATH_TO_404. Определять данную константу предлагается первой строкой в визуальной части пролога:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *