Вопрос, подкупающий своей новизной. Часто ли вам встречались иллюстрации в результатах поисковой выдачи на сайтах? В гигантах Яндекс и Google и то не так давно появилось это полезное и приятное усовершенствование. Не будем вдаваться в историю, но просто расскажем, как устроить это на «Битрикс».
Способ первый:
Добавим в стандартный компонент поиска код:
<?
$grab = GetIBlockElement($arItem["ITEM_ID"]);
$image1 = CFile::GetPath($grab["PREVIEW_PICTURE"]);
$image2 = CFile::GetPath($grab["DETAIL_PICTURE"]);
?>
А точнее:
<?
$grab = GetIBlockElement($arItem["ITEM_ID"];);
$image_prw = CFile::GetPath($grab["PREVIEW_PICTURE"];);
//$image2 = CFile::GetPath($grab["DETAIL_PICTURE"];);
?>
<img src="<?=$image_prw;?>" width="60" height="45" alt="img" />
Бывает так, что в инфоблок не добавлено изображение. Чтобы не выводить пустой квадратик, добавим в компонент условие:
<?if($arResult["PREVIEW_PICTURE"]!='' && $arResult["DETAIL_PICTURE"]!=''):?>
<?
$grab = GetIBlockElement($arItem["ITEM_ID"]);
$image_prw = CFile::GetPath($grab["PREVIEW_PICTURE"]);
$image2 = CFile::GetPath($grab["DETAIL_PICTURE"]);
?>
<img src="<?=$image_prw;?>" width="60" height="45" alt="img" />
<?endif?>
Способ второй:
Прежде всего найдем в папке .default файл result_modifier.php. Точный путь:
/bitrix/templates/.default/components/bitrix/search.page/clear1/result_modifier.php
В самом конце, после закрывающего ?> добавим код:
<?
if ($arResult["SEARCH"]) {
$arID = array();
foreach ($arResult["SEARCH"] as $i => $arItem) {
if ($arItem["MODULE_ID"] == "iblock" && substr($arItem["ITEM_ID"], 0, 1) !== "S")
$arID[$arItem["ITEM_ID"]] = $i;
}
$grab = CIBlockElement::GetList(array(), array(
"ID" => array_keys($arID)
), false, false, array(
"ID",
"IBLOCK_ID",
"PREVIEW_PICTURE"
));
while ($ar = $grab->Fetch()) {
$arResult["SEARCH"][$arID[$ar["ID"]]]["PICTURE"] = CFile::GetFileArray($ar["PREVIEW_PICTURE"]);
}
}
?>
Теперь отредактируем файл template.php, Точный путь:
/bitrix/templates/.default/components/bitrix/search.page/clear1/template.php
Выберем подходящее по структуре дизайна место и добавим в него код:
<?if (is_array($arItem["PICTURE"])):?>
<img src="<?=$arItem["PICTURE"]["SRC"]?>"
class="preview_picture" border="0" width="" height=""
alt="<?=$arItem["PICTURE"]["ALT"]?> title="<?=$arItem["PICTURE"]["ALT"]?>" />
<?endif?>
А как вывести другие свойства элементов в поиске, например, как вывести свойство с кодом PHONE?
Решение идентично второму способу.
В файл /bitrix/templates/.default/components/bitrix/search.page/clear1/result_modifier.php добавляем следующий код:
if (count($arResult["SEARCH"]) > 0) {
$arIDs = array();
foreach ($arResult["SEARCH"] as $si => $arItem) {
if ($arItem["MODULE_ID"] == "iblock" && substr($arItem["ITEM_ID"], 0, 1) !== "S") {
// связь: iblock_id => id : search_id
$arIDs[ $arItem['PARAM2'] ][ $arItem["ITEM_ID"] ] = $si;
}
}
CModule::IncludeModule('iblock');
foreach ($arIDs as $iblockId => $searchIds) {
// для инфоблоков 2.0 передавать IBLOCK_ID для выбора свойств обязательно
$grab = CIBlockElement::GetList(array(), array(
"IBLOCK_ID" => $iblockId,
"ID" => array_keys($searchIds)
), false, false, array(
"ID",
"IBLOCK_ID",
"PREVIEW_PICTURE",
// Указываем необходимые свойства, в данном случае PHONE
"PROPERTY_PHONE"
));
while ($ar = $grab->Fetch()) {
$ar['PICTURE'] = CFile::GetFileArray($ar["PREVIEW_PICTURE"]);
$si = $arIDs[ $iblockId ][ $ar["ID"] ];
$arResult["SEARCH"][ $si ]["ELEMENT"] = $ar;
}
}
}
А файле шаблона /bitrix/templates/.default/components/bitrix/search.page/clear1/template.php выводим необходимые данные:
//...
<?foreach($arResult["SEARCH"] as $arItem):?>
//....
<p><?echo $arItem["ELEMENT"]['PROPERTY_PHONE_VALUE']?></p>
//....
--------------------------------
Спасибо за внимание!
Читайте свежий выпуск
«Кладовки программиста» каждый день!
Назад в раздел