Реализация сложного поиска

Добрый день? сообщество.
Можете подсказать как реализовать сложный поиск?

— Тип контракта — раздел меню на сайте
— Страна-Регион, Вид недвижимости, life style берутся из ТВ параметра
— Цена задается диапазонами «от 0 до 499 999», «от 500 000 до 1 000 000» и т.д. (тоже из ТВ)
— Код объекта точный поиск (тоже указывается в ТВ)

Извините за наивный вопрос, но не могу понять реализацию совсем (((

Сейчас код такой:

<form action="какой_то.php" method="get">
<span style="font-size: 22px; color:#c00; text-align: center; padding-top: 0px;font-family: Helvetica;">ПОИСК</span>
  
<select name="l" id="l">
  <option value="" selected>Регион</option>
  <option value="1">Первый регион</option> 
 
</select>
<select name="c" id="c">
  <option value="" selected>Тип контракта</option>
    <option value="5">Продажа</option> 
    <option value="4">Аренда</option> 
  </select>
<select name="t" id="t">
  <option value="" selected>Вид недвижимости</option>
    <option value="32">Замок</option> 
    <option value="6">Вилла</option> 
  </select>
<select name="s" id="s">
  <option value=""  selected>Life Style</option>
  <option value="13">Море</option> 
</select>
<select name="prezzo">
  <option value="1" selected="selected">Цена</option>
  <option value="2">< 0,5 M</option>
  <option value="3">0,5 - 1 M</option>
  <option value="4">1 - 2 M</option>
  <option value="5">2 - 3 M</option>
  <option value="6">> 3 M</option>
</select> 
<label>
  Код объекта:
  <input name="r" type="text" id="r" value="" size="4">
</label> 
<label>
  <input type="submit" name="button" id="button" value="искать" style="background-color:#C00; color:#FFF">
</label>
<input name="lingua" type="hidden" id="lingua" value="6" />
</form>
Михаил Боровов
24 мая 2016, 11:29
modx.pro
3
1 482
0

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

Игорь Терентьев
24 мая 2016, 15:03
0
mSearch2
pdoResources + GET

Примерно так:
[[!pdoResources?
    &parents=`[[!#GET.parent]]`
    &tpl=`test`
]]
    Михаил Боровов
    24 мая 2016, 15:07
    0
    Игорь, извините, не совсем понял.
    Как этот выбор реализовать формой?
      Игорь Терентьев
      24 мая 2016, 17:25
      0
      <form action="[[~[[*id]]]]" method="get">
      
      [[!#GET.parent]] - parent это name поля
      Вам нужно использовать &where пример:
      [[!pdoResources?
      	&includeTVs=`manuf,diag,color`
      	&where=`{
      		"manuf":"Sony",
      		"diag:IN":[65,85],
      		"color:IN":["black","gray"]
      	}`
      ]]
        Михаил Боровов
        24 мая 2016, 19:43
        0
        Извините, так и не понял.
        Выводить форму поиска понятно

        <form action="[[~[[*id]]]]" method="get">
        ...
        </form>
        А вот как
        <select name="l" id="l">
          <option value="" selected>Регион</option>
          <option value="1">Первый регион</option> 
        </select>
        Заменить, чтобы выбирал в выпадающее меню то, что в ТВ указано?
        и потом в запрос попадало…
    Михаил Боровов
    25 мая 2016, 02:59
    0
    В общем с поиском разобрался таким образом — руками прописал все варианты выбора (благо их немного), подставил контексты (сайт мультиязычный), получился такой код:

    <form action="result.html" method="get" id="search_old">
    <span>ПОИСК</span>
      
    <select name="tv|region2" id="l">
      <option value="apulia,lake_como,lake_garda,lake_maggiore,campania,calabria,emilia_romagna,lazio,liguria,lombardy,marche,piedmont,sardinia,sicily,tuscany,umbria,veneto"selected>Страна-Регион</option>
      <option value="apulia">[[%apulia]]</option> 
      <option value="lake_como">[[%lake_como]]</option> 
      <option value="lake_garda">[[%lake_garda]]</option> 
      <option value="lake_maggiore">[[%lake_maggiore]]</option> 
      <option value="campania">[[%campania]]</option> 
      <option value="calabria">[[%calabria]]</option> 
      <option value="emilia_romagna">[[%emilia_romagna]]</option> 
      <option value="lazio">[[%lazio]]</option> 
      <option value="liguria">[[%liguria]]</option> 
      <option value="lombardy">[[%lombardy]]</option> 
      <option value="marche">[[%marche]]</option> 
      <option value="piedmont">[[%piedmont]]</option> 
      <option value="sardinia">[[%sardinia]]</option> 
      <option value="sicily">[[%sicily]]</option> 
      <option value="tuscany">[[%tuscany]]</option> 
      <option value="umbria">[[%umbria]]</option> 
      <option value="veneto">[[%veneto]]</option> 
    </select>
    
    <select name="parent" id="l">
      <option value="8,9" selected>Тип контракта</option>
      <option value="8">Аренда</option> 
      <option value="9">Продажа</option> 
    </select>
    
    <select name="tv|prop_type2" id="l">
      <option value="castle,palace,agritourism,villa,hotel,land,loft,shop,farmhouse,restaurant,countryhouse,terraced_house,chalet,apartment" selected>Тип недвижимости</option>
      <option value="castle">[[%castle]]</option> 
      <option value="palace">[[%palace]]</option> 
      <option value="agritourism">[[%agritourism]]</option> 
      <option value="villa">[[%villa]]</option> 
      <option value="hotel">[[%hotel]]</option> 
      <option value="land">[[%land]]</option> 
      <option value="investment">[[%investment]]</option> 
      <option value="loft">[[%loft]]</option> 
      <option value="shop">[[%shop]]</option> 
      <option value="farmhouse">[[%farmhouse]]</option> 
      <option value="restaurant">[[%restaurant]]</option> 
      <option value="countryhouse">[[%countryhouse]]</option> 
      <option value="terraced_house">[[%terraced_house]]</option> 
      <option value="chalet">[[%chalet]]</option> 
      <option value="apartment">[[%apartment]]</option> 
    </select>
    
    <select name="tv|position2" id="l">
      <option value="golf,ski_resorts,town,historical_centers,seaside,lakes,hills" selected>Расположение</option>
      <option value="golf">[[%golf]]</option> 
      <option value="ski_resorts">[[%ski_resorts]]</option> 
      <option value="town">[[%town]]</option> 
      <option value="historical_centers">[[%historical_centers]]</option> 
      <option value="seaside">[[%seaside]]</option> 
      <option value="lakes">[[%lakes]]</option> 
      <option value="hills">[[%hills]]</option> 
    </select>
    
    <select name="tv|price" id="l">
      <option value="0,10000000000" selected>Цена</option>
      <option value="0,500000"><500K</option> 
      <option value="500000,1000000">0.5M - 1M</option> 
      <option value="1000000,2000000">1M - 2M</option> 
      <option value="2000000,3000000">2M - 3M</option> 
      <option value="3000000,10000000000">>3M</option> 
    </select>
    
    <label>
    Код объекта:
    <input type="text" size="4" value="" id="r" name="tv|code">
    </label>
    
    <label>
    <input type="submit" id="button" value="искать" style="background-color:#C00; color:#FFF">
    </label>
    </form>
    Все вроде работает.

    Если не выбрали ничего — смог вывести только способом перечисления всех вариантов:
    <option value="golf,ski_resorts,town,historical_centers,seaside,lakes,hills" selected>Расположение</option>

    Вопросы:
    1. Как сделать, чтобы если посетитель ничего не выбрал, то не прописывать все варианты в value =""?
    2. Как, если не заполнено поле «Код объекта», исключить из строки get-запроса (...?tv|region2=apulia&parent=8&tv|prop_type2=castle&tv|position2=golf&tv|price=0,500000&tv|code=), лишнюю приставку &tv|code= в конце?
      Михаил
      25 мая 2016, 05:37
      1
      0
      В ручную конечно мне кажется это не то. Вот так же можно фильтр организовать:
      [[!mFilter2?
              				&element=`msProducts`
              				&sortby=`rand()`
              				&parents=`2`
              				&includeThumbs=`246x246`
              				&showHidden=`1`
              				&limit=`12`
              				&cache=`1`
              				&suggestions=`1`
              				&includeTVs=`tonality,base_curve,optical_power`
              				&filters=`
              				resource|parent:categories,
              				ms|article,
              				msoption|opticalpower,
              				msoption|color,
              				msoption|size,
              				ms|vendor:vendors,
              				
              				tv|tonality,
              				tv|base_curve,
              				
              				`
              				
              				&suggestionsRadio=`parent:categories,tv|optical_power,ms|article`
              				
              				&tplOuter=`tpl.mFilter2.outer.lens`
              				&tpls=`tpl.Product.grid,tpl.Product.list`
              				
              				&tplFilter.outer.default=`tpl.mFilter2.filter.outer.checkbox.resource`
              				&tplFilter.row.default=`tpl.mFilter2.filter.checkbox.resource`
              				
              				&tplFilter.outer.resource|parent=`tpl.mFilter2.filter.outer.resource`
                              &tplFilter.row.resource|parent=`tpl.mFilter2.filter.row.resource`
                              
                              &tplFilter.outer.msoption|opticalpower=`tpl.mFilter2.filter.outer.resource`
                              &tplFilter.row.msoption|opticalpower=`tpl.mFilter2.filter.row.resource`
                              
                              &tplFilter.outer.ms|article=`tpl.mFilter2.filter.outer.resource`
                              &tplFilter.row.ms|article=`tpl.mFilter2.filter.row.resource`
              				
              				
              				&tplPageWrapper=`@INLINE [[+first]][[+prev]][[+pages]][[+next]][[+last]]`
              				&tplPageFirst=``
              				&tplPageLast=``
              				&tplPageFirstEmpty=``
              				&tplPageLastEmpty=``
              				&tplPagePrevEmpty=``
              				&tplPageNextEmpty=``
              				]]
      Тут и выборка по ТВ и выпадающие и прочее.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6