Оглавление
IPROPERTY_TEMPLATES
. Получить его можно через объект BitrixIblockInheritedPropertyElementValues()
а чтобы заполнить, нужно передать в массиве полей элемента, вложенный массив по ключу IPROPERTY_TEMPLATES
. Предварительно подключим модуль и объявим глобальную переменную $USER:
<?
//Обращаемся к глобальной переменной
global $USER;
//Подключаем модуль для работы с инфоблоками
CModule::IncludeModule('iblock');
?>
Теперь можно работать.Получить значения SEO полей элемента инфоблока
Чтобы получить нужные нам значения, методом\CIBlockElement::GetList()
получим элемент по фильтру, а дальше создадим объект BitrixIblockInheritedPropertyElementValues()
и методом getValues()
дотянемся до SEO полей элмента.
<?
$IBLOCK_ID = 123; //Идентификатор вашего инфоблока
$rsElement = \CIBlockElement::GetList(['ID'=>'ASC'], ['IBLOCK_ID'=>$IBLOCK_ID, 'ACTIVE'=>'Y'], false, ['ID']);
if($arElement = $rsElement->GetNext()) {
//Получим свойвства
$ipropValues = new BitrixIblockInheritedPropertyElementValues($arElement['IBLOCK_ID'], $arElement['ID']);
$arElement['IPROPERTY_VALUES'] = $ipropValues->getValues();
}
//Выведем SEO свойства элемента на экран
echo '<pre>';
print_r($arElement['IPROPERTY_VALUES']);
echo '</pre>';
?>
Задать, обновить SEO свойства элемента инфоблока
Если же вам нужно обновить или задать SEO для элементов инфоблока, например при обмене данными с сайтом, создаются/обновляются товары и там есть заданные или рассчитанные в процессе SEO поля, то можно воспользоваться примером ниже. Рассмотрен вариант обновления, но структура массива$arLoadProductArray
аналогичная и при добавлении нового элемента.
<?
//Создаём объект 'Элемент инфоблока'
$el = new CIBlockElement;
/* тут некий парсер или обработчик JSON с информацией про элементы или обработчик xml*/
$itemFromJson = [
'NAME' => 'Название элемента',
'TITLE' => 'Заголовок страницы элемента',
'DESCRIPTION' => 'Описание страницы',
'KEYWORDS' => 'Ключевые слова'
];
$arLoadProductArray = [
'MODIFIED_BY' => $USER->GetID(), // элемент изменен текущим пользователем
'IBLOCK_SECTION' => false, // элемент лежит в корне раздела
'NAME' => $itemFromJson['NAME'],
'CODE' => CUtil::translit($itemFromJson['NAME'], ['replace_space'=>'-', 'replace_other'=>'-']), //Символьный код элемента
'ACTIVE' => 'Y', // активен
'IPROPERTY_TEMPLATES'=> [
'ELEMENT_META_TITLE' => $itemFromJson['TITLE'],
'ELEMENT_META_DESCRIPTION' => $itemFromJson['DESCRIPTION'],
'ELEMENT_META_KEYWORDS' => $itemFromJson['KEYWORDS']
]
];
//ID существующего элемента инфоблока, он может быть получен в процессе обработки JSON
//или откуда там ваш скрипт тащит данные на сайт
$iblockElementId = 15;
//Пробуем обновить данные
$res = $el->Update($iblockElementId, $arLoadProductArray);
?>
Надеюсь эти примеры помогу вам в работе. Свои вопросы и замечания оставляйте в комментариях. Желаю удачи!
Если есть необходимость сблосить сео информацию элемента например после кастомной выгрузки и изменения названия, то нужно в CIBlockElement Update добавить пустые поля IPROPERTY_TEMPLATES $element = new \CIBlockElement(); $element->Update( 999, [ "NAME" => "Новое название товара", "IPROPERTY_TEMPLATES" => [ "SECTION_META_TITLE" => "", "SECTION_META_KEYWORDS" => "", "SECTION_META_DESCRIPTION" => "" ] ] );
Спасибо за совет! )