Простой пример создания компонента
В качестве примера сделаем компонент, который выводит текущую дату и время. Причем формат вывода даты и времени задается выбором в свойствах. В реальных условиях такой компонент будет неинтересен. Но нам важно понять, как выполняется разработка компонента. В более сложных случаях все реализуется похожим образом.
Предварительные действия
Готовим php-код компонента
Первым делом сразу напишем php-код, который выполняет, то, что нам нужно.
Правда код просто выводит дату и нельзя выбрать другой формат. Лучше поместить в переменную формат вывода даты:
И последний штрих — нужно разделить логику и представление:
Создаем структуру папок и файлов компонента
Теперь нужно создать свое пространство имен, например: dv. Для этого надо создать папку /local/components/dv . В ней делаем папку компонента — date.current. И в ней, в свою очередь, создаем два обязательных файла и папку для хранения шаблонов templates. В этой папке должна быть создана папка .default и в ней файл template.php.
Получаем такую структуру в папке /local/components/dv/date.current :
- component.php
- .description.php
- templates/.default/template.php
Реализуем компонент без входных параметров
Пока сделаем компонент без возможности задания входного параметра — формата даты.
IncludeComponentTemplate(); ?>
GetMessage("Текущая дата"), "DESCRIPTION" => GetMessage("Выводим текущую дату"), ); ?>
Как вы могли заметить в каждом из файлов компонента в начале пишется строка if (!defined(“B_PROLOG_INCLUDED”) || B_PROLOG_INCLUDED!==true) die(); . Она нужна для того, чтобы данные файлы нельзя было вызвать напрямую из окна браузера.
В простейшем виде компонент готов — его можно вызвать в коде страниц при помощи конструкции:
IncludeComponent( "dv:date.current", ".default", Array( ), false );?>
Реализуем компонент с входными параметрами
Теперь давайте сделаем, чтобы компонент можно было добавлять на страницу из визуального редактора, и чтобы можно было задавать шаблон выдачи даты в настройках компонента.
Чтобы наш компонент появился в визуальном редакторе нужно дополнить файл описания компонента.
.description.php:
GetMessage("Текущая дата"), "DESCRIPTION" => GetMessage("Выводим текущую дату"), "PATH" => array( "ID" => "dv_components", "CHILD" => array( "ID" => "curdate", "NAME" => "Текущая дата" ) ), "ICON" => "/images/icon.gif", ); ?>
Для размещения компонента в дереве компонентов мы добавили элемент массива описания PATH. Таким образом, наш компонент будет показан в отдельной папке. Опционально, можно задать иконку компонента — она будет показываться в дереве и в визуальном редакторе.
Разберемся с настройками компонента. Будем считать, что опцию шаблон даты мы будем задавать строкой. Создаем файл .parameters.php с таким содержанием:
array(), "PARAMETERS" => array( "TEMPLATE_FOR_DATE" => array( "PARENT" => "BASE", "NAME" => "Шаблон для даты", "TYPE" => "STRING", "MULTIPLE" => "N", "DEFAULT" => "Y-m-d", ), ), ); ?>
И изменяем файл с логикой компонента, чтобы он мог использовать параметр, который мы задаем component.php:
IncludeComponentTemplate(); ?>
Что же мы сделали?
Мы создали компонент, в самом простом виде. Мы не учитывали мультиязычность, не учитывали возможность создания помощи к компоненту и прелести кеширования компонентов.
Большая часть заказных компонентов для Bitrix Framework создается путем изменения компонентов, идущих в поставке продуктов. Поэтому очень нужно хорошо изучить стандартные компоненты, перед тем как программировать новые. Скорее всего, задачу, которую вы хотите решить — уже решили разработчики компании 1С-Битрикс.
Создание компонента
Папка «mycomponent» является пространством имён для Bitrix. Внутри данной папки создаются сами компоненты, которые можно будет вызвать примерно такими именами:
'mycomponent:blog', // local/components/mycomponent/blog/ 'mycomponent:calendar', // local/components/mycomponent/calendar/ 'mycomponent:date' // local/components/mycomponent/date/
Внутри каждой папки компонента должны быть три обязательных файла.
- mycomponent/blog/component.php или class.php (код компонента)
- mycomponent/blog/.description.php (описание компонента)
- mycomponent/blog/templates/.default/template.php (шаблон компонента)
Есть два способа создания компонента, через файл «component.php» или «class.php». Второй способ создаёт компонент через ООП.
Шаг 1: Подключение шаблона
В файле «component.php» или «class.php» надо добавить следующий код, который позволит загружать контент из файла «template.php».
# 1-ый способ (component.php) $this->IncludeComponentTemplate(); # 2-ой способ (class.php) class Custom extends CBitrixComponent < public function executeComponent() < $this->IncludeComponentTemplate(); > >
Также в методе IncludeComponentTemplate() можно указать другой шаблон.
# component.php $this->IncludeComponentTemplate('list'); // загрузится шаблон list.php
Чтобы передать переменные в шаблон компонента, надо в файле «component.php» или «class.php» создать массив $arResult .
// Создание переменной в компоненте $arResult['VAR'] = 'Переменная'; // component.php $this->arResult['VAR'] = 'Переменная'; // class.php # Использование в шаблоне (templates/.default/template.php) echo $arResult['VAR']; // Переменная
Шаг 2: Файл настроек
Файлы «template.php» и «.description.php» заполнять не обязательно, но можно указать настройки в файле «.description.php»:
# .description.php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die();> $arComponentDescription = array( 'NAME' => 'Имя компонента', 'DESCRIPTION' => 'Описание компонента', );
Пример настройки компонента:
Шаг 3: Вывод компонента
Компонент создан. Его можно вызвать на странице редактирования шаблона через следующий код:
$APPLICATION->IncludeComponent( 'mycomponent:blog' );
На месте данного кода появится контент из файла «template.php»
Обновлено: 01 ноября 2020
Комментарии
Авторизуйтесь, чтобы добавлять комментарии
Статьи 1С Битрикс | Пример создания компонента
В этой статье предпринята попытка пошагово описать процесс создания простого компонента для 1С Битрикс с минимальным использованием функционала старого ядра и максимально близко к принципам написания кода на D7.
Репозиторий примера можно посмотреть тут
Размещение компонента в файловой структуре сайта
Компоненты в битрикс размещаются по пути от корня вашего сайта /bitrix/components В этой папке всегда есть каталог bitrix нем расположены компоненты, которые достались вам при установки Битрикса и количество этих компонентов варьируется в зависимости от используемой вами редакцией продукта.
В папке /bitrix/components можно создавать свои папки, в терминах битрикса это называется “пространством имен”, так например при установке модулей из Маркетплейс модули партнеров скопируют свои компоненты именно в эту папку, предварительно создав в ней свое “пространство имен”.
Не путайте термин “пространства имен” в рамках Битрикса и пространства имен PHP этот термин остался в Битриксе исторически и нам придется с этим мириться.
Так же компоненты можно разместить в каталоге /local/components в этой папке нужно так же создать свое “пространство имен” в виде отдельного каталога в котором и разместить свой компонент.
Для размежения локальных компонентов, которые пишутся под конкретный проект, а так же для кастомизации стандартных компонентов Битрикса нужно использовать именно папку /local/components
Для нашего примера будем использовать папку ‘example’ в качестве “пространства имен”, а назовем компонент compsimple таким образом итоговый путь к файлам разрабатываемого компонента будет таким: /local/components/example/compsimple .
Структура файлов и папок компонента
Основной файл компонента к которому происходит обращение при подключении компонента на странице и в котором находится точка входа в логику работы компонента class.php .
Следующий по важности файл .description.php он содержит описание компонента и путь для его отображения в интерфейсе системы.
Принято выносить языкозависимые тексты в языковые файлы поэтому нам нужна папка lang в которой будут находиться папки с кодами языков, в нашем случае только ru в ней должен быть еще один файл .description.php , а он уже содержит массив с переводами текстов.
Почти каждый компонент в итоге своей работы выводит информацию на сайт, для этого нужно создать файлы шаблонов компонента. Папка templates создается для хранения шаблонов отображения, шаблон по умолчанию должен располагаться в папке .default в файле template.php .
Выше был описан минимальный набор файлов, обеспечивающий работу компонента. Если компоненту для своей работы требуются дополнительные файлы или логика компонента требует создания нескольких классов, то никто не запрещает добавлять все нужные данные в папку компонента и подключать их в нужных местах кода.
Большей части компонентов для обеспечения корректной работы требуется передать какие-либо начальные значения, обеспечить отображение полей для ввода параметров позволит файл .parameters.php
Итоговая структура файлов и папок используемых в примере выглядит так:
/local/components/example/compsimple #component root directory ├── /lang | └── /ru | └── .description.php ├── /templates | └── /.default | └── template.php ├── .description.php ├── .parameters.php └── class.php
class.php
В файле class.php должен располагаться класс компонента унаследованный от CBitrixComponent .
Принцыпы именования класса компонента нигде не регламинтированы, но рекомендуется давать имя классу максимально похожее на путь к компоненту. Наш класс будет называться ExampleCompSimple .
Пример содержимого нашего файла:
use \Bitrix\Main\Loader; use \Bitrix\Main\Application; if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die(); class ExampleCompSimple extends CBitrixComponent private $_request; /** * Проверка наличия модулей требуемых для работы компонента * @return bool * @throws Exception */ private function _checkModules() if ( !Loader::includeModule('iblock') || !Loader::includeModule('sale') ) throw new \Exception('Не загружены модули необходимые для работы модуля'); > return true; > /** * Обертка над глобальной переменной * @return CAllMain|CMain */ private function _app() global $APPLICATION; return $APPLICATION; > /** * Обертка над глобальной переменной * @return CAllUser|CUser */ private function _user() global $USER; return $USER; > /** * Подготовка параметров компонента * @param $arParams * @return mixed */ public function onPrepareComponentParams($arParams) // тут пишем логику обработки параметров, дополнение параметрами по умолчанию // и прочие нужные вещи return $arParams; > /** * Точка входа в компонент * Должна содержать только последовательность вызовов вспомогательых ф-ий и минимум логики * всю логику стараемся разносить по классам и методам */ public function executeComponent() $this->_checkModules(); $this->_request = Application::getInstance()->getContext()->getRequest(); // что-то делаем и результаты работы помещаем в arResult, для передачи в шаблон $this->arResult['SOME_VAR'] = 'some result data for template'; $this->includeComponentTemplate(); > >
.description.php
В принципах описания компонента ничего не меняется почи с времен появления БУС. Тут относительно подробное описание структуры файла.
Рассмотрим пару примеров размещения компонента в визуальном редакторе:
- Разместить компонент в ветке на ровне с остальными основными ветками
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); use Bitrix\Main\Localization\Loc; $arComponentDescription = [ "NAME" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT"), "DESCRIPTION" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_DESCRIPTION"), "COMPLEX" => "N", "PATH" => [ "ID" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_PATH_ID"), "NAME" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_PATH_NAME"), ], ]; ?>
Результат:

- Разместить компонент в дочернюю ветку
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); use Bitrix\Main\Localization\Loc; $arComponentDescription = [ "NAME" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT"), "DESCRIPTION" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_DESCRIPTION"), "COMPLEX" => "N", "PATH" => [ "ID" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_PATH_ID"), "NAME" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_PATH_NAME"), "CHILD" => [ "ID" => Loc::getMessage("EXAMPLE_COMPSIMPLE_COMPONENT_CHILD_PATH_ID"), "NAME" => GetMessage("EXAMPLE_COMPSIMPLE") ] ], ]; ?>
Результат:

Пример файла языковых констант lang/ru/.description.php :
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); $MESS["EXAMPLE_COMPSIMPLE_COMPONENT_PATH_ID"] = "local"; $MESS["EXAMPLE_COMPSIMPLE_COMPONENT_CHILD_PATH_ID"] = "compsimplechiltpath"; $MESS["EXAMPLE_COMPSIMPLE_COMPONENT_PATH_NAME"] = "Компоненты проекта"; $MESS["EXAMPLE_COMPSIMPLE"] = "Дочерняя ветка"; $MESS["EXAMPLE_COMPSIMPLE_COMPONENT"] = "Тестовый компонент"; $MESS["EXAMPLE_COMPSIMPLE_COMPONENT_DESCRIPTION"] = "Описание тестового компонента";
.parameters.php
Для отображения полей для передачи параметров в форме настроек компонента предназначен файл .parameters.php. Он содержит в себе массив с определением типа и значений входных параметров компонента.
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); /** * @var string $componentPath * @var string $componentName * @var array $arCurrentValues * */ use Bitrix\Main\Loader; use Bitrix\Main\Localization\Loc; if( !Loader::includeModule("iblock") ) throw new \Exception('Не загружены модули необходимые для работы компонента'); > // типы инфоблоков $arIBlockType = CIBlockParameters::GetIBlockTypes(); // инфоблоки выбранного типа $arIBlock = []; $iblockFilter = !empty($arCurrentValues['IBLOCK_TYPE']) ? ['TYPE' => $arCurrentValues['IBLOCK_TYPE'], 'ACTIVE' => 'Y'] : ['ACTIVE' => 'Y']; $rsIBlock = CIBlock::GetList(['SORT' => 'ASC'], $iblockFilter); while ($arr = $rsIBlock->Fetch()) $arIBlock[$arr['ID']] = '['.$arr['ID'].'] '.$arr['NAME']; > unset($arr, $rsIBlock, $iblockFilter); $arComponentParameters = [ // группы в левой части окна "GROUPS" => [ "SETTINGS" => [ "NAME" => Loc::getMessage('EXAMPLE_COMPSIMPLE_PROP_SETTINGS'), "SORT" => 550, ], ], // поля для ввода параметров в правой части "PARAMETERS" => [ // Произвольный параметр типа СПИСОК "IBLOCK_TYPE" => [ "PARENT" => "SETTINGS", "NAME" => Loc::getMessage('EXAMPLE_COMPSIMPLE_PROP_IBLOCK_TYPE'), "TYPE" => "LIST", "ADDITIONAL_VALUES" => "Y", "VALUES" => $arIBlockType, "REFRESH" => "Y" ], "IBLOCK_ID" => [ "PARENT" => "SETTINGS", "NAME" => Loc::getMessage('EXAMPLE_COMPSIMPLE_PROP_IBLOCK_ID'), "TYPE" => "LIST", "ADDITIONAL_VALUES" => "Y", "VALUES" => $arIBlock, "REFRESH" => "Y" ], // Произвольный параметр типа СТРОКА "SECTION_IDS" => [ "PARENT" => "SETTINGS", "NAME" => Loc::getMessage('EXAMPLE_COMPSIMPLE_PROP_SECTION_IDS'), "TYPE" => "STRING", "MULTIPLE" => "N", "DEFAULT" => "", "COLS" => 25 ], // Настройки кэширования 'CACHE_TIME' => ['DEFAULT' => 3600], ] ];
Языковой файл lang/ru/.parameters.php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); $MESS["EXAMPLE_COMPSIMPLE_PROP_SETTINGS"] = "Выбор инфоблока и разделов"; $MESS["EXAMPLE_COMPSIMPLE_PROP_IBLOCK_TYPE"] = "Тип инфоблока"; $MESS["EXAMPLE_COMPSIMPLE_PROP_IBLOCK_ID"] = "Инфоблок"; $MESS["EXAMPLE_COMPSIMPLE_PROP_SECTION_IDS"] = "ID разделов через запятую";
Шаблон компонента
Компонент может содержать множество шаблонов. Шаблон по умолчанию находится в папке .default и именно он отрабатывает, если приподключении компонента оставить имя шаблона пустым.
В нашем примере просто выведем дамп массива входных параметров и массива результатов работы компонента.
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> \Bitrix\Main\Diag\Debug::dump($arParams); \Bitrix\Main\Diag\Debug::dump($arResult); ?>
Урок 9. Создание собственного компонента слайдера для интернет-магазина на Битрикс на CMS-Foundation
Приветствую моих читателей! Мы продолжаем строить наш собственный интернет-магазин на Битрикс редакции Старт. В прошлых уроках мы уже реализовали адаптивный каталог товаров и сделали карточку товара. Теперь пришло время немного подкрасить наш магазин и внести такую модную штуку, как слайдер. Если бы мы не пользовались никаким CSS-фреймворками, то нам потребовалось бы изучать Java Script и JQuery. Или по крайней мере искать в интернете готовые скрипты и как-то их прикручивать к сайту. Но как вы помните наш интернет магазин строится полностью на CSS-фреймворке Foundation, а в нём уже есть готовый класс для слайдера Orbit.
Но внедрять PHP код и API Битрикс непосредственно в шаблон не очень правильное решение, не bitrix-way, так сказать. Поэтому для вывода слайдера мы создадим собственный компонент. Ну и конечно при этом научимся создавать свои собственные компоненты Битрикс.
План создания компонента Битрикс
Логику работы мы заложим следующую. Слайдер будет строится на том же инфоблоке Товары, что и каталог. Но попадать в слайдер будут только те товары, у которых задано свойство Слайдер (SLIDER). Входными параметрами для нашего компонента будет Тип инфоблока, Инфоблок и свойство указывающее, что необходимо выводить слайдер.
Если у вас нет свойства Слайдер в инфоблоке добавьте его.
Тип у свойство должен быть список.
Программно конечно со списками сложнее работать, чем со строкой или числом, зато удобнее указывать при редактировании карточки товара.

