Пространство имен:Имя компонента

advertisement
Компоненты 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")
Форма настройки в
административной части сайта
Дальнейшие планы




Инсталляция
Документация по системным компонентам
Система обновлений компонентов
Рынок сторонних компонентов
Download