Поиск по сайту на MODX Revolution без mSearch.

Создание страницы для вывода результатов поиска в MODX

Устанавливаем дополнения «pdoTools».

Затем создадим страницу (ресурс), которая будет отвечать за вывод результатов поиска. Шаблон для этого ресурса в большинстве случаев подходит стандартный, требование только одно - основное место в нём должно выделяться под содержимое ресурса. В содержимом страницы вызываем сниппет «pdoResources», с параметрами :

<p>Результаты поиска по запросу: [[!posts]], Количество результатов: ([[+qty]])</p>
[[!pdoResources?
    &parents=`2`
    &resources=`-7,-11,-8,-10,-12,-13,-14` //в каких ресурсах не надо искать
    &depth=`3`
    &tplWrapper=`Table.tpl`
    &tpl=`products.tpl`
    &includeTVs=`Model,Resurs,Price`
    &prepareTVs=`1`
    &tvFilters=`introtext==%[[!posts]]%||pagetitle==%[[!posts]]%||Model==%[[!posts]]%||Resurs==%[[!posts]]%||Price==%[[!posts]]%`
    &totalVar=`qty`
]]

Здесь самая интересная часть использование &tvFilters с динамическими параметрами которые мы получаем из POSTа. Указываем в каких полях и TV искать, в данном примере не ищется в контенте...

Создадим маленький сниппет, который будет возвращать данные из поисковой строки, точнее говоря POST:

return $_POST['query'];

Можно конечно использовать и echo, но говорят в MODX это не по фэншую...

Создание формы поиска

Чтож, осталось передать созданной странице параметр, через который наш запрос узнает, что именно надо искать. Для этого в любом месте сайта располагаем следующий код, или создаем чанк с этим кодом и тоже пихаем его куда попало :)

<form id="search" action="[[++site_url]][[~26]]" method="POST">
    <input type="text" name="query" maxlength="40" value="" placeholder="Найти" />
</form>

Как вы наверно догадались,

[[~26]]

это id страницы, которую мы создали на предыдущем шаге. Вся задача этой формы - отправить ей методом «POST» параметр «query». Можно приступать к тестированию, так как основная часть поиска на MODX закончена.

Вывод результатов

Если в выдаче очень много ресурсов, то целесообразно использовать постраничный вывод. Для этого можно использовать сниппет «getPage» или «pdoPage». Последний входит в состав дополнения «pdoTools».