Jump to content
  • 0

Кастомизация стандартного поиска


rus
 Share

Question

В товаре есть доп. поле в котором хранится специфичное краткое описание, используется для вывода краткой тех. инфы о нем.

Хотелось бы на странице с результатом запроса в поиске вывести это доп. поле, оно выводится, но для каждого товара одно и тоже.

Для проверки решили просто заполнить только одно поле, у одного товара, по идее, в результате запроса скажем по коду товара, или по имени - не важно, должен вывести все совпадения, а так же доп. описание для данного товара, если его нет - то не выводит соответственно.

Сейчас же, по любому запросу для любого товара выводит вот это тестовое описание, одно для всех товаров на странице с результатом поиска.


<?foreach($arResult["SEARCH"] as $arItem):?>
<div class="search-preview">
<h2><a href="<?echo $arItem["URL_WO_PARAMS"]?>"><?echo $arItem["TITLE_FORMATED"]?></a></h2>
<p>
<?
if(CModule::IncludeModule("iblock")) {
$items = GetIBlockElementListEx("catalog", $arItem["PARAM2"], // в $arItem["PARAM2"] содержится id инфоблока
Array(),
Array("NAME" => "ASC"),
0,
Array("ELEMENT_ID" => $arItem["ITEM_ID"]),
Array("PROPERTY_DOPSVED")); // DOPSVED - это и есть ключ поля, в котором содержится значение, которое и нужно вывести
while ($arItem = $items->GetNext()) {
$arrItemM[] = $arItem["PROPERTY_DOPSVED_VALUE"]; // // DOPSVED - это и есть ключ поля, в котором содержится значение, которое и нужно вывести
}
}
$arrItemM = array_unique($arrItemM); // избавляемся от повторений в массиве
foreach($arrItemM as $arSearchDopsved) {
echo $arSearchDopsved; // а вот тут хочу вывести свое описание, типа краткого, но немного другое. выводит, но для каждого товара одно и тоже.
}
?>
<?/*echo $arItem["BODY_FORMATED"]*/?> // вот тут выводит описание стандартное, которое вводится в поле краткое описание товара.
</p>
</div>
<?endforeach;?>

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Если поиск строго по товарам, то может больше смысла его делать фильтром?

А в приведённом коде на мой взгляд невероятное количество искусственно созданных сложностей.

Link to comment
Share on other sites

  • 0

Если поиск строго по товарам, то может больше смысла его делать фильтром?

А в приведённом коде на мой взгляд невероятное количество искусственно созданных сложностей.

1) ну не то что бы строго, но скорее всего так и будет. фильтром имеется ввиду с селектами и инпутами? это не вариант, нужно дать выбор вводить то, что юзер помнит на память, или где-то скопировал запрос.

2) возможно, ведь я только начинаю разбираться в битриксе, многого пока не знаю, а порой и не понимаю вовсе. может подскажешь, натолкнешь на мысль?

Link to comment
Share on other sites

  • 0

ок, попробую натолкнуть на мысль.

Если попытаться вывести результат описанной здесь выборки, в ней будет хоть что-нибудь?

Если мне склероз не изменяет, в GetIBlockElementListEx второй параметр должен быть массив.

Ну и ещё раз напомню, что этот код должен быть в result_modifier.php и не должен мешаться в кучу с html.

Link to comment
Share on other sites

  • 0

ок, попробую натолкнуть на мысль.

Если попытаться вывести результат описанной здесь выборки, в ней будет хоть что-нибудь?

Если мне склероз не изменяет, в GetIBlockElementListEx второй параметр должен быть массив.

Ну и ещё раз напомню, что этот код должен быть в result_modifier.php и не должен мешаться в кучу с html.

да, в ней будет передан массив состоящий из:

1) ID, VALUE и NAME элемента фильтруемого и этот массив легко разбираемый ;)

2) второй параметр - TypesInc - Фильтр для включения по ID и(или) мнемоническому коду информационного блока. В качестве параметра может быть как единичное значение (ID или мнемонический код информационного блока), так и массив (array) таких значений.

Необязательный. По умолчанию включаются все элементы из информационных блоков типа type без дополнительной фильтрации.

Пример: "product_news"

3) result_modifier.php я так понимаю не только для отделения логики? проблему с кэшированием он тоже решает, или это уже другая "степь"?

4) к стати, проблему решил таки вот каким способом:


<?foreach($arResult["SEARCH"] as $arItem):?>
<div class="search-preview">
<h2><a href="<?echo $arItem["URL_WO_PARAMS"]?>"><?echo $arItem["TITLE_FORMATED"]?></a></h2>
<p>
<?
if(CModule::IncludeModule("iblock")) {
$itemsearch = GetIBlockElementListEx("catalog", $arItem["PARAM2"],
Array(),
Array("NAME" => "ASC"),
0,
Array("ELEMENT_ID" => $arItem["ITEM_ID"]),
Array("PROPERTY_DOPSVED"));
while ($arItemSearch = $itemsearch->GetNext()) {
$arItemSearchDop[] = $arItemSearch["PROPERTY_DOPSVED_VALUE"];
$arSearchName[] = $arItemSearch["NAME"]; // заголовок товара
}
}
$arSearchName = array_unique($arSearchName); // избавляемся от повторов в массиве. хотя это наверное лишнее, вряд ли будут повторения.
$arItemSearchDop = array_unique($arItemSearchDop);
foreach($arSearchName as $key => $arSearchDopsvedName) {
if($arItem["TITLE"] == $arSearchDopsvedName) { // в $arItem["TITLE"] тот же заголовок что и в $arSearchDopsvedName.
// таким образом сравнивая их, можно вытащить нужные данные для конкретного товара.
echo $arItemSearchDop[$key]; // $key - так как ключ для ID, VALUE и NAME одинаковый, вытаскиваем по нему доп. сведения для каждого товара - свои.
}
}
?>
<?/*echo $arItem["BODY_FORMATED"]*/?>
</p>
</div>
<?endforeach;?>

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy