Выводим изображение в результатах поиска Joomla

Многие сталкивались с ситуацией, когда необходимо выводить изображения материалов на странице результатов поиска в Joomla. К сожалению стандартными средствами вывести изображение не представляется возможным, приходится прибегать к помощи сторонних плагинов. Из этой статьи Вы узнаете метод, который позволит добиться вывода изображений (миниатюр) в результатах поиска Joomla.

Важно: описанный ниже метод не идеален, а также он не предназначен для вывода первого изображения вставленного в текст материала.

Как это работает:

Для начала Вам необходимо определиться, какие изображения будут выводиться в результатах поиска. Перейдите в редактор материалов Joomla, справа в области настроек материала откройте вкладку «Изображения и ссылки» и загрузите изображение в одно из полей: «Изображение для вступительного текста» или «Изображение полного текста», всё зависит от Вашего метода наполнения сайта:

Выводим изображение в результатах поиска Joomla

 

Сохраните материал после произведенных изменений.

Теперь нам необходимо немного отредактировать некоторые файлы Joomla. Откройте файл plugins/search/content/content.php и  найдите в нем строки:

$query->select('a.title AS title, a.metadesc, a.metakey, a.created AS created, a.language');

Замените эту строку на следующую:

$query->select('a.title AS title, a.metadesc, a.metakey, a.created AS created, a.language, a.images AS image');

Как видите, к текущему запросу мы добавили выборку изображения из базы a.images AS image. Важно помнить, что в случае обновления Joomla произведенные изменения в данном файле пропадут, поэтому будьте предельно внимательны.

Выборку мы сделали, теперь необходимо вывести само изображение на странице результатов поиска, поэтому откройте файл components/com_search/views/search/tmpl/default_results.php или templates/ИМЯ_ВАШЕГО_ШАБЛОНА/html/com_search/search/default_results.php если у Вас используется индивидуальный шаблон.

Совет: чтобы при обновлении Joomla изменения в данном файле не пропали, скопируйте содержимое директории components/com_search/views/search/tmpl/ в директорию templates/ИМЯ_ВАШЕГО_ШАБЛОНА/html/com_search/search/ и Вы сможете производить изменения не опасаясь.

Итак, в найденном файле необходимо добавить следующие строки:

<?php
	$image = json_decode($result->image)->image_intro;
	if (isset($image) && $image != '') {
		echo '<div style="float: left; margin: 5px 10px;" ><img src="/'. $image .'" alt="" /></div>';
	}
?>

Например, перед кратким описанием материала:

<?php echo $result->text; ?>

Обратите внимание, что в данном случае будет выводиться изображение из вступительного текста, если Вы хотите сделать вывод изображения полного текста, Вам следует заменить в текущем коде image_intro на image_fulltext

И последнее, что здесь необходимо, это сбросить выравнивание, для этого перед выводом даты создания материала:

<?php if ($this->params->get('show_date')) : ?>

Добавьте следующий код:

<?php if (isset($image) && $image != '') {
	echo '<div style="clear:both"></div>';
} ?>

Какой никакой, но всё же метод и он работает.


Оставьте свой комментарий

Оставить комментарий от имени гостя

