Задать вопрос

Как искать по внешнему коду?

public static function BeforeIndexExtended($fields): array
    {
        if ($fields['MODULE_ID'] == "iblock" && in_array($fields['PARAM2'], self::$Iblock)) { //вывести id инфоблока по названию иб
            if (array_key_exists("BODY", $fields)) {
                $idElements = trim(str_replace('S', '', $fields['ITEM_ID']));

                $arDepartment = \CIBlockSection::GetList(
                    [],
                    [
                        'ACTIVE' => 'Y',
                        'IBLOCK_ID' => self::$Iblock,
                        'ID' => $idElements
                    ],
                    false,
                    ['ID', 'XML_ID']
                );

                if ($departItems = $arDepartment->fetch()) {
                    $fields['TITLE'] .= ' '.$departItems['XML_ID'];
                }
            }
        }
        return $fields;
    }

есть такой код, когда запускается переиндексация, то мы записываем в конце title внешний код раздела, но проблема в том что в найденных элементах присутствует этот внешний код, каким образом можно убрать из title в таблице b_search_content внешний код, и оставить его в таблице b_search_content_title при индексации ?

пытался через события ниже, но не получается, не понимаю что должно быть в 3 аргументе
public static function OnAfterIndexAddExtended($searchContentId, &$fields)
    {
        if (
            $fields['MODULE_ID'] !== 'iblock' ||
            !$fields['ITEM_ID'] ||
            !in_array($fields['PARAM2'], self::$Iblock)
        ) {
            return;
        }
       
//что здесь должно быть ?
        $additionalWords = [

        ];

        \CSearch::IndexTitle(
            $fields['SITE_ID'],
            $searchContentId,
            implode(' ', $additionalWords)
        );

        $fields["TITLE"] .= implode(' ', $additionalWords);
        \CSearchFullText::getInstance()->replace($searchContentId, $fields);
    }
  • Вопрос задан
  • 234 просмотра
Подписаться 3 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
i229194964
@i229194964
Веб разработчик
public static function OnAfterIndexAddExtended($searchContentId, &$fields)
{
    if (
        $fields['MODULE_ID'] !== 'iblock' ||
        !$fields['ITEM_ID'] ||
        !in_array($fields['PARAM2'], self::$Iblock)
    ) {
        return;
    }

    // Удалите поле 'TITLE' из массива $fields
    unset($fields['TITLE']);

    // Получите внешний код раздела из какого-то другого источника, например, из базы данных
    $externalCode = getExternalCodeForElement($fields['ITEM_ID']);

    // Добавьте внешний код к полю 'b_search_content_title'
    $fields['b_search_content_title'] .= ' ' . $externalCode;

    // Обновите индекс для измененной записи
    \CSearchFullText::getInstance()->replace($searchContentId, $fields);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы