Компоненты Поиск

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Реализация независимых друг от друга поисковиков

#1 21 июля 2014 в 00:58
Решаю вот, такую задачку: Независимые друг от друга поисковики… Один всегда ищет только в статьях… Другой ищет только в каталоге… Третий ищет исключительно только в блогах..

Каким образом можно осуществить такое?
#2 21 июля 2014 в 01:29
Наверное надо клонировать модуль поиска и каждый "настроить" на свой раздел.

Но т.к. родной настройки нет, взял это слово в кавычки.
Скорее всего, "настроить" можно в шаблоне модуля скрыв и выставив нужные input name в состояние checked.
#3 21 июля 2014 в 02:25

Скорее всего, "настроить" можно в шаблоне модуля скрыв и выставив нужные input name в состояние checked.

Sonat
Пробовал уже… Добавил в код условие, чтоб поставился чек только на нужное (здесь это "3D-модели"):
  1. <div class="search_select_component">
  2. {foreach key=tid item=enable_component from=$enable_components}
  3. <label id="l_{$enable_component.link}" class="selected">
  4. <input name="from_component[]" onclick="toggleInput('l_{$enable_component.link}')" type="checkbox" value="{$enable_component.link}" {if $enable_component.title=="3D-Модели"} checked="checked"{/if}/>
  5. {$enable_component.title}
  6. </label>
  7. {/foreach}
  8. </div>
Работает… Чек бокс на поиске проставился где надо… Но! Жмем поиск, и попадаем на страничку компонета "Поиск", где уже все по другому… Чек-боксы стоят все..
Ну чтож… правим компонент… Код для поиска по компоненту "3D-Модели":
  1. {foreach key=tid item=enable_component from=$enable_components}
  2. {if $col==1} <tr> {/if}
  3. <td width="">
  4. <label id="l_{$enable_component.link}" {if in_array($enable_component.link, $from_component) || !$from_component}class="selected"{/if}>
  5. <input name="from_component[]" onclick="toggleInput('l_{$enable_component.link}')" type="checkbox" value="{$enable_component.link}" {if in_array($enable_component.link, $from_component) || !$from_component} {if $enable_component.title=="3D-Модели"} checked="checked"{/if} {/if} />
  6. {$enable_component.title}
  7. </label>
  8. </td>
  9. {if $col==5} </tr> {assign var="col" value="1"} {else} {math equation="x + 1" x=$col assign="col"} {/if}
  10. {/foreach}
Ну теперь, вроде все работает, но вот вопрос… Как быть с поиском по остальным компонентам… Например по статьям? Блогам?
#4 21 июля 2014 в 11:14
Я бы сделал еще проще: в файле \modules\mod_search.tpl там где вывод чекбоксов вставить только один нужный удалив всю таблицу чекбоксов.
Пример для фотогалереи:
  1. <input name="from_component[]" type="checkbox" value="photos" checked="checked">
У другого модуля (копии) вместо таблицы уже другой чекбокс — для например для статья
  1. <input name="from_component[]" type="checkbox" value="content" checked="checked">
и т.д.

Каждый из модулей выводится только в нужном компоненте и ищет только в нужной части.
#5 21 июля 2014 в 12:54
Согласен, этот вариант проще… Но с модулями, вроде, все в порядке… Мой вариант хоть и сложнее, но работает… Нужный чекбокс стоит там, где надо, ненужные все отключены..
Вопрос в другом… После поиска он перенаправляет с модуля на компонент.. Я вот думаю, может быть как-то, при переходе от модуля к результатам поиска, передать поисковому компоненту переменную со значением value выбранного чекбокса? Ведь модуль передает компоненту слово! Значит, это возможно! Но как?
Т.к. я почти полный нуб в пхп и в архитектуре инстанта, я не могу понять как можно обмениваться переменными…
#6 21 июля 2014 в 13:43

Я вот думаю, может быть как-то, при переходе от модуля к результатам поиска, передать поисковому компоненту переменную со значением value выбранного чекбокса? Ведь модуль передает компоненту слово! Значит, это возможно! Но как?

freet
Так вроде то что я написал это и делает.
Т.е. после нажатия в модуле на кнопку "найти". В компоненте поиска выдается результат по тому компоненту, где был указан чекбокс. И в настройках для повторного поиска чекбоксы стоят так как ему и передал модуль
Проверил на первом примере — после поиска по альбомам. Чекбокс с результате поиска стоял только на фото, остальные отключены.
#7 21 июля 2014 в 18:21
Получилось.. Ура, господа! Правда, пришлось пошаманить с tpl… Sonat, спасибо… Подсказки помогли..
Решение получилось следующее:
Компонент поиска править не пришлось… Скопирован модуль module.tpl
Две его копии названы module_search_content.tpl и module_search_catalog.tpl
В файлах, вместо {$mod.body} добавлен код из mod_search.tpl.
Код:
  1. {foreach key=tid item=enable_component from=$enable_components}
  2. <label id="l_{$enable_component.link}" class="selected">
  3. <input name="from_component[]" onclick="toggleInput('l_{$enable_component.link}')" type="checkbox" value="{$enable_component.link}"
  4. checked="checked" />
  5. {$enable_component.title}
  6. </label>
  7. {/foreach}
в файле module_search_content.tpl заменен на
  1. <label id="l_content" class="selected" style="display:none;"><input name="from_component[]" type="checkbox" value="content" checked="checked">Статьи</label>
а в файле module_search_catalog.tpl заменен на
  1. <label id="l_catalog" class="selected" style="display:none;"><input name="from_component[]" type="checkbox" value="catalog" checked="checked">Статьи</label>
Далее, в админке были созданы два дубликата модуля "Поиск", названы "Поиск в статьях" и "Поиск в каталоге", добавлены префиксы (у меня один поиск выводится в сайдбаре, а другой в топе, разные стили) searchcont_ и searchcatalog_, в Шаблон модуля выбран соответствующий ему шаблон..

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

Спасибо большое за поддержку!
#8 22 июля 2014 в 12:56
Задача решена, тема закрыта…
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.