Умный поиск в simplesearch

Есть допустим 3 категории на сайте, где есть ресурсы, можно ли в одно поле для поиска ввести одно значение и передать его для поиска в 3 разных сниппета simplesearch или в один, но чтобы он искал отдельно в каждой категории и потом отдельно, но на одной странице вывел результаты поиска, в разных шаблонах.
Андрей
15 января 2018, 17:23
modx.pro
1
4 569
0

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

Андрей
16 января 2018, 11:41
1
+2
У simpleSearch есть параметр ids, можете вызвать 3 сниппета и указать в нем разные категории.

Можно с помощью pdoPage сделать.

Форма с поиском
<form action="/search/" mathod="get">
	<input name="search" value="{$.get.search | escape}">
	<button>Найти</button>
</form>

Результаты
{set $category1 = '!pdoPage' | snippet : [
	'parents' => 0 //тут нужная категория
	'includeContent' => 1,
	'tpl' => '@INLINE {$pagetitle}',
	'where' => [
		'pagetitle:LIKE' => '%'~ $.get.search | escape ~'%',
		'OR:introtext:LIKE' => '%'~ $.get.search | escape ~'%',
		'OR:content:LIKE' => '%'~ $.get.search | escape ~'%'
	] | toJSON
]}

{if $category1?}
	<div>В каткгории 1 найдено:</div>
	{$category1}
{/if}
    Андрей
    16 января 2018, 20:22
    0
    Круть! Работает. С этой стороны я бы не догадался подойти. Спасибо!
      Андрей
      17 января 2018, 09:08
      0
      Еще вопрос по работе с TV
      добавил в выборку TV параметры, по аналогии
      'includeTVs' => 'Adr, NameReal, URL',
      но ничего не выводится
      и как прописать в условии поиска поиск по TV параметрам?
      'OR:introtext:LIKE' => '%'~ $.get.search | escape ~'%',
        Андрей
        17 января 2018, 09:26
        0
        По идее так должно работать

        'OR:Adr:LIKE' => '%'~ $.get.search | escape ~'%',
        'OR:NameReal:LIKE' => '%'~ $.get.search | escape ~'%',
        'OR:URL:LIKE' => '%'~ $.get.search | escape ~'%',

        Можно добавить параметр showLog => 1 и посмотреть почему не выводится.
          Андрей
          17 января 2018, 10:02
          0
          в моем вопросе было 2 подвопроса, я видимо их недостаточно четко выделил.
          1. как вывести TV параметры при поиске по pagetitle например. То есть сам поиск работает, pagetitle выводится, а TV параметра этого же ресурса — нет
          2. да, поиск по самим TV парметрам
          по логу все верно, насколько я могу судить
          .0003102: pdoTools loaded
          0.0000761: xPDO query object created
          0.0009470: Included list of tvs: Adr, NameReal, URL
          0.0004930: leftJoined modTemplateVarResource as TVadr
          0.0004148: leftJoined modTemplateVarResource as TVnamereal
          0.0003688: leftJoined modTemplateVarResource as TVurl
          0.0005469: 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`, `content`, `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.0000148: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.Adr`
          0.0000100: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.NameReal`
          0.0000091: Added selection of modTemplateVarResource: IFNULL(`value`, 'нет') AS `tv.URL`
          0.0000210: Replaced TV conditions
          0.2391658: Processed additional conditions
          0.2410922: Added where condition: pagetitle:LIKE=%авто%, OR:content:LIKE=%авто%, modResource.id:NOT IN(999,1002,1001), modResource.parent:IN(998,999,1001,1002,1067,1068,1069,1070,1599,1641,1642,1643,1644,1645,3701,3702,3703,3704,3705,3706,3707,3708,3709,3710,3711,3712,3713,3714,3715,3716,3755,3756,3757), modResource.published=1, modResource.deleted=0
          0.0000241: Replaced TV conditions
          0.0002000: Sorted by modResource.pagetitle, ASC
          0.0000050: Limited to 10, offset 0
          0.0057361: 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`.`content`, `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`, IFNULL(`TVtstadr`.`value`, '') AS `tv.TstAdr`, IFNULL(`TVtstnamereal`.`value`, '') AS `tv.TstNameReal`, IFNULL(`TVtstmcc`.`value`, '') AS `tv.TstMCC`, IFNULL(`TVtsturl`.`value`, 'нет') AS `tv.TstURL` FROM `LdfDfd3mc_site_content` AS `modResource` LEFT JOIN `LdfDfd3mc_site_tmplvar_contentvalues` `TVtstadr` ON `TVtstadr`.`contentid` = `modResource`.`id` AND `TVtstadr`.`tmplvarid` = 5 LEFT JOIN `LdfDfd3mc_site_tmplvar_contentvalues` `TVtstnamereal` ON `TVtstnamereal`.`contentid` = `modResource`.`id` AND `TVtstnamereal`.`tmplvarid` = 6 LEFT JOIN `LdfDfd3mc_site_tmplvar_contentvalues` `TVtstmcc` ON `TVtstmcc`.`contentid` = `modResource`.`id` AND `TVtstmcc`.`tmplvarid` = 7 LEFT JOIN `LdfDfd3mc_site_tmplvar_contentvalues` `TVtsturl` ON `TVtsturl`.`contentid` = `modResource`.`id` AND `TVtsturl`.`tmplvarid` = 8 WHERE  ( `modResource`.`pagetitle` LIKE '%авто%' OR `modResource`.`content` LIKE '%авто%' AND `modResource`.`id` NOT IN (999,1002,1001) AND `modResource`.`parent` IN (998,999,1001,1002,1067,1068,1069,1070,1599,3756,3757) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 )  ORDER BY modResource.pagetitle ASC LIMIT 10 "
          0.0270789: SQL executed
          0.0057619: Total rows: 102
          0.0001559: Rows fetched
          0.0121310: Prepared and processed TVs
          0.0090630: Loaded "modChunk" with name "SmartSearchTST.tpl"
          0.0431590: Compiled Fenom chunk with name "modchunk/14"
          0.0529652: Returning processed chunks
          0.3491061: Total time
          16 252 928: Memory usage
          вывожу TV также как
          {$adr}
            Баха Волков
            17 января 2018, 10:47
            +1
            Документация, tvPrefix

            либо так

            {$tv.adr}

            либо укажите tvPrefix пустым

            'tvPrefix' => ''
            
            {$adr}
            в будущем указывайте пустой tpl и увидите массив с плейсхолдерами, а с ним уже можно танцевать
              Андрей
              17 января 2018, 11:15
              0
              'tvPrefix' => ''
              точно же!
        Андрей
        03 февраля 2018, 12:33
        0
        Пытаюсь вывести 2 категории вместе
        {set $category1 = '!pdoPage' | snippet : [
        	'parents' => 0 //тут нужная категория
        	'includeContent' => 1,
        	'tpl' => '@INLINE {$pagetitle}',
        	'where' => [
        		'pagetitle:LIKE' => '%'~ $.get.search | escape ~'%',
        		'OR:introtext:LIKE' => '%'~ $.get.search | escape ~'%',
        		'OR:content:LIKE' => '%'~ $.get.search | escape ~'%'
        	] | toJSON
        ]}
        
        {if $category1?}
        	<div>В каткгории 1 найдено:</div>
        	{$category1}
        {/if}
        
        {set $category2 = '!pdoPage' | snippet : [
        	'parents' => 10 //тут нужная категория
        	'includeContent' => 1,
        	'tpl' => '@INLINE {$pagetitle}',
        	'where' => [
        		'pagetitle:LIKE' => '%'~ $.get.search | escape ~'%',
        		'OR:introtext:LIKE' => '%'~ $.get.search | escape ~'%',
        		'OR:content:LIKE' => '%'~ $.get.search | escape ~'%'
        	] | toJSON
        ]}
        
        {if $category2?}
        	<div>В каткгории 1 найдено:</div>
        	{$category2}
        {/if}
        но второй вывод дублирует первый, хотя значения parents разные и во втором parents точно нет таких ресурсов.
          Андрей
          04 февраля 2018, 09:49
          0
          Попробуйте вместо pdoPage указать pdoResources, возможно конфликтуют 2 pdoPage.
            Андрей
            04 февраля 2018, 11:42
            0
            без разницы, такое ощущение что он вообще не учитывает
            'parents' => 10
            у меня была ошибка, там не было запятой, но это ничего не изменило. пробовал id родителя и в кавычки заключать — результат одинаковый. даже если я меняю id родителя — все равно выводятся те же самые ресурсы.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        10