0 / 2500 Ограничение символов
Ваш текст должен быть в пределах 10-2500 символов
9 Комментарии | Добавить свои
  • Гость - Максим

    Есть вопрос!
    Не подскажите куда необходимо вписать класс "uvelichenie", что бы изображение увеличивалось при нажатии в результатах поиска! Спасибо!
    Плагин Spthumbnail

    Нравится 0 Короткий URL:
  • К сожалению не пробовал этот плагин, потому не знаю даже как он действует.
    Вообще, если Вы вносите правки согласно статье, то в добавляемом блоке

    <?php
    	$image = json_decode($result->image)->image_intro;
    	if (isset($image) && $image != '') {
    		echo '<div style="float: left; margin: 5px 10px;" ><img src="/'. $image .'" alt="" /></div>';
    	}
    ?>

    Здесь Вы можете оформить вывод так, как Вам это необходимо, соответственно при добавлении класса, получится так:
    <?php
    	$image = json_decode($result->image)->image_intro;
    	if (isset($image) && $image != '') {
    		echo '<div style="float: left; margin: 5px 10px;" ><img src="/'. $image .'" alt="" class="uvelichenie" /></div>';
    	}
    ?>

    Нравится 0 Короткий URL:
  • Гость - Алена

    Здравствуйте!
    С файлом htaccess.txt разобралась, спасибо.
    На счет ошибки: изменения в Система->Общие настройки->Сервер "Сообщения об ошибках" значения "для разработчиков" не помогло, переименования в шаблоне папки com_search тоже.
    Версия Joomla! 3.4.8. При выводе результатов поиска сверху выводится "Ошибка. Обнаружена ошибка".
    Боюсь, сама не разберусь...

    Нравится 0 Короткий URL:
  • К сожалению, не видя сайт, и не зная что за ошибка, я тоже не сильно Вам помогу. Если правильно понимаю, сайт у Вас размещен на локальном сервере, поэтому могу предложить лишь выслать мне на почту info@blog-about.ru архив с файлами сайта и базу данных, попробую посмотреть, но ничего не обещаю.

    Нравится 0 Короткий URL:
  • Гость - Алена

    Добрый день!
    Спасибо большое за ответ!
    Помогло удаление слеша из ссылки на изображение, картинки выводятся нормально.
    Не поняла Вашу запись: "Для начала проверьте, переименован ли у Вас файл htaccess.txt в .htaccess". Файл htaccess.txt нашла, но во что его переименовать не поняла.
    Еще в файле default_results.php я не нашла строчки require_once JPATH_SITE . '/components/com_content/helpers/route.php'; я ее добавила, но влияние ее наличия или отсутствия на сайт как-то не ощутила.
    Есть у меня еще проблема, при выводе результатов поиска вверху страницы написано "Обнаружена ошибка", причем даже тогда, когда я удаляла все изменения, связанные с выводом изображений. Я подозреваю, что она не связана с этими правками. При просмотре кода в браузере никаких ошибок нет. Если не сложно, подскажите, где искать выход.
    В любом случае, спасибо за помощь!

    Нравится 0 Короткий URL:
  • Обычно файл htaccess.txt переименовывается в ".htaccess", т.е. в файл без имени с расширением htaccess. В интернете очень много статей по настройке и работе этого файла, почитайте.
    Если не секрет, какая версия Joomla, что именно пишется в ошибке? Если так и выводится "Обнаружена ошибка", то попробуйте в административной части сайта зайти в Система->Общие настройки->Сервер и выберите "Сообщения об ошибках" значение "для разработчиков", и проверьте изменился ли вывод ошибки. Если Вы используете бесплатный/платный шаблон, то попробуйте в папке /templates/ВАШ_ШАБЛОН/html/ найти папку com_search и переименуйте ее, после чего снова проверьте, пропала ли ошибка.

    Нравится 0 Короткий URL:
  • Гость - Алёна

    Добрый день!
    Воспользовалась Вашим методом, но картинки не отображаются, адрес ссылки на изображение оказывается некорректным: http://localhost/images/..., а должно быть localhost/www/site/images/...
    Подскажите, пожалуйста, как исправить ситуацию?
    И спасибо за Вашу помощь!

    Нравится 0 Короткий URL:
  • Добрый день. Только что для проверки проделал на локальном сервере всё по инструкции, всё отлично работает.
    Для начала проверьте, переименован ли у Вас файл htaccess.txt в .htaccess
    Попробуйте в файле default_results.php там, где Вы вставили код вывода изображения удалить из ссылки на изображение начальный слеш:

    src="'. $image .'"

    Также проверьте на всякий случай в самом начале этого файла, подключен ли route.php
    require_once JPATH_SITE . '/components/com_content/helpers/route.php';

    В качестве проверки, если Вы используете свой шаблон вывода (файл вынесен в /templates/ВАШ_САЙТ), переименуйте каталог с этим файлом и попробуйте проделать всё со стандартным файлом Joomla.
    Если и в этом случае не корректен путь, скорей всего где-то ошибка в настройке локального сервера, в таком случае могу посоветовать попробовать на рабочем сайте в сети.

    Если ничего из этого не принесло результата, а картинку очень хочется, могу предложить другой вариант, которым я использую на данном сайте, а именно - вывод первого изображения, которое встретится в тексте статьи. Для этого в файле plugins/search/content/content.php добавьте в запрос
    a.introtext as description

    а в файл вывода результатов components/com_search/views/search/tmpl/default_results.php добавьте код обработки:
    <?php
        if ($result->description) {
          if (preg_match('@<img([^>]+)>@ui', $result->description, $images)){
            if (preg_match('@src="([^"]+)"@ui', $images[0], $images)){
              $image = $images[1];
            }
          }
        }
    ?>

    и там же в нужном для Вас месте выведите изображение:
    <?php if ($image) :?>
        <dd class="result-image">
          <a href="<?php echo JRoute::_($result->href); ?>"<?php if ($result->browsernav == 1) :?> target="_blank"<?php endif;?>>
            <img src="<?php echo $image; ?>" alt="<?php echo $this->escape($result->title); ?>" />
          </a>
        </dd>
    <?php endif; ?>

    Нравится 0 Короткий URL:
  • Чуть не забыл, в конце, после вывода изображения, еще нужно будет добавить:

    <?php $image = ''; ?>

    иначе картинка продублируется на все статьи.

    Нравится 0 Короткий URL: