Smart Search Zoo не работает

0 Пользователей и 1 Гость просматривают эту тему.
  • 9 Ответов
  • 315 Просмотров
*

newvideo

  • Осваиваюсь на форуме
  • ***
  • 192
  • 2
Smart Search Zoo не работает
« : 09.01.2017, 20:11:32 »
Я пошел по пути "умного" поиска. Настроил модуль умного поиска, включил стандартные плагины, включил плагин Smart Search Zoo.
Выбрал я его за возможность добавить фильтр, который настраивается в Joomla>Компонент>Умный поиск>Фильтры поиска>Создать и о чудо, там есть каталоги Zoo при чем без деления на Приложения, т.е. все категории.

Результат выводится даже с выключенным плагином Smart Search Zoo.
А с включенным - никаких изменений. шаблон Smart Search не выводится.
НО Умный поиск Joomla выводит список найденных материалов Zoo просто списком без номеров, дат и любых полей, только заголовок в виде ссылки.

Простой поиск работает с доработками: Спасибо, shtier
http://joomlaforum.ru/index.php/topic,334279.0.html

На официальном сайте от YooTheme несколько вопросов по этому плагину, но саппорт упорно молчит. Также замечены проблемы у некоторых пользователей при поиске импортных данных. Похоже проблема совместимости Smart Search Zoo с Joomla 3. В одном ответе техподдержка рекомендовала платный filter от ZooLanders.

Прописал в файле плагина абракадабру. Ошибок нет. Поиск работает как обычно. Похоже, что плагин вообще не подключен к Joomla.
Ошибка появилась спустя время, когда я добавил статью. Плагин имеет функцию автодобавления в индекс, чтобы не индексировать каждый раз всю базу.
Получается, что плагин работает только как автоиндекс, а при выдаче поиска не принимает участия.

В файле www\components\com_finder\views\search\tmpl\default_results.php я нашел только метод loadTemplate() в строке
Код
		<?php echo $this->loadTemplate($layout); ?>
Но где этот метод описывается и что там не работает не могу найти.

Кто-нибудь разобрался с этим плагином? Как его подключить? Спасибо!
----------------------------------------------------
Joomla: 3.6.0 | Zoo: 3.3.23
« Последнее редактирование: 23.01.2017, 14:27:04 от newvideo »
кто не работает, тот ест

*

shtier

  • Осваиваюсь на форуме
  • ***
  • 76
  • 6
  • Чак Норрис никогда не спит. Он выжидает.
Re: Smart Search Zoo не работает
« Ответ #1 : 11.01.2017, 20:18:06 »
элемент выдачи поиска это \components\com_finder\views\search\tmpl\default_result.php
Есть заголовок со ссылкой, описание и текстом ссылка внизу (перед тем как всё отобразилось нужно проиндексировать).
Вот эта разметка
Код
<li>
<h4 class="result-title <?php echo $mime; ?>">
<a href="<?php echo JRoute::_($route); ?>"><?php echo $this->result->title; ?></a>
</h4>
<?php if ($show_description) : ?>
<p class="result-text<?php echo $this->pageclass_sfx; ?>">
<?php echo $description; ?>
</p>
<?php endif; ?>
<?php if ($this->params->get('show_url', 1)) : ?>
<div class="small result-url<?php echo $this->pageclass_sfx; ?>">
<?php echo $this->baseUrl, JRoute::_($this->result->route); ?>
</div>
<?php endif; ?>
</li>
В самом плагине логика отличается от search, как вы уже заметили.
« Последнее редактирование: 11.01.2017, 20:35:43 от shtier »

*

shtier

  • Осваиваюсь на форуме
  • ***
  • 76
  • 6
  • Чак Норрис никогда не спит. Он выжидает.
Re: Smart Search Zoo не работает
« Ответ #2 : 11.01.2017, 20:34:08 »
Если и тут картинки добавлять ))  я бы не стал конечно, но тем не менее - можно по той же схеме сделать всё (http://joomlaforum.ru/index.php/topic,334279.0.html).
Ищите в плагине строку
Код
$item->summary = $this->renderer->render('item.default', array('item' => $zoo_item));
меняете на
Код
$item->summary = $this->renderPos('item.default', $zoo_item);
$item->image = $this->renderPos('item.image', $zoo_item);
не забываете про renderPos и при индексации добавиться ещё и image
и там в default_result.php будет в объекте FinderIndexerResult как
Код
$this->result->image

*

newvideo

  • Осваиваюсь на форуме
  • ***
  • 192
  • 2
Re: Smart Search Zoo не работает
« Ответ #3 : 11.01.2017, 21:20:12 »
Кажется начинаю въезжать в этот заговор)))
Это получается плагин из шаблона default берет поля, пихает их в индексную базу, а потом компонент finder Joomla от туда берет результат!?
Код
$item->summary = $this->renderer->render('item.default', array('item' => $zoo_item));
$item->url = $this->getURL($item->id, $this->extension, $this->layout);
$item->route = $this->app->route->item($zoo_item, false);
$item->path = FinderIndexerHelper::getContentPath($item->route);
$item->state = ($zoo_item->searchable == 1) && ($zoo_item->state == 1);

