битрикс поиск по артикулу

Битрикс – как добавить поиск по артикулу в компоненте bitrix:search.title

В данной статье детально разберем кастомизацию кода из готового решения.

Поиск по артикулу в 1С-Битрикс

Если вы еще не знакомы со статьей поиск по ID, как говорится, “прошу к столу” . Ну а сегодняшняя тема, поиск по артикулу на примере компонента search.title (тестировал на готовом решении, имя которого начинается на “А” и заканчивается на “СПРО” 🙂 ).

Открываем папку с вашим шаблоном который может лежать как в папке bitrix так и в local. У меня это:

/bitrix/templates/next/components/bitrix/search.title/

где next – папка шаблона.
Заходим в шаблон fixed (для компонента search.title), ищем файл result_modifier.php и добавляем код в конец файла:

if (!$arResult["SEARCH"] && is_numeric($arResult['query'])) {
	$arSelect = array(
		"ID",
		'NAME',
		"IBLOCK_ID",
		"PREVIEW_TEXT",
		"PREVIEW_PICTURE",
		"DETAIL_PICTURE",
		"DETAIL_PAGE_URL",
		"ACTIVE_FROM",
		"PROPERTY_REDIRECT",
		//'CATALOG_GROUP_1'
	);

	$rsElements = CIBlockElement::GetList(array(), array('IBLOCK_ID' => 33, 'ACTIVE' => 'Y', 'PROPERTY_CML2_ARTICLE' => $arResult['query']), false, false, $arSelect);
	if($arElement = $rsElements->GetNext())
	{

		$price = CCatalogProduct::GetOptimalPrice($arElement['ID'], 1, $USER->GetUserGroupArray(), 'N');

		if ($arElement["PREVIEW_PICTURE"] > 0)
			$arElement["PICTURE"] = CFile::ResizeImageGet($arElement["PREVIEW_PICTURE"], array("width"=>80, "height"=>80), BX_RESIZE_IMAGE_PROPORTIONAL, true);
		elseif ($arElement["DETAIL_PICTURE"] > 0)
			$arElement["PICTURE"] = CFile::ResizeImageGet($arElement["DETAIL_PICTURE"], array("width"=>80, "height"=>80), BX_RESIZE_IMAGE_PROPORTIONAL, true);
		$arElement["PRICE"] = number_format($price['RESULT_PRICE']['DISCOUNT_PRICE'], 0, '', ' ');

		$arResult["FIND_ARTNUMBER"] = $arElement;

	}
}

Если вкратце, то нам необходимо убедится что поиск ничего не нашел и то, что мы ввели, является числом (внимание, если у вас артикул не числовой, вам необходимо убрать эту проверку и возможно придумать свою, например, начинается на ART_). После этого, из информационного блока 33 (ВАЖНО, поменяйте на свой ID инфоблока товаров), ищем товар, свойство которого соответствует CML2_ARTICLE (свойства записываем через PROPERTY_CML2_ARTICLE).

С остальным я думаю ясно, записываем имя, ссылку (которая генерируется в настройках инфоблока по формуле), ресайзим картинку из анонса или детальной (если ее не существует) и ищем актуальную цену при помощи:

$price = CCatalogProduct::GetOptimalPrice($arElement['ID'], 1, $USER->GetUserGroupArray(), 'N');

а затем записываем цену со скидкой, добавив пробел в тысячных величинах:

$arElement["PRICE"] = number_format($price['RESULT_PRICE']['DISCOUNT_PRICE'], 0, '', ' ');

Закрываем файл, но перед этим, чтобы убедится что у вас всё работает, можете принтануть результат прямо тут (при помощи print_r или var_dump).

Часть 2. Открываем тут же файл ajax.php и заменяем начало файла на:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();?>

<?if (!empty($arResult['FIND_ARTNUMBER'])) {?>
<div class="bx_searche scrollbar">
	<a class="bx_item_block" href="<?=$arResult['FIND_ARTNUMBER']["DETAIL_PAGE_URL"]?>">
		<div class="maxwidth-theme">
			<div class="bx_img_element">
				<?if(is_array($arResult['FIND_ARTNUMBER']["PICTURE"])):?>
					<img src="<?=$arResult['FIND_ARTNUMBER']["PICTURE"]["src"]?>">
				<?else:?>
					<img src="<?=SITE_TEMPLATE_PATH?>/images/no_photo_small.png" width="38" height="38">
				<?endif;?>
			</div>
			<div class="bx_item_element">
				<span><?=$arResult['FIND_ARTNUMBER']["NAME"]?></span>
				<div class="price cost prices">
					<div class="title-search-price">
						<div class="price"><?=$arResult['FIND_ARTNUMBER']['PRICE']?> руб.</div>
					</div>
				</div>
			</div>
			<div style="clear:both;"></div>
		</div>
	</a>
</div>
<?}?>

По сути, мы проверяем есть ли у нас данные по товару, и выводим их в читаемом виде, вёрстку и массивы можете переделывать кому как удобно.

В результате получаем:
битрикс поиск по артикулу

Надеюсь у вас всё получилось.
Важно – решение не универсальное, и по какой-то причине может не работать на вашем сайте, но данная статья может натолкнуть вас на реализацию данной задачи (на одну из реализаций данной задачи 😉 ).

Часть 2 уже вышла, и вы можете ее почитать – усовершенствуем код.

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

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

2 коментаря

    1. Можно и так. Создаем свойство артикул, отмечаем что оно учавстствует в поиске, переиндексируем, и, как правило, поиск по нему ищет.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *