Простой поиск по каталогу товаров

Этот способ подходит как для ресурсов MODX так и для товаров в отдельной таблице. Описание как это сделано на Демо-сайте.

Демо: http://demo.modx-shopkeeper.ru/poisk.html?f_pagetitle[like]=acer

  1. Делаем такую форму:
<form action="[[~11]]" method="get" role="search">
    <div class="form-search">
        <input type="search" name="f_pagetitle[like]" class="form-control search-query" value="[[!getRequest?paramName=`f_pagetitle.like`]]">
    </div>
</form>

Внимание на сниппет:

[[!getRequest?paramName=`f_pagetitle.like`]]

Этот сниппет после сабмита формы будет выводить строку, которую вы ввели в поле.

  1. Добавляем в админке сниппет "getRequest" с таким кодом:
<?php

/*

Example:

<input type="search" name="f_pagetitle[like]" value="[[!getRequest?paramName=`f_pagetitle.like`]]">

*/

$output = '';
$paramName = $modx->getOption( 'paramName', $scriptProperties, '' );
$requestType = $modx->getOption( 'requestType', $scriptProperties, 'get' );

$requestData = $requestType == 'post' ? $_POST : $_GET;

if( strpos( $paramName, '.' ) !== false ){
    
    $pn = explode( '.', $paramName );
    if( count( $pn ) >= 2
       && isset( $requestData[ $pn[0] ] )
       && isset( $requestData[ $pn[0] ][ $pn[1] ] )
       && !is_array( $requestData[ $pn[0] ][ $pn[1] ] ) ){
        
        $output = trim( $requestData[ $pn[0] ][ $pn[1] ] );
        
    }
    
}
else {
    
    if( isset( $requestData[ $paramName ] )
       && !is_array( $requestData[ $paramName ] ) ){
        
        $output = trim( $requestData[ $paramName ] );
        
    }
    
}

$output = $modx->stripTags( $output );
$output = $modx->sanitizeString( $output );

return $output;

  1. Создаем чанк "page_search_results" с таким кодом:
<div class="row">
    [[!tmCatalog?
    &tpl_list=``
    &tpl=`product_list`
    &guardKey=``
    &parents=`2`
    &depth=`2`
    &noResults=`По вашему запросу ничего не найдено.`
    ]]
    <div class="clearfix"></div>
</div>

<ul class="pagination">
    [[!+page.nav]]
</ul>

Сниппет "tmCatalog" должен быть настроен заранее по документации компонента "TagManager2".

  1. В контент страницы "Поиск" добавляем вызов чанка:
[[$page_search_results]]
  1. Для работы необходим компонент TagManager2 2.2.0-rc2+.

Если у вас 2.2.0-rc1, обновить эти 3 файла:
https://bitbucket.org/andchir/tagmanager2/src/b6eeb4cbc32033bdf8e2c7e29f98e550142f35ec/core/components/tag_manager2/model/?at=default

А на демо сайте tmCatalog уже настроен по документации компонента "TagManager2"?

Сниппет "tmCatalog" должен быть настроен заранее по документации компонента "TagManager2".

Добрый день, не срабатывает поиск, пишет постоянно что "По вашему запросу ничего не найдено.",
за основу взял демо-версию с вашего сайта
сначала заменил 3 файла на более новую версию, не помогло, потом обновил TagManager2 до версии 2.3-pl и все равно не помогло, сделал исключительно как на примерах, ошибок в логах нету, в чем может быть распространенная ошибка?
Спасибо заранее

@atrox

не срабатывает поиск, пишет постоянно что "По вашему запросу ничего не найдено.",

Создайте отдельную тему с вопросом и всеми подробностями.

@Andchir спасибо большое, разобрался, А можно по 2м полям сделать поиск? по название + артикул?

@atrox

А можно по 2м полям сделать поиск? по название + артикул?

Можно. Добавьте ещё одно поле

<input type="search" name="f_articul[like]" value="[[!getRequest?paramName=`f_articul.like`]]">

@Andchir А где указана страница результатов поиска?

В контент страницы "Поиск" добавляем вызов чанка: [[$page_search_results]].
А где эта страница указывается??? У меня выводится только если чанк в шаблоне указать, а как указать редирект на отдельную страницу?????? Демо версия сайта не ставится Error на 26 строчке.......

@Surf сказал Простой поиск по каталогу товаров:

В контент страницы "Поиск" добавляем вызов чанка: [[$page_search_results]].
А где эта страница указывается??? У меня выводится только если чанк в шаблоне указать, а как указать редирект на отдельную страницу??????

В форме указывается.

<form action="[[~11]]" method="get" role="search">

11 - это ID страницы результатов поиска.

Демо версия сайта не ставится Error на 26 строчке.......

Какая версия демо-сайта? Вроде в последней версии исправлено.

@Andchir Заработало=) Почему у меня результат поиска оборачивается в следущие ТЭГИ <pre class="markdown-highlight"><span style="line-height: 1.5em;">Результат поиска</span></pre>

@Surf сказал Простой поиск по каталогу товаров:

Почему у меня результат поиска оборачивается в следущие ТЭГИ <pre class="markdown-highlight"><span style="line-height: 1.5em;">Результат поиска</span></pre>

Проверяйте чанки.

Эта запись удалена!

@Andchir Это редактор Tinymce.....

А если нужен поиск по ресурсам и товарам, то как быть? у меня пока выводит только товары.

Спасибо огромное за советы , особенно за дополнительные поля с поиском . Если у кого то не работает поиск по MIGX товарам проверяйте (категория товара должна быть в настройках container !!! ) Я 3 суток потратил чтобы это понять )))) и 20 раз всё переустанавливал и заново настраивал.

Эта запись удалена!

Участник @Andchir написал в Простой поиск по каталогу товаров:

<input type="search" name="f_articul[like]" value="[[!getRequest?paramName=f_articul.like]]">

А по двум параметрам можно???

Присоединяюсь к вопросу. Как правильно записать несколько параметров???
Через запятую?
<input type="search" name="f_pagetitle[like], f_content[like]" class="form-control search-query" value="[[!getRequest?paramName=f_pagetitle.like, f_content.like]]">

так ищет только 'pagetitle'

Подскажите правильный синтаксис

@alexxwar добавить поле (селект и т.п.). Пример:

<input type="text" name="f_param1[]">

param1 - имя поля или TV.

@andchir
Большое спасибо за помощь!
Извините, все равно не совсем понял. То, что 'param1', это поля ресурса - понятно. У меня одно поле для ввода запроса (input type="search"). Нужно, чтобы поиск осуществлялся одновременно по двум (или более) полям - 'pagetitle' и 'content' . Если ставить селект, то нужно будет выбирать поле по которому искать (если, я правильно понял), этот вариант не подходит, нужно искать сразу по нескольким полям в одном input-е . Вот я такую, видимо неправильную, конструкцию и изобразил))
<input type="search" name="f_pagetitle[like], f_content[like]" class="form-control search-query" value="[[!getRequest?paramName=f_pagetitle.like, f_content.like]]">
Но, смысл - это несколько полей в одном input -e. Я очень слаб в js, если можно, напишите пример для двух полей.

И еще, нашел досадный момент, поиск даже на демо-сайте http://demo.modx-shopkeeper.ru/. работает только по товарам MIGX, по ресурсам MODX не ищет. Товар 'Asus Pariatur 4840', да и все в этом разделе, не находит. Подскажите, как исправить...

Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.