Если встроенного функционала Битрикс не хватает, то всегда можно написать свой компонент, это позволит решить, пожалуй, любую вставшую перед вами задачу.
Разработка компонента для CMS Bitrix
Компоненты могут очень сильно отличаться друг от друга, в зависимости от их задачи. В данной статье будет описан минимальный набор, который позволит интегрировать код в Битрикс и вызывать его стандартным
<?$APPLICATION->IncludeComponent(
Для начала нужно создать папку с названием компании (например, /bitrix/components/socompany) в ней будут лежать все написанные вами компоненты, поэтому стоит выбрать уникальное название, это поможет при переносе наработок на другой сайт.
В этой папке нужно создать еще одну, с названием компонента, например, /bitrix/components/socompany/item.links.
В корне этой папки должен лежать файл component.php - это точка входа в компонент, т.к. при вызове
<?$APPLICATION->IncludeComponent("socompany:item.links",
начнется выполнение кода из этого файла.
Пример кода:
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die(); $id = $arParams['arResult']['ID']; $IBLOCK_ID = $arParams['arResult']['IBLOCK_ID']; $items = GetIBlockElementList($IBLOCK_ID, false, Array("SORT"=>"ASC")); $arResult['items'] = array(); $i = 0; while ($row = $items->GetNext()) { $sTitle = $row['NAME']; $arResult['items'][$i] = array( 'url' => $row['DETAIL_PAGE_URL'], 'name' => $sTitle, 'id' => $row['ID'], 'price' => (int) CPrice::GetBasePrice($row['ID'])['PRICE'], ); $i++; } $this->IncludeComponentTemplate();
Теперь нужно создать вид по умолчанию, создаем директории и файл: /bitrix/components/socompany/item.links/templates/.default/template.php
Пример вывода одного элемента из сформированного в component.php массива:
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die(); ?> <div> <a href="<?=$arResult['items'][0]['url']?>"> <?=$arResult['items'][0]['name']?> </a> </div> <?
При вызове компонента, ему можно передавать любые данные, например:
<? $APPLICATION->IncludeComponent( 'socompany:item.links', '', array( 'test1' => 'Test1', 'test_2' => 2 ), false ); ?>
Тогда в component.php они будут доступны через $arParams :
echo '<pre>'; print_r($arParams); echo '</pre>';
[test1] => 'test1' [test_2] => 2