в итоге у нас есть 5 переменных для вывода, summary это все поля из шаблона, url, route и path я не понял чем отличаются, а state это типа флага поиска.
И чтобы привести в красивый вид поисковую выдачу, к примеру, хочу отобразить "Каталог", то придется этот каталог пихать в индекс!?

В таком случае я с вами согласен, картинку и вообще туда пихать что-то - это лишнее, читал я про этот умный поиск, там база раздувается почти в 2 раза, почти копия сайта.

у меня поиск находит статьи по словам из текста Zoo, значит они уже проиндексированы, но выводятся только титл-ссылки, а $description пустой.
Далее вывожу без всяких условий    <?php echo $this->result->summary . '====' . $description; ?>
Ура, появился текст статьи до "=====", но почему-то не в каждой записи. Как-то через одну.
Беру ту статью, где не отображается текст. Вижу, что там есть текст. Беру любое слово. Ввожу в поиск и в итоге статья находится. Значит в индексе базы есть этот текст, но почему-то он не отображается в summary

Не понятен этот смарт, что мешало обычный поиск сделать с фильтром? :'(
« Последнее редактирование: 12.01.2017, 03:21:03 от newvideo »
кто не работает, тот ест

*

newvideo

  • Осваиваюсь на форуме
  • ***
  • 192
  • 2
Re: Smart Search Zoo не работает
« Ответ #4 : 12.01.2017, 03:32:11 »
1. $description оказывается был пустой, потому что в общих настройках Joomla->Умный поиск было отключено описание.
Теперь вроде отображается корректно. Можно задать кол-во символов текста выводимого под ссылкой. :D
2. Заметил особенность, что при создании материала, заголовок материала появляется в админке компонента Умный поиск в таблице индекса, но не участвует в поиске. После того как в админке Zoo захожу в материал и сохраняю его, тогда он начинает участвовать в поиске и выводит содержание материала. Так, получается, что плагин работает наполовину, или он как-то конфликтует со стандартными финдерами. Всё же придется индексировать базу периодически. У меня 10 тестовых материалов из 10 слов. индексируются 5 минут. Я уже сомневаюсь в практичности данного смарт метода, нужно ещё лично будет проверить рост базы данных "в попугаях".
« Последнее редактирование: 12.01.2017, 04:37:50 от newvideo »
кто не работает, тот ест

*

newvideo

  • Осваиваюсь на форуме
  • ***
  • 192
  • 2
Re: Smart Search Zoo не работает
« Ответ #5 : 12.01.2017, 04:25:12 »
 А реально ли зная item-id найденного материала вывести в результатах не то, что есть в базе индекса, а значение связанного с этим item-id любым элементом?
Например, есть поля в материале: "Категория", "Хиты", "Дата", пусть та же "Картинка". Эти элементы ведь связаны с item-id как-то (например как при обычном рендере шаблонов).
И вот когда смарт выдает результат в виде титл-ссылки, пусть он под ссылкой выдаст кроме echo $description; ещё и необходимые связанные поля. Просто без информации о категориях или даты или хитах - поиск вовсе не поиск, а малоинформативная куча ссылок.

Только я не представляю знает ли результат смарт поиска (result) это самый item-id? Ведь, например, в переменной url он вклеен в кучу букв в конце = "index.php?option=com_zoo&view=item&id=273"

Если это будет невозможно, то придется передавать в индекс элемент "Категории", чтоб хоть как-то облагородить выдачу, а то эти урлы для пользователя ни о чем не говорят.^-^
« Последнее редактирование: 12.01.2017, 04:38:01 от newvideo »
кто не работает, тот ест

*

shtier

  • Осваиваюсь на форуме
  • ***
  • 76
  • 6
  • Чак Норрис никогда не спит. Он выжидает.
Re: Smart Search Zoo не работает
« Ответ #6 : 12.01.2017, 05:40:40 »
А реально ли зная item-id найденного материала вывести в результатах не то, что есть в базе индекса, а значение связанного с этим item-id любым элементом?
ничего невозможного нет )
Цитировать
Только я не представляю знает ли результат смарт поиска (result) это самый item-id?
он в том же FinderIndexerResult
Код
$this->result->id
берете id item, по нему выходите на сам item, затем перебираете элементы(elements) item, фильтруете то, что вам нужно(для этого всего пишите helper или плагин дополнительный) и всё что нужно отдаёте в рендер.(default_result.php)
понадобятся знания, как минимум:
administrator\components\com_zoo\classes\application.php
administrator\components\com_zoo\helpers\module.php
возможно plugins\system\zooevent\zooevent.php


