Интеграция адаптивного Bootstrap шаблона сайта в 1С-Битрикс по шагам - УРОК 7


Наступило время интегрировать в наш шаблон сайта 1С-Битрикс последний элемент, который в Уроке 0 мы отнесли к каркасу (Footer+Header) - Набор симпатичных тизерных блоков (т.е. небольших блоков с текстовым сообщением, картинкой и кнопкой).

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

Чёрные тизеры с логотипами (с главной страницы)

Обратим внимание, что практически идентичный блок (но без логотипов и с кнопками другого цвета) есть в одном из дополнительных макетов - index-3.html:

Красные тизеры без картинок (с внутренней страницы)

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

Сразу обратим внимание на особенности вёрстки - при малой ширине экрана тизеры группируются не по 4 в ряд, а по 2:

тизеры по 2 в ряд (при узком экране)

При ещё большем уменьшении экрана (фактически до уровня мобильного телефона) блоки вновь перегруппируются - по 1 в ряд (т.е. строго друг над другом):

Тизеры по 1 в ряд (вертикально друг над другом) на мобильном устройстве с минимальной шириной экрана

Поскольку всё это уже реализовано в вёрстке нам не потребуется дополнительной работы для реализации такого эффекта. Однако нужно будет внимательно протестировать функционал после внедрения.

