/var/log/life.log
Блог программиста из солнечной Бурятии

Картинки в результатах поиска в joomla

Да и не только изображения, но и любой html код. Дело в том, что joomla перед показом сниппета, заменяет неготорые теги на пробелы, и затем выполняет strip_tags. В joomla 1.5 с этим было сложнее, приходилось обходиться хаком, добавляя в strip_tags список допустимых тегов. В joomla 1.6 плагины типа content теперь вызываются не только для материалов, но так же могут вызываться для произвольных текстов.

1
$text       = JHtml::_('content.prepare', $text);

Для поискового сниппета также вызываются плагины контента, самое главное после очистки от тегов. Что и даёт возможность добавить нужные теги для вывода в сниппет. Мне было необходимо добавить <br>. В поисковом плагине вместо перевода строки я выбрал комбинацию \x01\x01\x01, чтобы не было случайных срабатываний в других плагинах. А в контентном плагине просто заменю эту последовательность на <br>

пример

В поисковом плагине в методе

1
function onContentSearch($text, $phrase='', $ordering='', $areas=null)

при формировании массива результатов

1
2
3
4
5
6
foreach($rows AS $key => $value) {
    if (searchHelper::checkNoHTML($value, $searchText, array('url', 'text', 'title'))) {
        $value->text = $value->text."\x01\x01\x01";
        $return[] = $value;
    }
}

В конткнтном плагине

1
2
3
4
5
6
7
8
9
    public function onContentPrepare($context, &$row, &$params, $page = 0)
    {
        $canProceed = $context == 'text';
        if (!$canProceed) {
            return;
        }
        $row->text = str_replace("\x01\x01\x01",'<br />',$row->text);
        return true;
    }