Не работает WHERE в pdoReources

Привет! Помогите пожалуйста, уже второй день никак не могу решить одну задачу
Есть много ресурсов, через ТВ поля (или migx) им нужно задать поле для последующей фильтрации

На странице куда нужно вывести отфильтрованные результаты делаю так: (пока в шаблоне)
[[pdoResources? 
&parents=`6`
&depth=`0`
&tpl=`tourCategoryTpl`
&includeTVs=`price,images,countries`
&processTVs=`price,images,countries`
&sortdir=`ASC`
&where=`{"country" : "Kazakhstan"}`
&showlog=`1`
]]
tourCategoryTpl:
<li class="col-lg-6 col-sm-6">
	<div class="shop-item">
		<div class="thumbnail">
			<!-- product image(s) -->
			<a class="shop-item-image" href="[[+uri]]">
				<img class="img-responsive" src="
				               	[[!getImageList?
                                    &tvname=`images`
                                    &tpl=`@CODE:[[+image]]`
                                    &limit=`1`
                                    &docid=`[[+id]]`
                                ]]
				" alt="[[+title]]" />
			</a>
			<!-- /product image(s) -->
		</div>
		
		<div class="shop-item-summary text-center">
			<h2>[[+pagetitle:ellipsis=`30`]]</h2>

			<!-- price -->
			<div class="shop-item-price">
				[[+price]]
			</div>
			<!-- /price -->
		</div>
	</div>

</li>

TV countries (migx)
[
{"caption":"Страны", "fields": [
    {"field":"country","caption":"Страна"}
]}
]

Пробовал создавать и обычный TV со списком и мультивыбором, но не работает никак.
Ресурсы которые надо выводить находятся в коллекции, я хочу насоздавать еще ресурсов с соответствующими параметрам фильтрации названиями, вывести их в меню и в content запихать вызовы pdoresources с разными &where=. Очень желательно, чтобы можно было в countries записывать несколько стран и эти ресурсы выводились на нужных страницах. Надеюсь, понятно объяснил. Помогите пожалуйста!
PS: кстати где показываются данные по showlog? а то я его включил а где смотреть ошибки не знаю
Algirdas
07 августа 2019, 01:35
modx.pro
712
0

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

ElenaLelo
07 августа 2019, 09:52
+1
Migx и список это json строки, &where=`{«country»: «Kazakhstan»}` работать не будет, так как в тв поле хранится строка, а не опция: значение. Выборку нужно делать в getImageList или писать свой сниппет, где у ресурсов запрашивается мигкс поле, происходит декодинг из json в массив, выборка по параметру и потом вывод того, что подошло.Хотя я не уверена, мб какое то решение и есть
    Algirdas
    07 августа 2019, 20:08
    0
    Да можно и не через migx а через обычный TV, с Listbox Multi-Select. В таком случае можно через pdoResources? Как это сделать на getImageList я что-то не пойму. Он же выводит какой-то один ресурс, а не много. Или его вызывать из pdoResources?
    ElenaLelo
    07 августа 2019, 10:29
    +1
    Вам осталось подправить под нужды. Тв поле
    <?php
    $res = $modx->getObject('modResource', 8164); //получаем ресурс 
    $migx = $res->getTVValue('TV.option'); //получаем мигкс тв поле
    $items = $modx->fromJSON($migx); //мигкс json
    $output = array();
    foreach($items as $item) { //проходим циклом по мигксу
      $output[] = $item['option'].' — '.$item['znach']; //записываем в массив значения мигкс полей, допишите тут if и возвращайте полученный ресурс если он прошел
    }
    return implode(PHP_EOL, $output);
      Algirdas
      07 августа 2019, 20:10
      0
      Спасибо большое, но моих знаний пока не хватает чтобы это применить (
      Я так понял это сниппет, но вот что с ним дальше делать и что подправлять — для меня загадка
      Algirdas
      07 августа 2019, 20:13
      0
      В целом задача такая: нужно на определенном ресурсе вывести определенные ресурсы, попадающие под условие. Каким образом это делать — не принципиально. Это просто я так подумал, что можно это сделать через TV. Может быть есть и более простые и правильные способы, подскажите пожалуйста. Через теги я не понял как сделать. И вроде даже где-то читал что не получится.
        ElenaLelo
        08 августа 2019, 09:23
        +1
        Что за ресурсы? Товары?
        В pdoResources выборку migx вряд ли получится сделать, можно писать where в getimagelis, тогда работать будет
          Algirdas
          08 августа 2019, 22:18
          0
          Туры. Ну, можно сказать что товары
          ElenaLelo
          08 августа 2019, 09:36
          +1
          getimagelis вставляете в чанк pdoResources, пишите в getimagelist where которое нужно, docid указываете [[+id]].
            Algirdas
            08 августа 2019, 22:17
            0
            Спасибо, попробую этот вариант. Пока решил все проще, обычный TV с листбоксом и вот такая конструкция:
            [[pdoResources?
            &parents=`6`
            &depth=`0`
            &tpl=`tourCategoryTpl`
            &includeTVs=`price,images,countries`
            &processTVs=`price,images,countries`
            &sortdir=`ASC`
            &where=`{«countries»: «kz»}`
            &showlog=`1`
            ]]
          Algirdas
          09 августа 2019, 13:32
          0
          Чота не работает блин как хотелось бы. В базе TV countries значения хранятся разделенными ||
          Как оттуда вычленить нужное? EXISTS не работает либо я не правильно пишу ((

          Такой запрос работает, но он тупо повторяет то, что записано в базе
          [[!pdoResources?
          &parents=`6`
          &depth=`0`
          &tpl=`tourCategoryTpl`
          &includeTVs=`price,images,countries`
          &processTVs=`price,images,countries`
          &sortdir=`ASC`
          &prepareTVs=`1`
          &where=`{«countries:IN»:[«kz||kg»]}`
          &showlog=`1`
          ]]
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            10