Блог

Как вывести картинки в результатах поиска «Битрикс»? 06.12.2016

Как вывести картинки в результатах поиска «Битрикс»?

Вопрос, подкупающий своей новизной. Часто ли вам встречались иллюстрации в результатах поисковой выдачи на сайтах? В гигантах Яндекс и Google и то не так давно появилось это полезное и приятное усовершенствование. Не будем вдаваться в историю, но просто расскажем, как устроить это на «Битрикс».

Вопрос, подкупающий своей новизной. Часто ли вам встречались иллюстрации в результатах поисковой выдачи на сайтах? В гигантах Яндекс и 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>
//....

Название: Как вывести картинки в результатах поиска «Битрикс»?
Картинка для анонса: 
Детальное описание: Вопрос, подкупающий своей новизной. Часто ли вам встречались иллюстрации в результатах поисковой выдачи на сайтах? В гигантах Яндекс и 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>
//....

Детальная картинка: 
Начало активности (дата): 06.12.2016 08:15:14
Дата создания: 06.12.2016 08:17:02
Кем создан (ID): 1
Кем создан (имя): (admin) Виталий Элс

Возврат к списку

Хотите посотрудничать? Contact Us

Подписаться на обновления

Согласен