а в админке скорее всего не как, создайте страничку с кодом
if(!CModule::IncludeModule("iblock")) return;
<?
$res = CIBlockElement::GetByID(%сюда ваш ID%);
if($ar_res = $res->GetNext())
var_dump($ar_res);
?>
не забудьте подключить хедер футер или пролог
<ваш сайт>/bitrix/admin/sql.php
select ID, IBLOCK_ID, IBLOCK_SECTION_ID from b_iblock_element where ID = <ваш id>
Стандартно 1С-Битрикс не ищет по 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 товара или элемента обращайтесь ко мне, помогу с настройкой
CIBlockResult CIBlockElement::GetByID( int ID );
Returns the element parameters.
Parameters
Parameter | Description |
---|---|
ID | Element ID. |
Return Values
Return an instance of CIBlockResult
with the information block element
fields.
Remarks
The method does not check for the published state of the element or whether the
element is the history record. To retrieve published elements only, use the
method GetList().
See Also
Example
<? $res = CIBlockElement::GetByID($_GET["PID"]); if ($ar_res = $res->GetNext()) echo $ar_res['NAME']; ?>
© «Bitrix24», 2001-2023
Up
Для поиска в bitrix элемента ифноблока по id надо воспользоваться следующим кодом. На вход подаётся Id, а так же подключаются инфоблоки IncludeModule(‘iblock’)
CModule::IncludeModule(‘iblock’); $ID=12; $res = CIBlockElement::GetList(array(), array(‘ID’=>$ID), false, false, array(‘ID’, ‘IBLOCK_ID’, ‘NAME’, ‘DETAIL_PAGE_URL’)); if ($arElement = $res->GetNext()) { // echo “<pre>”; print_r($arElement); echo “</pre>”; } |
Поиск в битриксе названия раздела по id, так же прост. Тут же мы может вытащить все остальные данные раздела. Смотрим код ниже.
$ATT_REG=32; $res = CIBlockSection::GetByID($ATT_REG); if($ar_res = $res->GetNext()){ $name_reg= $ar_res[‘NAME’]; print_r($ar_res); } |
Поиск товара по ID
Поиск в публичной части сайта под управлением Битрикс не заложен в самой CMS. Поэтому, если клиент очень хочет получить такой поиск, то нужно немного покодить.
Для начала проведем подготовительные работы. Надо создать в инфоблоке нужного каталога пользовательское свойство, в котором мы будем хранить дубль ID товара.
[spoiler] Назовем это поле, например, SEARCH_ID. Теперь в настройках поля отмечаем, что оно участвует в поиске и сохраняем изменения.
Подготовка закончена, теперь надо заполнить поле для поиска по ID у уже созданных товаров, и автоматизировать его заполнение у вновь создаваемых.
Чтобы заполнить это поле для ваших тысяч товаров сохраните код ниже в файл, поменяйте в нем номер инфоблока и код поля для поиска по ID на ваши, загрузите файл на ваш сайт и откройте в браузере.
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); set_time_limit(0); //убираем ограничение на время выполнения скрипта CModule::IncludeModule("iblock"); CModule::IncludeModule("sale"); CModule::IncludeModule("catalog"); //введите сюда ID вашего инфоблока каталога $IBLOCK_ID = 5; //а сюда символьный код вашего поля для поиска по ID $SEARCH_FIELD_NAME = 'SEARCH_ID'; $els = CIBlockElement::GetList( array("SORT"=>"ASC"), array("IBLOCK_ID" => $IBLOCK_ID), false, false, array('ID','IBLOCK_ID') ); $cnt=0; while ($s = $els->Fetch()) { $ok = CIBlockElement::SetPropertyValuesEx( $s["ID"], $s['IBLOCK_ID'], array('SEARCH_ID' => $s["ID"]) ); if ($ok) { $cnt++; } } echo $cnt; require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>
Теперь в файл /bitrix/php_interface/init.php добавьте следующий код. При необходимости замените SEARCH_ID на код вашего поля.
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "searchid"; function searchid(&$arFields){ if($arFields["ID"]>0){ $upd = CIBlockElement::SetPropertyValuesEx( $arFields["ID"], $arFields['IBLOCK_ID'], array('SEARCH_ID' => $arFields["ID"]) ); } }
Теперь вам надо в админке битрикса сделать полную переиндексацию, и поиск по ID должен начать работать у вас на сайте.