Новое в инфоблоках: вычисляемые свойства и ORM. Смирнов Максим Ведущий программист «1С-Битрикс»
SEO Хранение Наследование Кеширование Шаблонизатор Подстановки Функции
Хранение: обзор Наследование Инфоблок Раздел Элемент Хранение Кеширование в БД Сброс кеша явный
Хранение: код use Bitrix\Iblock\InheritedProperty; //ООП ElementTemplates или SectionTemplates или IblockTemplates )) $ipropTemplates = new InheritedProperty\ElementTemplates($IBLOCK_ID, $ELEMENT_ID); //Установить шаблон для элемента $ipropTemplates->set(array( "MY_PROP_CODE" => "{=this.Name}", SOME_CODE" => "", //Удалить шаблон )); //Получить шаблоны для "редактирования" $templates = $ipropTemplates->findTemplates(); //Удалить все собственные шаблоны элемента $ipropTemplates->delete(); //ООП ElementValues или SectionValues или IblockValues )) $ipropValues = new InheritedProperty\ElementValues($IBLOCK_ID, $ELEMENT_ID); //Получить значения $values = $ipropValues->getValues(); echo $values [" MY_PROP_CODE "]; //Сбросить кеш $ipropValues->clearValues();
Шаблоны: обзор Просто текст Модификатор нижнего регистра/l Модификатор транслитерации/t- Подстановка: {=this.Name} Область: this, parent, sections, iblock, property или catalog. Поле: name, code, previewtext, detailtext, property_CODE… Функции: {=concat " \ " "!" iblock.name sections.name this.name} Встроенные: upper, lower, translit, concat, limit, contrast, min, max и distinct. Событие: OnTemplateGetFunctionClass Вложенность: {=lower {=contrast 20 ".,?!" {=limit 50 ".,?!" this.previewtext} {=limit 50 ".,?!" parent.previewtext parent.detailtext}}}
);} Шаблоны: код use Bitrix\Iblock\Template; //Подключение модуля инфоблоков. if (\Bitrix\Main\Loader::includeModule('iblock')) { //Задаём шаблон. $template = "Name: {=this.Name}. Code:{=this.code}"; //Исходные данные будем брать из элемента. $entity = new Template\Entity\Element($ELEMENT_ID); //Не забываем про безопасность. echo \Bitrix\Main\Text\String::htmlEncode( //Вычисляем значение по шаблону. Template\Engine::process($entity, $template) ); }
ORM Используется шаблонизатором. Пока только для выборки и нет поддержки Инфоблоков+. Большие доработки в Методы add/update/delete скоро будут.
ORM: примеры $elementList = \Bitrix\Iblock\ElementTable::getList(array( "select" => array("ID", "CODE"), "filter" => array("=IBLOCK_ID" => $IblockId), limit" => array(5), )); $element = $elementList->fetch(); if ($element) echo $element["NAME"]; $elementList = \Bitrix\Iblock\ElementTable::query() ->setSelect(array("ID", "CODE")) ->setFilter(array("=IBLOCK_ID" => $IblockId )) ->limit(5) ->exec() ;
Выводы Имеем мощный и простой в использовании функционал. Заложены возможности для расширения. Есть куда стремиться и развиваться. ORM в инфоблоках будет совместима по данным с существующими классами, а значит её можно будет использовать одновременно и внедрять постепенно.
Спасибо за внимание! Вопросы? Skype: mv.smirnov