Компоненты 2.0: новые возможности и принципы реализации Понятие компонентов Блоки, с помощью которых строится публичная часть сайта Позволяют повторно использовать единожды написанный код Визуально размещаются на странице сайта Системные компоненты, поставляемые вместе с продуктом Компоненты 1.0: недостатки Логика смешана с представлением Неудобство верстки. Высокие требования к верстальщикам Для изменения верстки необходимо копировать логику Нет возможности показывать один компонент в разных представлениях Связанные компоненты сложно настраивать Необходимо знать весь набор страниц и какие компоненты должны быть на них размещены Невозможность визуально настраивать сложные разделы Разбросанность по файловой структуре Ресурсы (картинки, файлы описаний) компонента в разных местах Неудобство в повторном использовании кода Компоненты 2.0: цель и направление Облегчить создание сайта Снизить требования к разработчику сайта Облегчить адаптацию системных компонентов под нужды конкретного сайта Упростить повторное использование кода Сохранить и увеличить производительность компонентов Новые возможности Разделение логики компонента и его представления. Компонент может иметь произвольное число шаблонов Произвольные шаблонизаторы Компонент полностью лежит в отдельной папке Комплексные компоненты Поддержка ЧПУ Удобный встроенный механизм кеширования Легкость повторного использования и распространения Физическое расположение компонентов Все компоненты расположены в одной папке /bitrix/components/ Компоненты не привязаны к модулям Имя компонента имеет вид «слово1.слово2» Компонент может принадлежать пространству имен. Полное имя компонента «Пространство имен:Имя компонента» Все ресурсы компонента находятся в папке компонента. Компонент неделим. Системные компоненты принадлежать пространству bitrix. Они обновляются системой обновлений Структура компонента Исполняемый файл component.php Файл с описанием компонента и указанием его местоположения в виртуальном дереве компонентов Файл с описанием параметров компонента Справка «Языковые» файлы Папка с системными шаблонами компонента Папка с инсталляторами и деинсталляторами (зарезервирована) Вспомогательные ресурсы компонента Код компонента Доступные переменные: $arParams – массив входных параметров $arResult – массив результатов работы компонента $componentPath – путь к папке компонента относительно корня сайта $componentName – название компонента $componentTemplate – название шаблона Для каждого подключаемого компонента создается экземпляр класса CBitrixComponent. Внутри компонента методы этого класса доступны через переменную-псевдоним $this. Шаблоны компонента Логика компонента $arResult Поиск шаблона Определение шаблонизатора Преобразование параметров, стили PHP Smarty HTML … Встроенная поддержка PHP шаблонов Возможность подключить произвольные шаблонизаторы: Smarty, XSLT, FastTemplate Шаблоны неделимы. Для адаптации шаблона под нужды сайта необходимо скопировать весь шаблон Компонент может иметь произвольное число шаблонов Физическое расположение шаблонов компонента Системные шаблоны находятся в подпапке templates папки компонента, а адаптированные под конкретный сайт – в папке шаблона сайта Шаблоны располагаются каждый в своей папке. Шаблоны без дополнительных ресурсов могут быть в виде файла Шаблоны определяются своими именами. Если имя не задано, подразумевается шаблон по умолчанию .default Каждый шаблон неделим Структура шаблона компонента Файл шаблона template.ext, где ext – это расширение одного из установленных шаблонизаторов (в примере - template.php) Файл с описанием шаблона Файл с описанием параметров шаблона «Языковые» файлы Файл result_modifier.php для изменения результирующего массива перед передачей его в шаблон Файл style.css для подключения необходимых стилей Вспомогательные ресурсы шаблона Код шаблона компонента Предопределенные в PHP-шаблоне переменные $templateFile – путь к шаблону относительно корня сайта $arResult – массив результатов работы компонента $arParams – массив входящих парамеров компонента $templateFolder – папка шаблона, если он лежит в папке (с дополнительными ресурсами) $templateName – название шаблона $parentTemplateFolder – папка родительского шаблона (если есть) $componentPath – путь к компоненту относительно корня сайта $component – объект компонента Комплексные компоненты Список каталогов Группы товаров каталога Товар Каталог Товары группы товаров Фильтр Реализуют функциональность раздела сайта (набора взаимосвязанных страниц). Примеры: форум, каталог, блоги. Недостатки реализации с помощью обычных компонентов: приходится создавать множество страниц для размещения компонентов приходится настраивать свойства каждого из компонентов (в том числе пересекающиеся) связи между компонентами либо жестко зашиты в код компонентов (что не универсально), либо сложны для настройки нет возможности автоматически добавить новую страницу в смысловой блок (в публичной части) Недостатки реализации одним большим компонентом нет возможности использовать составные части по отдельности дублирование кода Структура комплексного компонента Не отличается от структуры простого компонента Исполняемый файл component.php Файл с описанием компонента и указанием его расположения в виртуальном дереве компонентов Файл с описанием параметров компонента Справка «Языковые» файлы Папка с шаблонами компонента Папка с инсталляторами и деинсталляторами (зарезервирована) Вспомогательные ресурсы Исполняемый файл содержит логику определения запрашиваемой страницы Код многостраничного компонента Код комплексного компонента содержит логику определения запрашиваемой страницы, а также, возможно, инициализацию переменных, которые затем передаются в качестве входных параметров в дочерние компоненты В отличие от обычного компонента метод подключения шаблона принимает имя страницы, которую необходимо показать. Шаблон комплексного компонента Отличия от шаблона обычного компонента: В обычном компоненте один файл шаблона template.ext, а в комплексном – по файлу имя_страницы.ext на каждую страницу В комплексном шаблоне могут содержаться шаблоны обычных компонентов, которые подключаются из комплексного компонента (т.е. шаблон комплексного компонента есть по сути тема) Код страницы шаблона комплексного компонента Для каждой страницы комплексного компонента свой файл шаблона имя_страницы.ext Файл шаблона содержит подключение одного или нескольких дочерних (обычных) компонентов Входящие параметры дочерних компонентов: входящие параметры комплексного компонента, данные из массива результатов работы комплексного компонента, прочие значения. В дочерний компонент передается объект комплексного компонента $component Шаблон дочернего компонента сначала ищется в шаблонах комплексного компонента, а потом – среди своих собственных шаблонов ЧПУ ЧПУ – ЧеловекоПонятный Урл (URL) SEF URL – Search Engine Friendly URL понятный и логичный адрес, похожий на адрес в файловой системе без параметров после ? пользователь стирает часть адреса до ближайшей косой черты и рассчитывает попасть на уровень выше того, где он находился вместо идентификаторов символические имена /forum/index.php?mode=topic&topic_id=25 /forum/topic.php?id=25 /forum/topic/25/ Система обработки адресов В .htaccess с помощью mod_rewrite или 404 подключается система UrlRewrite В файле настроек UrlRewrite автоматически регистрируются страницы с компонентами, которые настроены на работу в режиме ЧПУ Если запрошена несуществующая страница, то система UrlRewrite проверяет, зарегистрирована ли такая страница в ее файле данных. Если страница зарегистрирована, то управление передается на реально существующий файл. Иначе выдается 404 ошибка. Можно использовать не только для компонентов (например, старые и новые страницы) Поддержка ЧПУ компонентами 1 2 3 Входной параметр SEF_MODE. Возможные значения: Y – компонент работает в режиме ЧПУ, N – все данные передаются в параметрах HTTP запроса (рис. 1) Входной параметр SEF_FOLDER – путь до папки, в которой работает компонент. Путь может быть виртуальным (рис. 1) В каждом многостраничном компоненте определен набор шаблонов путей по умолчанию. Он переопределяется входным параметром SEF_URL_TEMPLATES (рис. 2) При сохранении страницы с компонентом, у которого SEF_MODE установлен в значение Y, создается запись в файле данных системы UrlRewrite (рис. 3) При поступлении запроса на страницу, которая реально не существует, система UrlRewrite ищет в своем файле данных подходящую запись (соответствующую выражению в ключе CONDITION) и передает управление на файл, указанный в ключе PATH Компонент вычленяет параметры из строки запроса, основываясь на шаблонах путей Параметры из строки запроса можно переопределять с помощью входящего параметра компонента VARIABLE_ALIASES Кеширование в компонентах Встроенная поддержка кеширования – методы CBitrixComponent StartResultCache время кеширования (False = $arParams["CACHE_TIME"]) дополнительные зависимости кэша кроме SITE_ID, имени компонента, пути к файлу и $arParams (False = нет) путь к файлу кеша (False = "/".SITE_ID.<путь к компоненту относительно bitrix/components>) AbortResultCache – оптимистическая стратегия IncludeComponentTemplate - завершение кеширования и сохранение кеша ClearResultCache – принудительная очистка кеша Ограничение – одно подключение кеша на компонент Автокеширование Y CACHE_TYPE N A Y COption N Кешировать Не кешировать Стандартный параметр компонента CACHE_TYPE: включить кеширование, выключить кеширование и автокеширование (по умолчанию) В случае установки автокеширования – глобальный выбор включения/выключения кеширования COption::GetOptionString("main", "component_cache_on", "Y") Форма настройки в административной части сайта Дальнейшие планы Инсталляция Документация по системным компонентам Система обновлений компонентов Рынок сторонних компонентов