Инфоблок настроили, теперь можно приступить к созданию собственного компонента Битрикс. Что может быть интереснее написания собственных компонент.
Создание компонента Битрикс
В Битрикс существует понятие пространство имен. Все стандартные компоненты Битрикс находятся в пространстве имен Bitrix в папочке /bitrix/components/bitrix/ . Свои компоненты нужно располагать в своем пространстве имен, т.е. в папочке /bitrix/components/my/ или ещё лучше в папке /local/components/my/ . my — это наше пространство имен.
В своем примере я буду располагать компоненты в пространстве имен startshop по пути /local/components/startshop/ . Компонент так и назову slider.
Минимальная структура файлов компонента должна быть следующая:
component.php — основной фал компонента, реализация логики работы компонента на API Bitrix.
.description.php — файл описания компонента.
templates/.default/template.php — файл шаблона по умолчанию для компонента.
.description.php
if (!defined(«B_PROLOG_INCLUDED») || B_PROLOG_INCLUDED!==true) die();
?
$arComponentDescription = array(
«NAME» => «Слайдер»,
«DESCRIPTION» => «Слайдер на фреймворке CSS Foundation»,
«ICON» => «/images/icon.gif»,
«SORT» => 100,
«CACHE_PATH» => «Y»,
«PATH» => array(
«ID» => «startshop»,
«NAME» => ‘Компоненты StartShop’
),
);
?>
В этом фале задается наименование и описание компонента. А так же иконка для отображения в палитре компонентов и параметр PATH указывает на то, в какой папочке будет находится компонент в палитре компонентов.

.parameters.php
if (!defined(«B_PROLOG_INCLUDED») || B_PROLOG_INCLUDED!==true) die();
?
$arIBlocks=array();
$db_iblock = CIBlock::GetList(array(«SORT»=>»ASC»), array(«TYPE» => ($arCurrentValues[«IBLOCK_TYPE»]!=»-«?$arCurrentValues[«IBLOCK_TYPE»]:»»)));
while($arRes = $db_iblock->Fetch())
$arIBlocks[$arRes[«ID»]] = «[«.$arRes[«ID»].»] «.$arRes[«NAME»];
$arProperty_LNS = array();
$rsProp = CIBlockProperty::GetList(array(«sort»=>»asc», «name»=>»asc»), array(«ACTIVE»=>»Y», «IBLOCK_ID»=>($arCurrentValues[«IBLOCK_ID»])));
while ($arr=$rsProp->Fetch())
$arProperty[$arr[«CODE»]] = «[«.$arr[«CODE»].»] «.$arr[«NAME»];
if (in_array($arr[«PROPERTY_TYPE»], array(«L», «N», «S»)))
$arProperty_LNS[$arr[«CODE»]] = «[«.$arr[«CODE»].»] «.$arr[«NAME»];
>
>
$arComponentParameters = array(
«PARAMETERS» => array(
«IBLOCK_TYPE» => array(
«PARENT» => «BASE»,
«NAME» => «Тип инфоблока»,
«TYPE» => «LIST»,
«VALUES» => $arTypesEx,
«DEFAULT» => «news»,
«REFRESH» => «Y»,
),
«IBLOCK_ID» => array(
«PARENT» => «BASE»,
«NAME» => «Инфобок»,
«TYPE» => «LIST»,
«VALUES» => $arIBlocks,
«DEFAULT» => ‘=’,
«ADDITIONAL_VALUES» => «Y»,
«REFRESH» => «Y»,
),
«PROPERTY_CODE» => array(
«PARENT» => «DATA_SOURCE»,
«NAME» => «Укажите свойство по которому будет фильтроваться товары для слайдера»,
«TYPE» => «LIST»,
«MULTIPLE» => «N»,
«VALUES» => $arProperty_LNS,
«ADDITIONAL_VALUES» => «Y»,
),
),
);
- $arTypesEx — массив с типами доступных инфоблоков.
- $arIBlocks — массив со списком инфоблоков отфильтрованному по данному типу.
- $arProperty_LNS — массив всех свойств выбранного инфоблока.
Вот такие параметры будут доступны в настройках нашего компонента из публичной части сайта.
component.php
if(!defined(«B_PROLOG_INCLUDED») || B_PROLOG_INCLUDED!==true)die();
use Bitrix\Main\Loader;
?
$arSelect = Array(«ID», «NAME», «PREVIEW_PICTURE», «DETAIL_PAGE_URL», «PROPERTY_».$arParams[«PROPERTY_CODE»]);
$arFilter = Array(«IBLOCK_ID» => IntVal($arParams[«IBLOCK_ID»]), «ACTIVE»=>»Y», «PROPERTY_».$arParams[«PROPERTY_CODE»].»_VALUE» => ‘Да’);
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while($arFields = $res->GetNext())
$arResult[] = $arFields;
>
Код компонента получился очень короткий в отличие от стандартного кода вывода списка новостей. Тут нет ничего лишнего. Вначале мы объявили пространство имен для загрузчика Loader, далее с его помощью подгрузили модуль инфоблоков iblock. И с помощью самой распространенной конструкции API Bitrix CIBlockElement::GetList() выполнили запрос к базе данных отобрав записи инфоблока Товары, в котором свойство Слайдер установлено в занчение «Да«. Далее результатом выборки заполнили предопределенный массив $arResult и последней строкой подключили файл шаблона.
templates/.default/template.php
$file = CFile::ResizeImageGet($item[«PREVIEW_PICTURE»], array(‘width’ => 1100,’height’ => 500), BX_RESIZE_IMAGE_EXACT, true);
?>
Шаблон даже получился более громоздкий, чем компонент. Но если посмотрите тут все просто. Код верстки слайдера взять целиком из CSS-фреймворка Foundation. Далее я уже приводил принцип работы с массивом $arResult в уроке когда мы выводили каталог товаров. Делаем выполняем цикл по массиву и выводим нужные нам значения. Тут пришлось правда два цикла сделать — не очень оптимально, но это не обращение к базе данных и цикл по массиву из 3-5 записей не нагрузит ваш сайт. По этому усложнять код и избегать второго цикла я счел не нужным.
Строкой $file = CFile::ResizeImageGet($item[«PREVIEW_PICTURE»], array(‘width’ => 1100,’height’ => 500), BX_RESIZE_IMAGE_EXACT, true); я снова подгоняю картинки под требуемый размер. Подробнее все в том же уроке про вывод каталога.
Вот что в итоге получилось.

Тут конечно надо заметить, что не очень красиво получилось. По хорошему нужно подобрать пропорциональные картинки и разместить их в отдельном инфоблоке. Вы попробуйте так и сделать, код компонента при этом обсалютно не изменится, даже упростится, не потребуется условие отбора по свойству Слайдер. Вобщем пример при этом не страдает, по этому переделывать я не стану, а лучше напишу побыстрее следующий урок.
И как всегда выкладываю исходный код урока:
компонент slider
шаблон этого урока
От автора:
А на этом пока все. Собственно, что касается вывода информации почти все готово, остаются мелочи. Т.е. витрина у нас уже готова и работает. Дальше нужно делать функционал магазина, а это значит карнизу и заказы. Подписывайтесь и ждите новых статей, дальше будет интереснее.
