MODX Revo - Создание поиска для блога

Содержание:
  1. Создание системы поиска для блога
  2. Комментарии

На этом уроке мы создадим для нашего блога, который работает под управлением CMF MODX Revolution, систему поиска с помощью компонента mSearch.

Создание системы поиска для блога

  1. Скачаем и установим компонент "mSearch".

    MODX - установка компонента mSearch
  2. Проиндексируем страницы нашего сайта.

    Индексация существующих страниц блога осуществляется посредством нижеприведённого кода, который необходимо добавить в любой шаблон.

    [[!mSearch?
      &indexer=`1`
      &offset=`1`
      &limit=`500`
    ]]
    

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

    Например, вставим вышеприведённый код в содержимое главной страницы:

    MODX - индексирование ресурсов с помощью сниппета mSearch

    Откроем главную страницу нашего блога и увидим результат индексирования ресурсов сниппетом mSearch:

    MODX - результат индексирования ресурсов с помощью сниппета mSearch

    После этого данный код можно удалить из содержимого главной страницы.

    Во время исполнения данный сниппет проиндексирует первые 500 ресурсов нашего блога. Первый параметр (indexer) указывает на то, что сниппет mSearch будет выполнять не поиск, а индексацию ресурсов блога. Второй и третий параметр (offset и limit) задаёт ограничение на выборку ресурсов, которые необходимо проиндексировать. Если на Вашем блоге содержится больше чем 500 ресурсов (например, 1200), то производить их индексацию придётся в несколько запусков:

    MODX - индексирование большого количества ресурсов

    Индексацию ресурсов достаточно выполнить только один раз, после установки компонента mSearch. Ресурсы, которые будут добавляться уже после установки компонента mSearch индексировать с помощью сниппета не надо. Они будут индексироваться автоматически с помощью плагина, который идёт в комплекте с данным компонентом.


  3. Изменим название плейсхолдеру total в сниппете mSearch. Это необходимо сделать для того, чтобы избежать конфликтов, т.к. данное имя плейсхолдера также использует компонент Tickets.

    MODX - редактирование сниппета mSearch
  4. Создадим ресурс (страницу) "Поиск" и запомним его идентификатор (id). В дальнейшем он нам пригодится для создания формы поиска.

    MODX - создание ресурса Search
  5. Создадим шаблон "Поиск".

    MODX - создадим шаблон поиск
    • Скопируем код из любого другого шаблона (например, блог). Удалим из него лишний код, т.е. оставим только код, формирующий основную структуру веб-страницы.

      <!DOCTYPE html>
      <html lang="ru">
      [[$chunk.head]]
      <body>
        <div class="container"> 
          <div class="row">
            [[$chunk.header]]
            [[$chunk.navbar]]
            <div class="main-block col-md-8">
              <h1 class="h2 page-header">[[*pagetitle]]</h1>
              
            </div>
            <div class="col-md-4">
            </div>
          </div>
        </div>
        [[$chunk.footer]]
      </body>
      </html>
      

    • Разработаем форму поиска:

      MODX - форма поиска
      <!-- Контейнер, который будет содержать форму -->
      <div class="well">
        <!-- Форма поиска -->
        <!-- 14 - это id ресурса, в котором будут отображаться результаты поиска -->
        <form action="[[++site_url]][[~14]]" method="get">
          <div class="row">
            <div class="form-group col-md-10">
              <input id="inputSearch" type="text" class="form-control" name="query" maxlength="50" value="[[+mse.query]]" placeholder="Найти">
            </div>
            <button type="submit" class="btn btn-primary"><i class="glyphicon glyphicon-search"></i> Поиск</button>
          </div>
        </form>
      </div>
      

    • Разработаем код, который будет выводить результаты поиска с помощью сниппетов pdoResources и mSearch:

      [[!pdoResources?
        &parents=`2`
        &showHidden=`1`
        &resources=`[[!mSearch? &parents=`2` &showHidden=`1` &returnIds=`1`]]`
        &limit=`10`
        &tpl=`searchTpl`
        &tplWrapper=`@INLINE <h2 class="h3 page-header">Результаты поиска по запросу: [[+mse.query]] ([[+mse.total]])</h2> [[+mse.total:isnot=`0`:and:isnot=``:then=`[[+output]]`]]`
      ]]
      

      где:

      • parents=`2` - указывает сниппету mSearch на то, что поиск необходимо производить только в ресурсах, имеющих в качестве родителя ресурс с id=2.

      • &showHidden=`1` - указывает сниппетам на то, что необходимо выбирать ресурсы, скрытые для меню.

      • returnIds=`1` - указывает сниппету mSearch на то, что необходимо возвращать вместо оформленных результатов идентификаторы (id) ресурсов.

      • tpl=`searchTpl` - указываем сниппету pdoResources на то, что в качестве шаблона для вывода каждого найденного результата (ресурса) необходимо использовать чанк searchTpl.

      • limit=`10` - указывает сниппету pdoResources на то, что необходимо ограничить количество результатов выборки до 10.

      • resources - указывает сниппету pdoResources на то, что необходимо использовать ресурсы предоставленные сниппетом mSearch.

      • tplWrapper - шаблон, который предназначен для оборачивания результатов работы сниппета pdoResources. Код [[+mse.total... выполняет следующее: он проверяет, не является ли значение плейсхолдера [[+mse.total]] равным нулю и пустой строке. Если это условие выполняется, то выводятся результаты работы сниппета с помощью плейсхолдера [[+output]]. В противном случае ничего не выводится. Данное условие необходимо из-за того, что когда сниппет mSearch не находит не один подходящий ресурс, то он выводит все ресурсы сайта.

      • [[+mse.total]] - плейсхолдер, который содержит число найденных ресурсов сниппетом mSearch.

      • [[+mse.query]] - плейсхолдер, который содержит текст запроса.


    • Итоговый код шаблона "Поиск":

    • <!DOCTYPE html>
      <html lang="ru">
      [[$chunk.head]]
      <body>
        <div class="container"> 
          <div class="row">
            [[$chunk.header]]
            [[$chunk.navbar]]
            <div class="main-block col-md-8">
              <h1 class="h2 page-header">[[*pagetitle]]</h1>
              <div class="well">
                <form action="[[++site_url]][[~14]]" method="get">
                  <div class="row">
                    <div class="form-group col-md-10">
                      <input id="inputSearch" type="text" class="form-control" name="query" maxlength="50" value="[[+mse.query]]" placeholder="Найти">
                    </div>
                    <button type="submit" class="btn btn-primary"><i class="glyphicon glyphicon-search"></i> Поиск</button>
                  </div>
                </form>
              </div>
              [[!pdoResources?
               &parents=`2`
               &showHidden=`1`
               &resources=`[[!mSearch? &parents=`2` &showHidden=`1` &returnIds=`1`]]`
               &limit=`10`
               &tpl=`searchTpl`
               &tplWrapper=`@INLINE <h2 class="h3 page-header">Результаты поиска по запросу: [[+mse.query]] ([[+mse.total]])</h2> [[+mse.total:isnot=`0`:and:isnot=``:then=`[[+output]]`]]`
              ]]
            </div>
            <div class="col-md-4">
            </div>
          </div>
        </div>
        [[$chunk.footer]]
      </body>
      </html>
      

  6. Создадим чанк searchTpl со следующим содержимым:

    MODX - шаблон, на основе которого выводится каждый найденный результат
    <div class="panel panel-default">
      <div class="panel-body">
        <a href="[[++site_url]][[~[[+id]]]]">[[+pagetitle]]</a>
      </div>
      <div class="panel-footer">[[+description]]</div>
    </div>
    

  7. Установим ресурсу (странице) "Поиск" шаблон "Поиск".

    MODX - установка ресурсу Поиск шаблон Поиск
  8. Создадим форму "Поиск" для остальных страниц блога.

    • Создадим чанк "search" со следующим содержимым:

      <div class="last-comment">
        <h4 class="page-header text-center">Поиск</h4>
        <form action="[[++site_url]][[~14]]" method="get">
          <div class="input-group">
            <input type="text" class="form-control" name="query" maxlength="50" value="" placeholder="Найти">
            <span class="input-group-btn">
              <button type="submit" class="btn btn-default">Найти</button>
            </span>
          </div>
        </form>
      </div>
      

    • Добавим чанк "search" в необходимые шаблоны нашего блога:

      MODX - добавление чанка search в шаблон Пост

Результаты урока представим в виде следующих изображений:

MODX - форма поиска на странице поста MODX - страница для поиска и отображения результатов поиска MODX - найденные страницы по запросу

Комментарии: 58

Nik
Nik
mSearch похоже больше нет, есть mSearch2
Александр Мальцев
Александр Мальцев
Значит с modstore.pro удалили этот пакет.
Но его можно загрузить и установить вручную.
Ссылка для загрузки msearch-1.5.2-pl.transport.zip.
Словари для mSearch можно скачать по этой ссылке.
Сергей
Сергей
Здравствуйте, Александр!
А вы не могли бы написать, как установить mSearch1 и словари для него вручную? Или дать ссылку на инструкцию?
Александр Мальцев
Александр Мальцев
Привет! Тут всё очень просто.
1. Переходите в «Менеджер пакетов» (Пакеты -> Установщик). Нажимаете на кнопку «Загрузить пакеты», выбираете «Загрузить пакет с компьютера». Далее нажимаете на кнопку «Выберите файл(ы)» и указываете на архив с проектом. Кликаете на кнопку «Загрузить». После этого найдите пакет «msearch» в списке и нажмите на кнопку «Установить».
2. Извлеките словари в каталог \core\components\msearch\phpmorphy\dicts
Алексей
Алексей
Подскажите, а возможно ли организовать поиск по другой таблице (не modResource, а к примеру, таблица migxdb:`ShopContent`, model :`shop` ), по примеру PdoTools: &loadModels=`shop`
&class=`ShopContent`?

Возможно ли это? Если нет, посоветуйте другой компонент.

Спасибо.
Alexey
Alexey
Здравствуйте!
Как я понял поиск происходит по по пэкиджу 'modResource'.
Подскажите, нельзя ли добавить дополнительную таблицу для поиска (типа MIGXdb)?
Павел
Павел
Добрый день шеф!
Вопрос такой могу я скачать и установить mSearch2 вот от сюда https://github.com/SoftAlex/mSearch2. Если да то как.
Заранее спасибо!
Александр Мальцев
Александр Мальцев
Необходимо просто собрать транспортный пакет. Например, положить его в корень сайта и открыть страницу в браузере:
ПРОТОКОЛ://ИМЯ_ДОМЕНА/mSearch2/_build/build.transport.php
После запуска этого скрипта он будет лежать в /core/packages.
Павел
Павел
спасибо! все сработало надо было только ssh включить на хосте!

А как сделать так чтоб в mSearch2, как у Вас в примере с mSearch врапер заработал, а то в верхний блок не отображается. Вот этот участок не работает
&tplWrapper=`@INLINE <h2 class="h3 page-header">Результаты поиска по запросу: [[+mse.query]] ([[+mse.total]])</h2> [[+mse.total:isnot=`0`:and:isnot=``:then=`[[+output]]`]]`
мой пример
[[!pdoPage?
&element=`mSearch2`
&parents=`6`
&hideContainers=`1`
&wrapIfEmpty=`1`
&limit=`2`
&resources=`[[!mSearch2? &parents=`6` &showHidden=`1` &returnIds=`1`]]`
&tplWrapper=`chankWrapperSearchTpl`
&tpl=`chankSearchTpl`
]]

[[!+page.nav]]
чанк chankSearchTpl
<div class="sisea-result">
	 <h3>[[+idx]]. <a href="[[+uri]]" title="[[+longtitle]]">[[+pagetitle]]</a></h3>[[+weight]]
	[[+intro]]
</div>
чанк chankWrapperSearchTpl
<h2 class="h3 page-header">Результаты поиска по запросу: <b>[[+query]]</b> ([[+total]])</h2> [[+total:isnot=`0`:and:isnot=``:then=`[[+output]]`]]
Чанкт самой формы, стили не подтягиваются. Выдает стили по умолчанию mSearch2.
<div class="block">
  <form class="sisea-search-form" action="[[~16]]" method="get">
    <div class="input-group">
      <input type="text" name="query" placeholder="Поиск по сайту" value="[[+mse2_query]]" />
      <span class="input-group-btn">
        <button class="btn btn-default" type="submit"><i class="fa fa-search"></i></button>
      </span>
    </div>
  </form>
</div>
Заранее спасибо за помощь и за Ваш сайт!
Павел
Павел
Шеф подскажите пожалуйста как сделать вывод в поиске «Всего результатов» как у Вас на сайте

у меня получился вот такой вызов, но все время показывает двойку

<h2 class="h3 page-header">Результаты поиска по запросу: <b><mark>[[+mse2_query]]</mark></b> ([[+total]])</h2> [[+query]]

<div id="pdopage">
  <div class="rows">
    [[!pdoPage?
    &element=`mSearch2`
    &limit=`2`
    &parents=`6`
    &hideContainers=`1`
    &resources=`[[!mSearch2:default=`0`? returnIds=`1` &limit=`0`]]`
    &showHidden=`0`
    &introCutAfter=`110`
    &tpl=`chankSearchTpl`
    &ajaxMode=`default`
    &htagOpen=`<mark>`
    &htagClose=`</mark>`
  ]]
Александр Мальцев
Александр Мальцев
Не используйте в параметре &tplWrapper @INLINE, а создайте чанк mSearch2Wrapper и поместите в него необходимое содержимое.
[[!mSearch2?
  &tplWrapper=`mSearch2Wrapper`
  ...
]]
Пример содержимого чанка:
Всего: [[+total]]
[[+output]]
Если вы будете использовать @INLINE, то парсер MODX сначала разберёт все внутренние теги вызова mSearch2 (в данном случае плейсхолдеры). А уже только потом mSearch2. В итоге эти плейсхолдеры будут иметь значения, установленные не текущим вызовом mSearch2, а какие-то другие.
Павел
Павел
Шеф спасибо большое все ОК!!!
Kira
Kira
Здравствуйте

Слово, по которому осуществляется поиск, находится в новости в теге [[!+modx.user.id:gt=`0`:then=`….
И в результате поиска данная новость не попадает в список найденных. Такой вариант поиска вообще неосуществим или можно сделать какие-нибудь настройки?
Александр Мальцев
Александр Мальцев
Здравствуйте. Вы же слово отображаете только авторизированным пользователям, и не хотите, чтобы оно было доступно гостям. А в поиске хотите использовать, как-то это не логично.

Если всё же необходимо, то можете, конечно, создать дополнительное поле. С помощью этого поля указать набор слов, по которым должна искаться дополнительно каждая из статей.
После этого включить этого поле в mSearch:
&includeTVs=`1`
&includeTVList=`mytv`
Но и не забыть переиндексировать все ресурсы с включением этого поля.
Evgenij
Evgenij
Александр, здравствуйте!
Я как понимаю mSearch больше нет, т.к. сейчас есть платный mSearch2 и он для больших сайтов-магазинов.
А что посоветуете для небольших сайтов, бесплатное и где посмотреть доступную инструкцию по использованию?
Заранее благодарю.
Александр Мальцев
Александр Мальцев
Здравствуйте.
Проект расположен на GitHub по адресу: github.com/bezumkin/mSearch
В этой статье приведены основные моменты по использованию mSearch. Если вам этой информации мало, то можете её ещё поискать в интернете на других ресурсах.

Какой из них использовать вам решать. Если вас всем устраивает mSearch, то используйте его. Если нет, то используйте mSearch2. mSearch2 не обязательно для больших сайтов, его можно использовать для любых проектов.
Evgenij
Evgenij
Спасибо!
Verteletsky
Verteletsky
Данный урок с версией mSearch сильно отличается от mSearch2?
Александр Мальцев
Александр Мальцев
Да, немного отличается в использовании.
Аноним
Аноним
А какую версию mSearch вы используете и где её можно взять?
Александр Мальцев
Александр Мальцев
mSearch2. Раньше можно было взять с github, сейчас только в магазине modstore.pro/packages/ecommerce/msearch2
Дмитрий
Дмитрий
А можно тут выложить версию которая у вас?
Александр Мальцев
Александр Мальцев
mSearch2 платная версия. Её можно только купить.
На GitHub остался старый форк mSearch2: github.com/SoftAlex/mSearch2
Дмитрий
Дмитрий
ок спс
Аноним
Аноним
Шеф, а как реализовать постраничную разбивку результатов поиска? А то получается результатов больше, чем лимит вывода)
Александр Мальцев
Александр Мальцев
С помощью pdoPage (например, по 5 штук):
[[!pdoPage? 
  &element=`pdoResources`
  &parents=`2`
  &showHidden=`1`
  &resources=`[[!mSearch? &parents=`2` &showHidden=`1` &returnIds=`1`]]`
  &limit=`5`
  &tpl=`searchTpl`
  &tplWrapper=`@INLINE <h2 class="h3 page-header">Результаты поиска по запросу: [[+mse.query]] ([[+mse.total]])</h2>[[+output]]`
]]
[[!+page.nav]]
Аноним
Аноним
Поиск работает. А вот разбивка на страницы нет. Я пытался сам через pdoPage сделать. Не получилось. Код аналогичный был, думал что-то не так делаю)
Аноним
Аноним
Шеф) что Я делаю не так?)
Александр Мальцев
Александр Мальцев
Добавь &showLog=`1` и посмотри…
Аноним
Аноним
Ничё не понимаю( вроде, нет ошибок…

Вот вызов
[[!pdoPage? 
    &element=`pdoResources`
    &parents=`-2,-3,-4,-5`
    &showHidden=`1`
    &hideContainers=`1`
    &resources=`[[!mSearch? &parents=`-2,-3,-4,-5` &showHidden=`1` &hideContainers=`1` &returnIds=`1`]]`
    &limit=`10`
    &tpl=`tpl.search`
    &tplWrapper=`@INLINE <h2>Результаты поиска по запросу: [[+mse.query]] ([[+mse.total]])</h2> 
    [[+mse.total:isnot=`0`:and:isnot=``:then=`[[+output]]`]]`
    &showLog=`1`
]]

[[!+page.nav]]

Вот лог
0.0001101: pdoTools loaded
0.0000238: xPDO query object created
0.0003519: Added selection of modResource: SQL_CALC_FOUND_ROWS `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties`
0.0007322: Processed additional conditions
0.0010219: Added where condition: modResource.id:IN(53,56,63,65,81,1,76,11,12,13), modResource.parent:IN(1,6,7,8,9,10,5,4,40,2,41,3,44,46,47,11,12,43,13,35,69,15,14,16,82,17,18,19,20,24,50,56,74,59,60,76,79,84,87,73,80,78,66,86,81,83,21,22,23,45,49,72,85,25,26,27,28,62,71,70,75,64,67,77,29,30,31,32,33,68,38,53,61,37,39,42,57,63,58,65,34,36,51,52,54,55,48), modResource.parent:NOT IN(2,3,4,5), modResource.published=1, modResource.deleted=0, modResource.isfolder=0
0.0000648: Sorted by modResource.publishedon, DESC
0.0000029: Limited to 10, offset 0
0.0003040: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`type`, `modResource`.`contentType`, `modResource`.`pagetitle`, `modResource`.`longtitle`, `modResource`.`description`, `modResource`.`alias`, `modResource`.`link_attributes`, `modResource`.`published`, `modResource`.`pub_date`, `modResource`.`unpub_date`, `modResource`.`parent`, `modResource`.`isfolder`, `modResource`.`introtext`, `modResource`.`richtext`, `modResource`.`template`, `modResource`.`menuindex`, `modResource`.`searchable`, `modResource`.`cacheable`, `modResource`.`createdby`, `modResource`.`createdon`, `modResource`.`editedby`, `modResource`.`editedon`, `modResource`.`deleted`, `modResource`.`deletedon`, `modResource`.`deletedby`, `modResource`.`publishedon`, `modResource`.`publishedby`, `modResource`.`menutitle`, `modResource`.`donthit`, `modResource`.`privateweb`, `modResource`.`privatemgr`, `modResource`.`content_dispo`, `modResource`.`hidemenu`, `modResource`.`class_key`, `modResource`.`context_key`, `modResource`.`content_type`, `modResource`.`uri`, `modResource`.`uri_override`, `modResource`.`hide_children_in_tree`, `modResource`.`show_in_tree`, `modResource`.`properties` FROM `jcvd_site_content` AS `modResource` WHERE  ( `modResource`.`id` IN (53,56,63,65,81,1,76,11,12,13) AND `modResource`.`parent` IN (1,6,7,8,9,10,5,4,40,2,41,3,44,46,47,11,12,43,13,35,69,15,14,16,82,17,18,19,20,24,50,56,74,59,60,76,79,84,87,73,80,78,66,86,81,83,21,22,23,45,49,72,85,25,26,27,28,62,71,70,75,64,67,77,29,30,31,32,33,68,38,53,61,37,39,42,57,63,58,65,34,36,51,52,54,55,48) AND `modResource`.`parent` NOT IN (2,3,4,5) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 AND `modResource`.`isfolder` = 0 )  ORDER BY modResource.publishedon DESC LIMIT 10 "
0.0007401: SQL executed
0.0001121: Total rows: 6
0.0000491: Rows fetched
0.0010729: Loaded chunk "tpl.search"
0.0073171: Returning processed chunks
0.0104201: Total time
25 952 256: Memory usage
Александр Мальцев
Александр Мальцев
Да, действительно.
Тогда попробуй:
1. Изменить значение &tplWrapper или переместить его в чанк:
&tplWrapper=`@INLINE [[+output]]`
2. Если не поможет, тогда надо смотреть чанк tpl.search. Что-то там не так…

Ещё можно удалить параметр &tpl=`tpl.search`. В этом случае он должен вывести данные (массивы) на экран.
Аноним
Аноним
1. Пробовал и так и так.
2. tpl.search довольно прост)
<div class="entry">
    <h2><a href="[[++site_url]][[+uri]]">[[+longtitle:empty=`[[+pagetitle]]`]]</a></h2>
       [[+description]]
    <div class="button"><a href="[[++site_url]][[+uri]]">Читать дальше</a></div>
</div>
<br />
Сам поиск то работает. 10 статей как положено выводятся. А вот пагинации самой почему-то нет. Хотя на странице, где выводятся статьи по хештегу, пагинация есть)

Удалял &tpl=`tpl.search`, массивы выводятся. Узрел в них вот это
[pageNavVar] => page.nav
    [pageCountVar] => pageCount
    [pageLinkScheme] => 
    [tplPage] => @INLINE <li><a href="[[+href]]">[[+pageNo]]</a></li>
    [tplPageWrapper] => @INLINE <div class="pagination"><ul class="pagination">[[+first]][[+prev]][[+pages]][[+next]][[+last]]</ul></div>
    [tplPageActive] => @INLINE <li class="active"><a href="[[+href]]">[[+pageNo]]</a></li>
    [tplPageFirst] => @INLINE <li class="control"><a href="[[+href]]">[[%pdopage_first]]</a></li>
    [tplPageLast] => @INLINE <li class="control"><a href="[[+href]]">[[%pdopage_last]]</a></li>
    [tplPagePrev] => @INLINE <li class="control"><a href="[[+href]]">«</a></li>
    [tplPageNext] => @INLINE <li class="control"><a href="[[+href]]">»</a></li>
    [tplPageSkip] => @INLINE <li class="disabled"><span>...</span></li>
    [tplPageFirstEmpty] => @INLINE <li class="disabled"><span>[[%pdopage_first]]</span></li>
    [tplPageLastEmpty] => @INLINE <li class="disabled"><span>[[%pdopage_last]]</span></li>
    [tplPagePrevEmpty] => @INLINE <li class="disabled"><span>«</span></li>
    [tplPageNextEmpty] => @INLINE <li class="disabled"><span>»</span></li>
Всем кодом, думаю, грузить тебя смысла нет?) Или подскажи как анализировать эти массивы)
Александр Мальцев
Александр Мальцев
А как же она у тебя появится?
У тебя найдено 6 записей. А ты их выводишь по 10.
Установи лимит, например 3 и проверь:
&limit=`3`
Аноним
Аноним
Я чего-то не понимаю в этой жизни) Как ты узнал, что записей 6?)
С лимитом 3, всё работает.
Тогда не пойму, как вообще работает поиск, в заголовке он ищет слово или по всему тексту) Почему записей всего 6, если
Результаты поиска по запросу: похудеть (39)
mse.total получается выдаёт 39.
Александр Мальцев
Александр Мальцев
У тебя же в логе говорится что выбрано 6 записей (Total rows: 6).
Попробуй не использовать @INLINE и вынеси код в чанк:
&tplWrapper=`mychank.tpl`
В чанке mychank.tpl:
<h2>Результаты поиска по запросу: [[+mse.query]] ([[+mse.total]])</h2> 
[[+mse.total:isnot=`0`:and:isnot=``:then=`[[+output]]`]]
Аноним
Аноним
Понял. Буду знать)
Я так пробовал) Тоже 39 выдаёт и 6 записей) С другими запросами так же, mse.total в разы больше, чем записей)
Я теперь не могу понять механизм поиска) Он же как яндекс по всему тексту ищет?)
Может поэтому и получается так, что искомое слово встречается больше раз, чем количество статей?) По несколько раз в каждой статье. И отсюда mse.total в разы больше.
Александр Мальцев
Александр Мальцев
Так не должно.
Попробуй в pdoPage добавить параметр totalVar:
&totalVar=`searchTotal`
А в параметре tplWrapper вместо [[+mse.total]] использовать
[[+searchTotal]].
Аноним
Аноним
Шеф, ты как всегда на уровне) Очередная благодарность тебе)
Можешь пояснить, почему при mse.total была такая цифра?
Александр Мальцев
Александр Мальцев
Такое ощущение, что mSearch не понимает твои минусы при выборке и выдаёт 39. А потом уже pdoResources исключает из выборки те ресурсы, которые расположены в разделах 2, 3, 4, 5. Но от этого значение mse.total не меняется, т.к. оно было получено ранее в mSearch.
Попробуй на странице вызвать данный сниппет отдельно и посмотри что он выдаст:
[[!mSearch? &parents=`-2,-3,-4,-5` &showHidden=`1` &hideContainers=`1` &returnIds=`1`]]
Тогда уже можно будет судить о результатах.
Аноним
Аноним
Сей код по поиску «похудеть» выдал мне вот это
53,56,63,65,81,1,76,11,12,13
1 это ресурс главной страницы в виде блога.
11, 12, 13 это разделы с тикетами.
Остальные сами тикеты, как раз 6 штук)
Александр Мальцев
Александр Мальцев
Это уже больше 6. А сколько ресурсов в разделах 11, 12 и 13?
Аноним
Аноним
В разделе 11 — 3 ресурса, в 12 — 2, в 13 — 2. Причём в каждом из этих ресурсов в названии есть слово «похудеть». Но они в результатах поиска не выводятся.
Вообще не понимаю как поиск работает) 6 ресурсов по поиску «похудеть» реально мало)
Александр Мальцев
Александр Мальцев
Надо, разбираться… что в каких разделах расположено и что исключается из результата.
Попробуй поставить &parents=`0` и посмотри на результат. А дальше анализируй. Должно всё выводиться OK.
Аноним
Аноним
С &parents=`0` результат тоже 6. Вообще не могу понять, как он работает. Почему нет ресурсов, которые в разделах 11, 12, 13…
Аноним
Аноним
Сделал так как написано, при нажатии на кнопку поиска идет переадресация на страницу /sidebar-page?query=hh
Куда копать?
Александр Мальцев
Александр Мальцев
На четвёртом шаге мы создавали эту страницу «Поиск» (у меня id страницы =14).
На пятом шаге в пункте «Разработаем форму поиска» мы указывали id ресурса (14), который мы создали на 4 шаге.
<form action="[[++site_url]][[~14]]" method="get">
На мой взгляд Вы скорее всего где-то перепутали на моментах, описанных мной выше. Проверьте совпадает ли у Вас идентификатор страницы «Поиск» с идентификатор в форме.
Аноним
Аноним
3. Изменим название плейсхолдеру total в сниппете mSearch. Это необходимо сделать для того, чтобы избежать конфликтов, т.к. данное имя плейсхолдера также использует компонент Tickets.
из текста не ясно, что именно нужно поменять: в тексте
Изменим название плейсхолдеру total
на картинке подчеркнут $plPrefix
Александр Мальцев
Александр Мальцев
Извините за то, что непонятно.
Красным подчёркнуто то, что необходимо добавить в код.
Это необходимо сделать для того, чтобы плейсхолдер можно было вызывать не так [[+total]] (т.к. данное имя уже занято другим компонентом), а так [[+mse.total]].
Т.е. необходимо заменить $totalVar на $plPrefix.$totalVar.
Аноним
Аноним
Здраствуте!!! Помогите пожалуйста разобраться вот с этим приложением sekFormTools. Нужен поиск с автозаполнением на сайте а с английским проблема! Есть скрипты которые вы указывали выше jquery.autocomplete.js, но хочется знать подходит это приложение или нет! Зарание спасибо!!!
Аноним
Аноним
Здравствуйте!!! Подскажите пожалуйста как можно сделать вот такой поиск здесь по базе данных, зарание благодарю!!!!!!!!!!!1
Аноним
Аноним
В поиск провайдера по адресу дома, который вы указали в качестве пример, используется скрипт jquery.autocomplete.js. Поищите на просторах интернета как его прикрутить, там есть какие то нюансы
Аноним
Аноним
А точно в коде
[[!pdoResources?
&parents=`2`
&resources=`[[!mSearch? &parents=`2` &returnIds=`1`]]`
&limit=`10`
&tpl=`searchTpl`
&tplWrapper=`@INLINE <h2 class="h3 page-header">Результаты поиска по запросу: [[+mse.query]] ([[+mse.total]])</h2> [[+mse.total:isnot=`0`:and:isnot=``:then=`[[+output]]`]]`
]]
нет ошибки? Просто с этим кодом поиск вообще ничего не находит. Но если вместо него добавить [[!mSearch? &parents=`2`]], то всё работает должным образом
Александр Мальцев
Александр Мальцев
Да, код правильный.
Данный код в отличие от Вашего позволяет настроить оформление результатов с помощью чанка searchTpl.

Найти ошибку можно следующим образом:
1. Удалить параметр &tplWrapper и проверить ещё раз.
2. Если у Вас находятся результаты, то необходимо проверить что у Вас содержит плейсхолдер +mse.total
3. Если у Вас всё равно не находятся результаты, то необходимо проверить наличие чанка searchTpl и что он содержит
Аноним
Аноним
Шеф, мне снова нужна твоя помощь) В общем, поиск по статьям не происходит. Если вбить слово «легко», которое есть в статье и её названии, то результат такой
Результаты поиска по запросу: легко (0)

Если вбить слово «способы», которое есть в названии раздела, то результат есть, но по разделу (выводит название раздела). Почему то, глубже разделов не ищет. У меня меню правда немного по другому организовано Ресурс (контейнер) и в нём уже Раздел с тикетами.
1. Если убрать &tplWrapper, то выводит и статьи и разделы.
2. Не пойму как проверить, что содержит плейсхолдер +mse.total.
3. Приведу оба кода на всякий случай, вроде, всё ровно.
[[!pdoResources?
         &parents=`-2,-3,-4,-5`
         &resources=`[[!mSearch? &parents=`-2,-3,-4,-5` &returnIds=`1`]]`
         &limit=`10`
         &tpl=`tpl.search`
         &tplWrapper=`@INLINE <h2">Результаты поиска по запросу: [[+mse.query]] ([[+mse.total]])</h2> [[+mse.total:isnot=`0`:and:isnot=``:then=`[[+output]]`]]`
]]
tpl.search
<div class="entry">
<h2><a href="[[++site_url]][[~[[+id]]]]">[[+pagetitle]]</a></h2>
[[+description]]
<div class="button"><a href="[[~[[+id]]]]">Читать дальше</a></div>
</div>
Александр Мальцев
Александр Мальцев
Интересный у тебя параметр parent. Одни исключения, а где искать?
Если нужно по всему сайту за исключением ресурсов 2, 3, 4 и 5, то тогда так:
&parents=`0,-2,-3,-4,-5`
И в параметре resources тоже самое…
Плейсхолдер mse.total содержит количество найденных записей.
Если необходимо вывести на экран что он выводит, то удали строчку:
&tpl=`tpl.search`
Аноним
Аноним
Как где) Во всех остальных ресурсах, кроме этих) Я так понял из документации) По крайней мере, у меня pdoMenu прекрасно работает с параметром &parents=`-1`, чтобы не было ссылки на главную)
Так вообще ничего не ищет, даже раздел.
&parents=`0,-2,-3,-4,-5`
Для проверки поставил так
&parents=`0`
Всё равно находит только результаты, если искомое слово входит в название раздела. Как будто глубина поиска ограничена. Такая же ситуация с картой сайта) Напишу комменту в соответствующую тему)
Александр Мальцев
Александр Мальцев
Должно работать. У меня в тестовом примере всё работает. Проверь всё внимательно.
Аноним
Аноним
Вот этот твой совет натолкнул меня на решение проблемы)
&showHidden=`1`
в параметры mSearch добавил и всё заработало)