@Tupic123

Лишние элементы в результатах поиска?

Есть цикл который выводит элементы результатов поиска
<?foreach($arResult['SEARCH'] as $arItem):?>
		<div class="news-item">
		<?
$arFilter = Array("IBLOCK_ID"=>$arItem[15], "ID"=>$arItem["ITEM_ID"], "PROPERTY_FILIAL" => $filial,);
$res = CIBlockElement::GetList(Array(), $arFilter);
if ($ob = $res->GetNextElement()){;
    $arFields = $ob->GetFields(); // поля элемента
    $arProps = $ob->GetProperties(); // свойства элемента

   }

?>
<?php  if ($filial == $arProps['FILIAL']['VALUE']) {

	echo '	<a class="service__link" href="">'.$arFields2['NAME'].'</a>
   		
	<p class="service__field">'.$arProps['EMPTY']['VALUE'].'</p>
	<p class="service__field">'.$arProps['NDS']['VALUE'].'</p>
	<p class="service__field">'.$arProps['FILIAL']['VALUE'].'</p>';
} else {
	echo '';
}   ?>
		</div>
	<?endforeach;?>

Если в фильтрации начинает использоваться свойство, то происходит следующее
603a708a08bc5887420691.jpeg
Выводится сначала нужный элемент, затем все остальные(видимо равное количеству результатов поиска) начинают заполняться аналогично последнему
Пример с другим value свойства
603a70f66859a231766134.jpeg
Тут вывелось два подходящих элемента, а остальные заполнились по последнему
Как бороться с таким?
Как сделать что бы не выводились повторяющиеся элементы и пустые строки?
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
@PetrPo
На index.php с вызовом компонента search.page
1. В параметр компонента FILTER_NAME пишешь например
"FILTER_NAME" => "searchFilter"
2. Перед вызовом компонента, добавляешь код
$itemIds = [];

// здесь укажи ИД своего инфоблока (или массив инфоблоков)
$iblockId = 1;

// здесь значение из get (я наугад написал filial)
$filial = $_GET['filial'];

$iterator = \CIBlockElement::GetList([], ['IBLOCK_ID' => $iblockId, 'PROPERTY_FILIAL' => $filial], false, false, ['ID']);
while($row = $iterator->Fetch()) {
	$itemIds[] = $row['ID'];
}

$GLOBALS['searchFilter'] = ['ITEM_ID' => $itemIds];


Все, теперь в $arResult['SEARCH'] уже будут отфильтрованные элементы, дальше уже можешь в result_modifier доставать дополнительные поля, желательно не делать запросы в цикле.

Также желательно код выше закешировать, пример как это сделать можно посмотреть в файле /bitrix/components/bitrix/catalog/templates/bootstrap_v4/section.php
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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