*

shtier

  • Осваиваюсь на форуме
  • ***
  • 76
  • 6
  • Чак Норрис никогда не спит. Он выжидает.
Re: Smart Search Zoo не работает
« Ответ #7 : 12.01.2017, 06:21:08 »
или альтернативный вариант - делаете "мостик" между plugins\finder\zoosmartsearch\zoosmartsearch.php (здесь можно все эти данные получить - они ведь были получены "по схеме", описанной выше, и отправляются в индекс)
задача их перехватить (не записывать в индекс а отправить напрямую в рендер), ну тоже helper, плагин и т.п.

*

newvideo

  • Осваиваюсь на форуме
  • ***
  • 192
  • 2
Re: Smart Search Zoo не работает
« Ответ #8 : 12.01.2017, 15:38:16 »
или альтернативный вариант - делаете "мостик" между plugins\finder\zoosmartsearch\zoosmartsearch.php (здесь можно все эти данные получить - они ведь были получены "по схеме", описанной выше, и отправляются в индекс)
задача их перехватить (не записывать в индекс а отправить напрямую в рендер), ну тоже helper, плагин и т.п.
да да вот с мостиком было бы интереснее, только я пока 0 в PHP, придется осваивать, не представляю как этот хелпер работает, думаю тут даже знания PHP не достаточно, нужно иметь опыт создания плагинов и знать внутреннюю кухню Zoo, где что лежит. Спасибо за наводку, буду пробовать!
кто не работает, тот ест

*

Sonate

  • Захожу иногда
  • **
  • 12
  • 0
Re: Smart Search Zoo не работает
« Ответ #9 : 13.07.2017, 14:40:40 »
Может, кому пригодится сработавшее у меня решение. Сразу говорю: сделано все методом научного тыка, по разным комментариям и примерам, в php я не разбираюсь почти совсем, плохо владею терминологией. Поэтому прошу сразу прощения за возможные ляпы и буду благодарна, если кто-то поправит вывод шаблона.

Насколько я поняла себе задачу красивого вывода поисковых результатов, решение состоит глобально в следующем:
1. Убрать форматирование выдачи по умолчанию результатов поиска Joomla.
2. Добавить нужные позиции в стандартный шаблон Search: Default и назначить им желаемое форматирование.
3. Раскидать свои поля по позициям.

Итак, решение.

1. В файле template /warp/systems/joomla/layouts/com_search/search/default_results.php
удаляем
Код
echo $warp['template']->render('article', $args),
и добавляем
Код
echo $result->text,

2. В файле components/com_search/views/search/view.html.php
удаляем
Код
$row = SearchHelper::prepareSearchContent($row, $needle),
и удаляем полностью блок
Код
foreach ($searchWords as $highlightWord)

3. Теперь можно настраивать собственные результаты в Search: Default. Для этого в файле /plugins/search/zoosearch/renderer/item/default.php
должно быть содержимое подобно этому с нужными позициями и оформлением:
Код
// no direct access
defined('_JEXEC') or die('Restricted access');

// render description
?>
<div>
    <h2 class="uk-h2"><?php echo $this->renderPosition('title'); ?></h2>
    <p class="uk-panel">
    <?php echo $this->renderPosition('image', array('style' => 'comma')); ?>
    </p>
    <p class="uk-text-muted">
<?php echo $this->renderPosition('meta', array('style' => 'comma')); ?>
</p>
    <p class="uk-text-muted">
        <?php echo $this->renderPosition('description', array('style' => 'comma')); ?>
    </p>
    <ul class="uk-list">
<?php echo $this->renderPosition('specification'); ?>
</ul>
<hr class="uk-grid-divider" />
</div>

4. Прописать позиции в /plugins/search/zoosearch/renderer/item/positions.xml
Код
<renderer>
<positions layout="default">
<position name="title">Title</position>
<position name="image">Image</position>
<position name="meta">Meta</position>
<position name="description">Description</position>
<position name="specification">Specification</position>
</positions>
</renderer>

5. Настроить выдачу результатов в ZOO в расширенном расположении Search: Default, накидав в нужные позиции нужные поля.

В общем, результат меня устроил. Но поскольку я ничего не понимаю в php, не могу понять, почему выдается ошибка "Renderer Layout "element.uikit_list" not found. (File: administrator/components/com_zoo/classes/renderer/item.php, Line: 150)"
при описании позиции "specification"
Код
	<ul class="uk-list">
<?php echo $this->renderPosition('specification', array('style' => 'uikit_list')); ?>
</ul>

Кто-нибудь поможет с оформлением?