V
V
Vladimir2019-09-07 13:33:33
1C-Bitrix
Vladimir, 2019-09-07 13:33:33

Programmatic update of SEO fields of infoblock sections in 1C Bitrix?

Good afternoon, there is a task to programmatically update the seo fields in the sections of the info block, I do this:

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

  // Загружаем данные из файла источника
  $sources = array();
  $file = file('export_seo_section.csv', FILE_IGNORE_NEW_LINES);

  // Создаем массив с данными
  foreach ($file as $key => $value) {
      $sources[$key] = str_getcsv($value);
  }

  // Обработаем массив для сравнения
  foreach ($sources as $key => $value) {
    $source_data[$value[0]] = $value;
  }

  // ID Инфоблока
  $IBLOCK_ID = 24;

  // Получаем список разделов в инфоблоке
  $rsElement = CIBlockSection::GetList(array(), array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE"=>"Y"), false); 

  // Проходимся циклом и формируем массив со значениями
  while ($arElement = $rsElement->GetNext()){
    // Для получения дополнительных свойств из вклавдки SEO
    $ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arElement["IBLOCK_ID"], $arElement["ID"]);
    // Массив с результатами
    $arElement["IPROPERTY_VALUES"] = $ipropValues->getValues(); 

    foreach ($source_data as $key => $value) {

      if ($arElement["IPROPERTY_VALUES"]["SECTION_PAGE_TITLE"] == $key) {

        // Формируем массив для загрузки
        $LoadData= Array(
          "ACTIVE" => "Y",
          "IBLOCK_SECTION_ID" => $arElement['ID'],
          "IBLOCK_ID" => $IBLOCK_ID,
          "IPROPERTY_TEMPLATES"=>Array(
              "SECTION_META_TITLE" => $value[1],
              "SECTION_META_DESCRIPTION" => $value[2],
           )
        );

        $res = new CIBlockSection;
        $res = $res->Update($arElement['ID'], $LoadData);

        print 'Обновили: ' .$arElement["IPROPERTY_VALUES"]["SECTION_PAGE_TITLE"].'<br/>';

      }
      
    }

  }

Reports success, but in fact does not update the fields, everything is correctly substituted into the LoadData array.
array(4) {
  ["ACTIVE"]=>
  string(1) "Y"
  ["IBLOCK_SECTION_ID"]=>
  string(3) "722"
  ["IBLOCK_ID"]=>
  int(24)
  ["IPROPERTY_TEMPLATES"]=>
  array(2) {
    ["SECTION_META_TITLE"]=>
    string(146) "Продажа вентиляторов для всех видов холодильников и других холодильных систем."
    ["SECTION_META_DESCRIPTION"]=>
    string(349) "Вентиляторы в холодильнике служат для обдува холодильных камер систем NOFROST, в нашем каталоге представлен широкий выбор вентиляторов с техническим описанием, фотографиями и хорошими ценами."
  }
}

Who faced, prompt in what there can be a problem.
Thank you.
UP: LAST_ERROR returns: Cannot move partition inward.
UP: I solved the problem here:
$LoadData["IPROPERTY_TEMPLATES"] = Array(
            "SECTION_META_TITLE" => $value[1],
            "SECTION_META_DESCRIPTION" => $value[2],
        );

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question