Для начала создадим в типе инфоблоков "Шаблон" новый Инфоблок "Тизеры" с символьным кодом TEASERS (процесс создания инфоблока уже описывался в уроке 3, поэтому мы спрячем его под спойлер, который откроют желающие:

Свернуть/Развернуть


На этапе создания инфоблока подумаем какие поля нам могут понадобиться (судя по 2 макетам в начале урока). Перечислим всё:

  1. Картинка для логотипа
  2. 1я строка заголовка (подзаголовок)
  3. 2я строка заголовка (заголовок)
  4. текст тизера
  5. ссылка для кнопки
  6. переключатель цвета тизера

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

  1. Картинка для логотипа - Картинка Анонса
  2. 1я строка заголовка (подзаголовок)
  3. 2я строка заголовка (заголовок) - Название Элемента (всё равно это поле обязательно к заполнению)
  4. текст тизера - Текст Анонса
  5. ссылка для кнопки
  6. переключатель цвета тизера

Для оставшихся полей, очевидно придётся создать свойства.

Зайдём во вкладку "Свойства" настроек инфоблока и создадим 2 свойства типа "строка" задав им символьные коды:

  • SUBTITLE (для подзаголовка)
  • TEASER_LINK (для ссылки)

Создаём свойство инфоблока типа строка

Для задания цвета тизера создадим переключатель, для этого создадим свойства типа "список" с символьным кодом TEASER_COLOR:

Создадим свойство инфоблока типа список

Кнопка с многоточие позволяет перейти в расширенный режим редактирования свойства:

детальное редактирование свойства инфоблока

Создадим 2 значения для свойства списка, одно из которых будет значением "по умолчанию":

Создаём значения списка в режиме детального редактирования свойства инфоблока

Для каждого свойства можно задать помимо значения так же XML_ID (если оставить пустым, то система автоматически сгенерирует их). Для значения "Красный" мы воспользуемся классом блока, задающим этот цвет кнопке тизера. Для чёрного мы задали выдуманное значение, которого нет в CSS.

Перейдём в инфоблок и создадим раздел (Контент → тип инфоблока "Шаблон" → инфоблок "Тизеры" → кнопка "добавить раздел"):

Создаём раздел инфоблока

Не забудем заполнить как название, так и символьный код (так же обязательное поле согласно сделанным выше настройкам):

название и символьный код раздела инфоблока

Создадим элементы инфоблока (сами тизеры) в данном разделе.

Теперь на тестовой странице (например, 1.php) добавим компонент bitrix:news.list и скопируем шаблон компонента .default в шаблон сайта, переименовав в teasers.

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

Тогда код шаблона получится:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<div class="row">
<div class="span12">
<ul class="thumbnails">
<?foreach($arResult["ITEMS"] as $arItem):?>
<?
$this->AddEditAction($arItem['ID'], $arItem['EDIT_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_EDIT"));
$this->AddDeleteAction($arItem['ID'], $arItem['DELETE_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_DELETE"), array("CONFIRM" => GetMessage('CT_BNL_ELEMENT_DELETE_CONFIRM')));
?>
<li class="span3" id="<?=$this->GetEditAreaId($arItem['ID']);?>">
<div class="thumbnail <?=$arItem['PROPERTIES']['TEASER_COLOR']['VALUE_XML_ID']?>">
<div class="caption">
<?if (!empty($arItem["PREVIEW_PICTURE"]["SRC"])):?><img src="<?=$arItem["PREVIEW_PICTURE"]["SRC"]?>" alt="<?=$arItem["NAME"]?>" title="<?=$arItem["NAME"]?>" ><?endif?>
<?if (!empty($arItem['PROPERTIES']['SUBTITLE']['VALUE'])):?><h5><?=$arItem['PROPERTIES']['SUBTITLE']['VALUE']?></h5><?endif?>
<h3><?echo $arItem["NAME"]?></h3>
</div>
<div class="thumbnail-pad">
<?if (!empty($arItem["PREVIEW_TEXT"])):?><p><?echo $arItem["PREVIEW_TEXT"];?></p><?endif?>
<?if (!empty($arItem['PROPERTIES']['TEASER_LINK']['VALUE'])):?><a href="<?=$arItem['PROPERTIES']['TEASER_LINK']['VALUE']?>" class="btn btn_"><?=$arParams['BUTTON_TEXT']?></a><?endif?>
</div>
</div>
</li>
<?endforeach;?>
</ul>
</div>
</div>

Не забудем в параметрах компонента указать количество выводимых элементов, кратное 4 (в оригинальном макете используется 4 тизера в ряд, однако 8 или 12 так же будут смотреться весьма неплохо).

Сейчас компонент выводится ВСЕ элементы инфоблока, однако мы решили, что будем осуществлять фильтрацию и выводить элементы только определённых разделов (для этого мы и создали выше раздел с символьным кодом MAIN_PAGE). Для того, чтобы это сделать зададим в параметрах компонента переменную для фильтрации - arrFilter.

фильтр в параметрах компонента

В таком случае код вызова компонента будет выглядеть:

<?$APPLICATION->IncludeComponent("bitrix:news.list", "teasers", array(
"IBLOCK_TYPE" => "-",
"IBLOCK_ID" => "TEASERS",
"NEWS_COUNT" => "4",
"SORT_BY1" => "ACTIVE_FROM",
"SORT_ORDER1" => "DESC",
"SORT_BY2" => "SORT",
"SORT_ORDER2" => "ASC",
"FILTER_NAME" => "arrFilter",
"FIELD_CODE" => array(
0 => "",
1 => "",
),
"PROPERTY_CODE" => array(
0 => "",
1 => "SUBTITLE",
2 => "TEASER_LINK",
3 => "TEASER_COLOR",
4 => "",
),
"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" => "d.m.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",
"BUTTON_TEXT" => "more info",
"AJAX_OPTION_ADDITIONAL" => ""
),
false
);?>

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

<?$GLOBALS['arrFilter'] = array("SECTION_CODE"=>"MAIN_PAGE");?>

Теперь мы можем разместить фильтр и вызов компонента во включаемой области для страницы или раздела. Следует лишь помнить, что мы уже использовали в шаблон контейнер class="row", поэтому, если мы повторно поместим его в ещё один такой же контейнер, то вёрстка будет повреждена!

Мы воспользуемся компонентом включаемой области для страницы и подключим его в шаблоне сайта:

<?$APPLICATION->IncludeComponent(
"bitrix:main.include",
"",
Array(
"AREA_FILE_SHOW" => "page",
"AREA_FILE_SUFFIX" => "teasers",
"EDIT_TEMPLATE" => ""
)
);?>

Тогда фильтр и компонент списка тизеров необходимо будет положить в файл index_teasers.php в корне сайта.

Если для какой-то страницы нам надо будет вывести тизеры, то просто разместим в разделе рядом с ней файл с именем ИМЯ_СТРАНИЦЫ_teasers.php.

В результате получился функционал аналогичный эталону:

Тизеры на тему 1С-Битрикс

Демо-данные (2 раздела по 4 тизера в каждом) доступны в нашем репозитории на Github вместе с результатами урока. Для импорта в наличии XML и папка с картинками.

Вы можете импортировать демо-данные в 1С-Битрикс с любой кодировкой, в любом имеющийся тип инфоблоков (если там нет соответствующего инфоблока, то он создастся со всеми настройками, описанными в данном уроке).

Не забудьте удалить ненужные более картинки из папки /img/ в шаблоне! Они занимают лишнее место и мешают работать с оставшимися.

 

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

 

Как всегда результаты урока в репозитории на GitHub.


Интеграция адаптивного Bootstrap шаблона сайта в 1С-Битрикс по шагам - УРОК 7

<p>Наступило время интегрировать в наш шаблон сайта 1С-Битрикс последний элемент, который в Уроке 0 мы отнесли к каркасу (Footer+Header) - Набор симпатичных тизерных блоков (т.е. небольших блоков с текстовым сообщением, картинкой и кнопкой).</p> <p><b>В этом уроке мы реализуем тизерные блоки с помощью компонента списка новостей на основе инфоблока с несколькими разделами, отобрав данные для вывода с помощью компонента фильтра.</b></p> <p><img src="/upload/medialibrary/5ba/5ba7897aedb5bf43625c22e95e959dca.png" title="Чёрные тизеры с логотипами (с главной страницы)" hspace="5" vspace="5" border="0" alt="Чёрные тизеры с логотипами (с главной страницы)" width="700" height="171" /></p> <p>Обратим внимание, что практически идентичный блок (но без логотипов и с кнопками другого цвета) есть в одном из дополнительных макетов - index-3.html:</p> <p><img src="/upload/medialibrary/3bb/3bba97dadef299d3cfd4645d66f7f985.png" title="Красные тизеры без картинок (с внутренней страницы)" hspace="5" vspace="5" border="0" alt="Красные тизеры без картинок (с внутренней страницы)" width="700" height="167" /></p> <p>В рамках этого урока мы сможем реализовать один общий компонент для этих блоков. Данные мы так же станем хранить в общем инфоблоке.</p> <p>Сразу обратим внимание на особенности вёрстки - при малой ширине экрана тизеры группируются не по 4 в ряд, а по 2:</p> <p><img src="/upload/medialibrary/21d/21d32280b7218a88a069377335a0602b.png" title="тизеры по 2 в ряд (при узком экране)" hspace="5" vspace="5" border="0" alt="тизеры по 2 в ряд (при узком экране)" width="700" height="468" /></p> <p>При ещё большем уменьшении экрана (фактически до уровня мобильного телефона) блоки вновь перегруппируются - по 1 в ряд (т.е. строго друг над другом):</p> <p><img src="/upload/medialibrary/f4e/f4ee21a59e524b321dfa112c80444110.png" title="Тизеры по 1 в ряд (вертикально друг над другом) на мобильном устройстве с минимальной шириной экрана" hspace="5" vspace="5" border="0" alt="Тизеры по 1 в ряд (вертикально друг над другом) на мобильном устройстве с минимальной шириной экрана" width="286" height="595" /></p> <p>Поскольку всё это уже реализовано в вёрстке нам не потребуется дополнительной работы для реализации такого эффекта. Однако нужно будет внимательно протестировать функционал после внедрения.</p> <p>Для начала создадим в типе инфоблоков &quot;Шаблон&quot; новый Инфоблок &quot;Тизеры&quot; с символьным кодом TEASERS (процесс создания инфоблока уже описывался в уроке 3, поэтому мы спрячем его под спойлер, который откроют желающие:</p> <p> <a onclick="$('#spoiler_1').slideToggle('slow');" href="javascript://" >Свернуть/Развернуть</a> </p> <div style="border: 1px dashed; padding: 10px; display: none;" id="spoiler_1"> <p>Контент → Инфоблоки → Типы инфоблоков → Шаблон → &quot;Добавить инфоблок&quot;</p> <p><img src="/upload/medialibrary/bc0/bc01370cbc9d72fed055de69534674e4.png" title="Создаём новый инфоблок 1С-Битрикс" hspace="5" vspace="5" border="0" alt="Создаём новый инфоблок 1С-Битрикс" width="670" height="591" /></p> <p>Заполним основные поля инфоблока. Не забудем указать совместный тип редактирования разделов и элементов Инфоблока.</p> <p>В отличие от инфоблока баннеров тизеры могут нести полезную информацию и их элементы могут быть полезны для поиска. Однако на начальном этапе мы ещё не можем быть на 100% в этом уверены и не знаем структуры всех страниц, на которых тизеры будут использоваться, поэтому не станем добавлять их в Поиск.</p> <p><img src="/upload/medialibrary/38c/38c08b3a62e8310c64d01ccb264dea4a.png" title="Основные поля инфоблока Тизеры" hspace="5" vspace="5" border="0" alt="Основные поля инфоблока Тизеры" width="670" height="636" /></p> <p>Сразу обозначим важный момент! Мы будем хранить группы тизеров по разделам инфоблока (поскольку нам может понадобиться на разных страницах сайта выводить разные тизеры). Однако, это значит, что нам надо задать некую уникальную характеристику по которой мы будем определять нужный раздел инфоблока. Ею будет символьный код раздела!</p> <p>Зададим обязательность и уникальность символьного кода раздела (можно так же сразу задать правило генерации символьного кода из названия, но это не всегда удобно):</p> <p><img src="/upload/medialibrary/131/131bfb1548717b667ac4d87aeb31b83a.png" title="Настройки полей разделов инфоблока Тизеры" hspace="5" vspace="5" border="0" alt="Настройки полей разделов инфоблока Тизеры" width="670" height="535" /></p> <p>Зададим доступ:</p> <p><img src="/upload/medialibrary/822/822caafcc070a9204e13d15296be0c8e.png" title="настройки доступа инфоблока сладйера" hspace="5" vspace="5" border="0" alt="настройки доступа инфоблока сладйера" width="670" height="640" /></p> <p>Изменим подписи и превратим безликие &quot;элементы&quot; в &quot;Тизеры&quot; для большего удобства редактирования на вкладке &quot;Подписи&quot;:</p> <p><img src="/upload/medialibrary/dc3/dc3bb5043bb087f140062f4d1cea47e1.png" title="Редактируем подписи при создании инфоблока" hspace="5" vspace="5" border="0" alt="Редактируем подписи при создании инфоблока" width="580" height="624" /></p> </div> <p> <br /> </p> <p> На этапе создания инфоблока подумаем какие поля нам могут понадобиться (судя по 2 макетам в начале урока). Перечислим всё: </p> <p> </p> <ol> <li>Картинка для логотипа</li> <li>1я строка заголовка (подзаголовок)</li> <li>2я строка заголовка (заголовок)</li> <li>текст тизера</li> <li>ссылка для кнопки</li> <li>переключатель цвета тизера</li> </ol> <p></p> <p> Не будем мудрствовать и сразу определим некоторые дефолтные поля в соответствие тем, что нам нужны: </p> <ol> <li>Картинка для логотипа - <b>Картинка Анонса</b></li> <li>1я строка заголовка (подзаголовок)</li> <li>2я строка заголовка (заголовок) - <b>Название Элемента</b> <i>(всё равно это поле обязательно к заполнению</i>)</li> <li>текст тизера - <b>Текст Анонса</b></li> <li>ссылка для кнопки</li> <li>переключатель цвета тизера</li> </ol> <p>Для оставшихся полей, очевидно придётся создать свойства.</p> <p>Зайдём во вкладку &quot;Свойства&quot; настроек инфоблока и создадим 2 свойства типа &quot;строка&quot; задав им символьные коды:</p> <p> </p> <ul> <li>SUBTITLE (для подзаголовка)</li> <li>TEASER_LINK (для ссылки)</li> </ul> <p></p> <p><img src="/upload/medialibrary/9b7/9b78e48fec1a6f0177459db62f813473.png" title="Создаём свойство инфоблока типа строка" hspace="5" vspace="5" border="0" alt="Создаём свойство инфоблока типа строка" width="700" height="382" /></p> <p>Для задания цвета тизера создадим переключатель, для этого создадим свойства типа &quot;список&quot; с символьным кодом TEASER_COLOR:</p> <p><img src="/upload/medialibrary/cb2/cb213ad1f2bc239f40e8fde6a2ddaf17.png" title="Создадим свойство инфоблока типа список" hspace="5" vspace="5" border="0" alt="Создадим свойство инфоблока типа список" width="700" height="236" /></p> <p>Кнопка с многоточие позволяет перейти в расширенный режим редактирования свойства:</p> <p><img src="/upload/medialibrary/a3c/a3c2bd3e25f6d0faf8ac2e7dcbf075c5.png" title="детальное редактирование свойства инфоблока" hspace="5" vspace="5" border="0" alt="детальное редактирование свойства инфоблока" width="700" height="52" /></p> <p> Создадим 2 значения для свойства списка, одно из которых будет значением &quot;по умолчанию&quot;: </p> <p><img src="/upload/medialibrary/759/75912fa6d2cc6988f7fd81664a54bd11.png" title="Создаём значения списка в режиме детального редактирования свойства инфоблока" hspace="5" vspace="5" border="0" alt="Создаём значения списка в режиме детального редактирования свойства инфоблока" width="700" height="509" /></p> <p>Для каждого свойства можно задать помимо значения так же XML_ID (если оставить пустым, то система автоматически сгенерирует их). Для значения &quot;Красный&quot; мы воспользуемся классом блока, задающим этот цвет кнопке тизера. Для чёрного мы задали выдуманное значение, которого нет в CSS.</p> <p>Перейдём в инфоблок и создадим раздел (Контент → тип инфоблока &quot;Шаблон&quot; → инфоблок &quot;Тизеры&quot; → кнопка &quot;добавить раздел&quot;):</p> <p><img src="/upload/medialibrary/7cd/7cdd6b6f2c2a91981bd89b1a45db6d81.png" title="Создаём раздел инфоблока" hspace="5" vspace="5" border="0" alt="Создаём раздел инфоблока" width="700" height="359" /></p> <p>Не забудем заполнить как название, так и символьный код (так же обязательное поле согласно сделанным выше настройкам):</p> <p><img src="/upload/medialibrary/b2b/b2b62222f7f2dae7150e5308dbbb3782.png" title="название и символьный код раздела инфоблока" hspace="5" vspace="5" border="0" alt="название и символьный код раздела инфоблока" width="476" height="76" /></p> <p> Создадим элементы инфоблока (сами тизеры) в данном разделе. </p> <p>Теперь на тестовой странице (например, 1.php) добавим компонент bitrix:news.list и скопируем шаблон компонента .default в шаблон сайта, переименовав в teasers.</p> <p>Вынесем текст кнопки в параметры компонента, а для всех необязательных полей поставим проверку на пустоту (не будем выводить картинку, подзаголовок, текст и ссылку, если соответствующие поля у элемента не заполнены). Так же уберём весь мусор, вроде навигационных цепочек.</p> <p>Тогда код шаблона получится:</p> <div style="border: 1px solid; padding: 10px;"><code class="php">&lt;?if(!defined(&quot;B_PROLOG_INCLUDED&quot;) || B_PROLOG_INCLUDED!==true)die();?&gt; <br /> &lt;div class=&quot;row&quot;&gt; <br /> &lt;div class=&quot;span12&quot;&gt; <br /> &lt;ul class=&quot;thumbnails&quot;&gt; <br /> &lt;?foreach($arResult[&quot;ITEMS&quot;] as $arItem):?&gt; <br /> &lt;? <br /> $this-&gt;AddEditAction($arItem['ID'], $arItem['EDIT_LINK'], CIBlock::GetArrayByID($arItem[&quot;IBLOCK_ID&quot;], &quot;ELEMENT_EDIT&quot;)); <br /> $this-&gt;AddDeleteAction($arItem['ID'], $arItem['DELETE_LINK'], CIBlock::GetArrayByID($arItem[&quot;IBLOCK_ID&quot;], &quot;ELEMENT_DELETE&quot;), array(&quot;CONFIRM&quot; =&gt; GetMessage('CT_BNL_ELEMENT_DELETE_CONFIRM'))); <br /> ?&gt; <br /> &lt;li class=&quot;span3&quot; id=&quot;&lt;?=$this-&gt;GetEditAreaId($arItem['ID']);?&gt;&quot;&gt; <br /> &lt;div class=&quot;thumbnail &lt;?=$arItem['PROPERTIES']['TEASER_COLOR']['VALUE_XML_ID']?&gt;&quot;&gt; <br /> &lt;div class=&quot;caption&quot;&gt; <br /> &lt;?if (!empty($arItem[&quot;PREVIEW_PICTURE&quot;][&quot;SRC&quot;])):?&gt;&lt;img src=&quot;&lt;?=$arItem[&quot;PREVIEW_PICTURE&quot;][&quot;SRC&quot;]?&gt;&quot; alt=&quot;&lt;?=$arItem[&quot;NAME&quot;]?&gt;&quot; title=&quot;&lt;?=$arItem[&quot;NAME&quot;]?&gt;&quot; &gt;&lt;?endif?&gt; <br /> &lt;?if (!empty($arItem['PROPERTIES']['SUBTITLE']['VALUE'])):?&gt;&lt;h5&gt;&lt;?=$arItem['PROPERTIES']['SUBTITLE']['VALUE']?&gt;&lt;/h5&gt;&lt;?endif?&gt; <br /> &lt;h3&gt;&lt;?echo $arItem[&quot;NAME&quot;]?&gt;&lt;/h3&gt; <br /> &lt;/div&gt; <br /> &lt;div class=&quot;thumbnail-pad&quot;&gt; <br /> &lt;?if (!empty($arItem[&quot;PREVIEW_TEXT&quot;])):?&gt;&lt;p&gt;&lt;?echo $arItem[&quot;PREVIEW_TEXT&quot;];?&gt;&lt;/p&gt;&lt;?endif?&gt; <br /> &lt;?if (!empty($arItem['PROPERTIES']['TEASER_LINK']['VALUE'])):?&gt;&lt;a href=&quot;&lt;?=$arItem['PROPERTIES']['TEASER_LINK']['VALUE']?&gt;&quot; class=&quot;btn btn_&quot;&gt;&lt;?=$arParams['BUTTON_TEXT']?&gt;&lt;/a&gt;&lt;?endif?&gt; <br /> &lt;/div&gt; <br /> &lt;/div&gt; <br /> &lt;/li&gt; <br /> &lt;?endforeach;?&gt; <br /> &lt;/ul&gt; <br /> &lt;/div&gt; <br /> &lt;/div&gt;</code></div> <p> Не забудем в параметрах компонента указать количество выводимых элементов, кратное 4 (в оригинальном макете используется 4 тизера в ряд, однако 8 или 12 так же будут смотреться весьма неплохо). </p> <p>Сейчас компонент выводится ВСЕ элементы инфоблока, однако мы решили, что будем осуществлять фильтрацию и выводить элементы только определённых разделов (для этого мы и создали выше раздел с символьным кодом MAIN_PAGE). Для того, чтобы это сделать зададим в параметрах компонента переменную для фильтрации - arrFilter.</p> <p><img src="/upload/medialibrary/487/487d9ed912b39add965168c11073fe9c.png" title="фильтр в параметрах компонента" hspace="5" vspace="5" border="0" alt="фильтр в параметрах компонента" width="294" height="26" /></p> <p>В таком случае код вызова компонента будет выглядеть:</p> <div style="border: 1px solid; padding: 10px;"><code class="php">&lt;?$APPLICATION-&gt;IncludeComponent(&quot;bitrix:news.list&quot;, &quot;teasers&quot;, array( <br /> &quot;IBLOCK_TYPE&quot; =&gt; &quot;-&quot;, <br /> &quot;IBLOCK_ID&quot; =&gt; &quot;TEASERS&quot;, <br /> &quot;NEWS_COUNT&quot; =&gt; &quot;4&quot;, <br /> &quot;SORT_BY1&quot; =&gt; &quot;ACTIVE_FROM&quot;, <br /> &quot;SORT_ORDER1&quot; =&gt; &quot;DESC&quot;, <br /> &quot;SORT_BY2&quot; =&gt; &quot;SORT&quot;, <br /> &quot;SORT_ORDER2&quot; =&gt; &quot;ASC&quot;, <br /> &quot;FILTER_NAME&quot; =&gt; &quot;arrFilter&quot;, <br /> &quot;FIELD_CODE&quot; =&gt; array( <br /> 0 =&gt; &quot;&quot;, <br /> 1 =&gt; &quot;&quot;, <br /> ), <br /> &quot;PROPERTY_CODE&quot; =&gt; array( <br /> 0 =&gt; &quot;&quot;, <br /> 1 =&gt; &quot;SUBTITLE&quot;, <br /> 2 =&gt; &quot;TEASER_LINK&quot;, <br /> 3 =&gt; &quot;TEASER_COLOR&quot;, <br /> 4 =&gt; &quot;&quot;, <br /> ), <br /> &quot;CHECK_DATES&quot; =&gt; &quot;Y&quot;, <br /> &quot;DETAIL_URL&quot; =&gt; &quot;&quot;, <br /> &quot;AJAX_MODE&quot; =&gt; &quot;N&quot;, <br /> &quot;AJAX_OPTION_JUMP&quot; =&gt; &quot;N&quot;, <br /> &quot;AJAX_OPTION_STYLE&quot; =&gt; &quot;N&quot;, <br /> &quot;AJAX_OPTION_HISTORY&quot; =&gt; &quot;N&quot;, <br /> &quot;CACHE_TYPE&quot; =&gt; &quot;A&quot;, <br /> &quot;CACHE_TIME&quot; =&gt; &quot;36000000&quot;, <br /> &quot;CACHE_FILTER&quot; =&gt; &quot;N&quot;, <br /> &quot;CACHE_GROUPS&quot; =&gt; &quot;Y&quot;, <br /> &quot;PREVIEW_TRUNCATE_LEN&quot; =&gt; &quot;&quot;, <br /> &quot;ACTIVE_DATE_FORMAT&quot; =&gt; &quot;d.m.Y&quot;, <br /> &quot;SET_TITLE&quot; =&gt; &quot;N&quot;, <br /> &quot;SET_STATUS_404&quot; =&gt; &quot;N&quot;, <br /> &quot;INCLUDE_IBLOCK_INTO_CHAIN&quot; =&gt; &quot;N&quot;, <br /> &quot;ADD_SECTIONS_CHAIN&quot; =&gt; &quot;N&quot;, <br /> &quot;HIDE_LINK_WHEN_NO_DETAIL&quot; =&gt; &quot;N&quot;, <br /> &quot;PARENT_SECTION&quot; =&gt; &quot;&quot;, <br /> &quot;PARENT_SECTION_CODE&quot; =&gt; &quot;&quot;, <br /> &quot;INCLUDE_SUBSECTIONS&quot; =&gt; &quot;Y&quot;, <br /> &quot;DISPLAY_TOP_PAGER&quot; =&gt; &quot;N&quot;, <br /> &quot;DISPLAY_BOTTOM_PAGER&quot; =&gt; &quot;N&quot;, <br /> &quot;PAGER_TITLE&quot; =&gt; &quot;Новости&quot;, <br /> &quot;PAGER_SHOW_ALWAYS&quot; =&gt; &quot;N&quot;, <br /> &quot;PAGER_TEMPLATE&quot; =&gt; &quot;&quot;, <br /> &quot;PAGER_DESC_NUMBERING&quot; =&gt; &quot;N&quot;, <br /> &quot;PAGER_DESC_NUMBERING_CACHE_TIME&quot; =&gt; &quot;36000&quot;, <br /> &quot;PAGER_SHOW_ALL&quot; =&gt; &quot;N&quot;, <br /> &quot;BUTTON_TEXT&quot; =&gt; &quot;more info&quot;, <br /> &quot;AJAX_OPTION_ADDITIONAL&quot; =&gt; &quot;&quot; <br /> ), <br /> false <br /> );?&gt;</code></div> <p> Тогда для того, чтобы вывести элементы только нужного нам раздела инфоблока перед компонента необходимо будет разместить код фильтра. В нашем случае он будет выглядеть: </p> <div style="border: 1px solid; padding: 10px;"><code class="php">&lt;?$GLOBALS['arrFilter'] = array(&quot;SECTION_CODE&quot;=&gt;&quot;MAIN_PAGE&quot;);?&gt;</code></div> <p> Теперь мы можем разместить фильтр и вызов компонента во включаемой области для страницы или раздела. <i><font color="#ff0000">Следует лишь помнить, что мы уже использовали в шаблон контейнер class=&quot;row&quot;, поэтому, если мы повторно поместим его в ещё один такой же контейнер, то вёрстка будет повреждена!</font></i> </p> <p>Мы воспользуемся компонентом включаемой области для страницы и подключим его в шаблоне сайта:</p> <div style="border: 1px solid; padding: 10px;"><code class="php">&lt;?$APPLICATION-&gt;IncludeComponent( <br /> &quot;bitrix:main.include&quot;, <br /> &quot;&quot;, <br /> Array( <br /> &quot;AREA_FILE_SHOW&quot; =&gt; &quot;page&quot;, <br /> &quot;AREA_FILE_SUFFIX&quot; =&gt; &quot;teasers&quot;, <br /> &quot;EDIT_TEMPLATE&quot; =&gt; &quot;&quot; <br /> ) <br /> );?&gt;</code></div> <p> Тогда фильтр и компонент списка тизеров необходимо будет положить в файл index_teasers.php в корне сайта. </p> <p>Если для какой-то страницы нам надо будет вывести тизеры, то просто разместим в разделе рядом с ней файл с именем ИМЯ_СТРАНИЦЫ_teasers.php.</p> <p> В результате получился функционал аналогичный эталону: </p> <p><img src="/upload/medialibrary/cf2/cf2160aa84ec5fbcd584f9a7be534899.png" title="Тизеры на тему 1С-Битрикс" hspace="5" vspace="5" border="0" alt="Тизеры на тему 1С-Битрикс" width="700" height="185" /></p> <p>Демо-данные (2 раздела по 4 тизера в каждом) доступны в нашем репозитории на Github вместе с результатами урока. Для импорта в наличии XML и папка с картинками.</p> <p>Вы можете импортировать демо-данные в 1С-Битрикс с любой кодировкой, в любом имеющийся тип инфоблоков (если там нет соответствующего инфоблока, то он создастся со всеми настройками, описанными в данном уроке).</p> <p><i><font color="#ff0000">Не забудьте удалить ненужные более картинки из папки /img/ в шаблоне!</font> Они занимают лишнее место и мешают работать с оставшимися.</i></p> <p> </p> <p>Обратите внимание, что завершив данный урок, фактически мы завершили интеграцию каркаса шаблона! Все последующие уроки будут посвящены интеграции дизайна компонентов рабочей области, а значит уже сейчас шаблон можно использовать в практических целях (размещая статические блоки информации внутри рабочей области или пользуясь дефолтными шаблонами).</p> <p> </p> <p>Как всегда результаты урока в репозитории на <noindex><a href="https://github.com/lexnekr/bitrixtemplate_stylish/tree/e0b55ff84797dafd6983d9a0b8dd6fe500f08377" target="_blank" rel="nofollow" >GitHub</a></noindex>.</p> <div style="text-align: right;"><a href="http://plus.google.com/+АлексейЗадойный?rel=author" target="_blank" >Задойный А.В.</a></div>

Возврат к списку

Яндекс.Метрика