Изменения внесены следующие:
1. Переименован главный файл компонентов. Раньше он назывался index.php, теперь он должен называться component.php. Переименован главный файл шаблона (для шаблонов, которые лежат в папке). Раньше он назывался index.php, теперь он должен называться template.php.
Это сделано исключительно для удобства редактирования файлов в разных редакторах.
[spoiler]
2. В стандартных файлах компонента (component.php, .description.php, .parameters.php) языковые файлы подключаются теперь автоматически. Нет необходимости делать это явной командой.
В нестандартных файлах языковой файл можно подключить командой
$this->IncludeComponentLang($relativePath, $lang = False);
где
$relativePath - путь к файлу относительно папки компонента,
$lang - язык (если False - язык текущего сайта).
3. Следующие методы, которые ранее являлись методами объекта $APPLICATION, теперь являются статическими методами класса CComponentEngine.
CComponentEngine::MakeComponentPath
CComponentEngine::MakePathFromTemplate
CComponentEngine::ParseComponentPath
CComponentEngine::InitComponentVariables
CComponentEngine::MakeComponentUrlTemplates
CComponentEngine::MakeComponentVariableAliases
В классе CComponentEngine находятся вспомогательные методы, которые не связаны с функционированием компонента как такового, а призваны облегчить решение наиболее типичных задач компонента.
4. Метод подключения шаблона компонента теперь имеет следующий синтаксис
$this->IncludeComponentTemplate($templatePage = "");
где
$templatePage - для комплексного компонента имя текущей страницы, для обычного компонента пустая строка
Массив входных параметров компонента $arParams является псевдонимом соответствующего члена класса CBitrixComponent (который доступен в компоненте через $this). Поэтому любые изменения в $arParams будут доступны и в других местах (например, в шаблонах) без явной передачи этой переменной через параметры метода. Входные параметры компонента доступны только через массив $arParams.
Массив результатов работы компонента должен называться $arResult. Он является псевдонимом соответствующего члена класса CBitrixComponent (который доступен в компоненте через $this). Поэтому любые изменения в $arResult будут доступны и в других местах (например, в шаблонах) без явной передачи этой переменной через параметры метода. Перед входом в компонент переменная $arResult инициализируется пустым массивом array().
5. В компоненте доступны следующие методы
string $this->GetName() - возвращает имя компонента
string $this->GetRelativePath() - возвращает путь компонента относительно /bitrix/components
string $this->GetPath() - возвращает путь компонента относительно корня сайта
string $this->GetTemplateName() - возвращает имя шаблона
object & $this->GetTemplate() - возвращает объект шаблона
object & $this->GetParent() - возвращает объект родительского (комплексного) компонента
6. В режиме редактирования сайта (вторая закладка в шапке сайта) появилась возможность добавлять для данного компонента собственные иконки. Для этого можно либо в файл .description.php в массив $arComponentDescription добавить элемент с ключем "AREA_BUTTONS" вида
"AREA_BUTTONS" => array( array( 'URL' => "javascript:alert('Это кнопка!!!');", 'ICON' => 'some_button', 'TITLE' => "Это кнопка!" ), ), |
либо в коде компонента вызвать методы
$this->AddIncludeAreaIcon($arIcon) - добавляет иконку, определенную массивом $arIcon, имеющим вид
$arIcon = array( 'URL' => "javascript:alert('Это кнопка!!!');", 'ICON' => 'some_button', 'TITLE' => "Это кнопка!" ) |
$this->AddIncludeAreaIcons($arIcons) - добавляет массив иконок, каждый элемент которого задан в указанном выше виде.
7. Для упрощения кода кеширования данных в компоненте можно пользоваться следующими методами
bool $this->StartResultCache($cacheTime = False, $additionalCacheID = False, $cachePath = False)
где
$cacheTime - время кеширования (если False - подставляется IntVal($arParams["CACHE_TIME"])),
$additionalCacheID - от чего дополнительно зависит кеш кроме текущего сайта SITE_ID, имени компонента, путя в файлу и входных параметров $arParams (если False - кеш зависит только от указанных параметров),
$cachePath - путь к файлу кеша (если False - подставляется "/".SITE_ID.<путь к компоненту относительно bitrix/components>).
Если есть валидный кеш, то метод отправляет на экран его содержимое, заполняет $arResult и возвращает False; если нет валидного кеша, то он возвращает True.
$this->AbortResultCache()
Прерывает кеширование. То есть если например товара такого нет в базе, то можно вызвать этот метод и кеширования не будет. Метод введен для реализации оптимистической стратегии при кешировании.
$this->ClearResultCache($additionalCacheID = False, $cachePath = False)
где параметры соответствую параметрам метода StartResultCache.
Удаляет файл кеша.
Пример использования:
if ($arParams["ID"] <= 0) $arParams["ID"] = 10; if ($this->StartResultCache()) { $arResult = array( "ID" => rand(1, 100) ); for ($i = 0; $i < 5; $i++) $arResult["FIELDS"][] = rand(1, 100); if ($arParams["ID"] < 10) $this->AbortResultCache(); $this->IncludeComponentTemplate(); } $APPLICATION->SetTitle($arResult["ID"]); |
Если компоненту требуется более сложный алгоритм кеширования, то можно по прежнему использовать классы CPHPCache и CPageCache.
8. Массив входных параметров компонента $arParams содержит элементы двух видов:
в элементах с ключами типа "ключ" содержатся входные параметры, обработанные методом htmlspecialcharsEx;
в элементах с ключами типа "~ключ" содержатся оригинальные входные параметры.