Битрикс поиск по ID

Стандартно 1С-Битрикс не ищет по ID. Исправляем этот момент 🙂

Как в Битриксе искать по ID товара (элемента)?

Для поиска контента на сайте, обычно используют bitrix:search.title или компонент Поиск по заголовкам. Данный компонент (как несложно догадаться) ищет по названиям элементов, и выдает вам результат аяксом сразу же под поисковой строкой. В настройках вы можете ограничить область поиска выбрав нужные инфоблоки.

битрикс поиск

На моей практике, самый популярный случай это поиск по Каталогу, а точнее — по названию товара. Перейдем к реализации.

Шаг 1. Свойство в админке + init.php

Создадим в админке свойство с символьным кодом MYID и в настройках ставим галочку Значения свойства участвуют в поиске.

Теперь, переиндексируем все элементы. Для этого создаем страницу со следующим содержимым:

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");?>
<?
set_time_limit(0);
if (CModule::IncludeModule("iblock")):
	$res = CIBlockElement::GetList (
		false,
		Array("IBLOCK_ID" => 38, "ACTIVE" => "Y"),
		false,
		false,
		Array('ID', 'NAME', 'PROPERTY_MYID')
	);

	while($ar_field = $res->GetNext())
	{
		#Запись в MYID текущего ID
		if(!$ar_field['PROPERTY_MYID_VALUE']) {
			CIBlockElement::SetPropertyValuesEx($ar_field['ID'], false, array("MYID" => $ar_field['ID']));
			echo "<pre>Товар перезаписан - ".$ar_field['NAME']." - в значении ".$ar_field['ID']."</pre>";
		}


	}
echo 'Работа скрипта завершена';
endif;
?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");?>

38 — ID вашего инфоблока с товарами. Мы записываем в свойство наш ID, если оно не задано. По этому свойству мы и будем искать. После того как скрипт выполнится, его можно удалить.

ПС — как вы видите, я в настройках фильтрации не указывал:

Array("IBLOCK_ID" => 38, "ACTIVE" => "Y", "!PROPERTY_MYID_VALUE" => false),

Хотя наверное стоило 🙂 .

Чтобы не вбивать в ручную ID, добавим в init.php следующий код:

/* добавляем в поисковый индекс ID нового товара */
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "searchid");
function searchid(&$arFields){
    if($arFields["ID"]>0){
        $upd = CIBlockElement::SetPropertyValuesEx(
            $arFields["ID"], 
            $arFields['IBLOCK_ID'], 
            array('MYID' => $arFields["ID"])
        );
    }
}

Это позволит при создании нового товара сразу же записывать его ID.
init.php это файл который создается в папке /bitrix/php_interface/

Шаг 2. Переиндексация

Теперь нам необходимо запустить переиндексацию. Делается это весьма просто:
http://ВАШ_САЙТ/bitrix/admin/search_reindex.php?lang=ru
ВАШ_САЙТ — вставляем домен и вуаля, вы на странице. Убираем галочку Переиндексировать только измененные и запускаем.

Шаг 3. Перенос компонента

На это шаге вам необходимо скачать компонент. Помещаем его в папку /bitrix/components/. Обратите внимание, что пространство имен компонента не bitrix а ready. К сожалению обычный компонент на рассчитан на поиск по другим свойствам, только по заголовкам.

<?$APPLICATION->IncludeComponent(
"ready:search.title",
..
?>

Надеюсь вы знаете, как в этот код добавить параметры и вызвать компонент 🙂 Для простоты, можно просто поменять в вашем search.title birix на ready. Зачем мы это делаем не в папке битрикс? Потому что при обновлении эти файлы могут обновиться, и в какой-то момент вы зададите себе вопрос «почему ничего не работает?» 🙂 .

Для самых любопытных оставляю ссылку на документацию.

Если на вашем сайте необходимо выполнить Поиск по id товара или элемента обращайтесь ко мне, помогу с настройкой

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

Какие услуги предоставляю:
- Создание сайтов, шаблонов и компонентов на 1С-Битрикс;
- Разработка функционала с нуля и доработка кода на уже созданных проектах;
- Адаптивная вёрстка макетов и натяжка на Битрикс;
- Парсинг файлов и выгрузка на сайт (форматы - CSV, XML, XLSX, JSON)
- Интеграции со сторонними сервисами по API;
- Многоязычные версии и многое другое.

Если у вас остались вопросы, свяжитесь со мной любым удобным для вас способом или оставьте комментарий внизу.
E-mail: dmitriyribka@gmail.com
Skype: cinemacreaterus

2 комментария

  1. В архиве с компонентом ready.search.title.zip лежит другой компонент price.list. И какой тогда смысл в этой публикации?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *