Параметр &where

Всем привет!
Похоже предыдущий вопрос был плохо сформулирован, ответов нет. Попробую проще:

Есть вызов ms2gallery

[[!ms2gallery?
                    &tpl=`tpl.tabs_photo`
                    &limit=`0`
                    &resources=`[[*parent]]`
                    &showLog=`1`
                ]]
Есть SQL запрос, который полностью удовлетворяет моим условиям:
SELECT *  FROM `ms2_resource_files` WHERE (`add` NOT LIKE '%65%' AND `add` NOT LIKE '') OR `add` IS NULL
Как добавить параметр where, чтобы получить тот же результат?

Ссылка на пример синтаксиса, в котором можно писать чистое SQL условие

Пытаюсь добавить для теста такое условие: &where=`[«File.add = 65»]`
Но при любом содержании перед моим условием появляется 0= и все условия не работают.
0.0006981: Added where condition: File.parent=0, File.active=1, 0=File.add = 65, modResource.id:IN(65)

С синтаксисом, в котором используются фигурные скобки пока не получается поставить такие же условия выборки.
Олег
14 марта 2017, 08:50
modx.pro
3
3 083
0

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

Илья Уткин
14 марта 2017, 13:06
1
+1
Вам надо использовать сниппет pdoResources. В нём возможно выбрать картинки с помощью параметров loadModels и class. И в нём уже параметр where будет работать так как надо (только не забудьте добавить в него поля active, parent, чтобы для каждой картинки выбирать только оригинал и не выбирать неактивные картинки).

Кроме того, заметьте, что условие `add` NOT LIKE '%65%' исключит и записи, у которых будут указаны, например, такие числа: 165, 653, 1065 и пр.

И вообще, так как компонент платный, можете написать в техподдержку на сайте modstore.pro. Думаю, вам помогут составить правильный запрос.
    Олег
    14 марта 2017, 14:11
    0
    Благодарю!
    Я видел, что &where применяется для ms2Gallery, потому не подумал, что нужно использовать другой сниппет.

    Кроме того, заметьте, что условие `add` NOT LIKE '%65%' исключит и записи, у которых будут указаны, например, такие числа: 165, 653, 1065 и пр.

    Верно, поставили такую задачу, что некоторые изображения не должны выводиться на определенных страницах. Потому в поле «add» идет перечисление страниц, где не должны показываться эти изображения.

    И вообще, так как компонент платный, можете написать в техподдержку на сайте modstore.pro. Думаю, вам помогут составить правильный запрос.
    Я боюсь, что достал Василия с подобными вопросами :) Было уже около трех обращений насчет этого компонента.
      Илья Уткин
      14 марта 2017, 14:30
      1
      +1
      Ну раз компонент действительно куплен официально, попробую помочь.

      Вот такой код правильно будет выводить картинки?

      [[pdoResources?
        &loadModels=`ms2gallery`
        &class=`msResourceFile`
        &tpl=`tpl.tabs_photo`
        &sortby=`{ "msResourceFile.rank":"ASC" }`
        &limit=`0`
        &where=`[
            { "active":1, "parent":0, "resource_id":25 },
            [
                {"add:NOT LIKE":"%65%", "OR:add:IS":null },
                { "add:NOT LIKE":"", "OR:add:IS":null }
            ]
          ]`
        &showLog=`1`
      ]]

      И по поводу ID-шников — я имел ввиду, что в ресурсе (65) НЕ будут выведены картинки, у которых в поле add будет указано, например: 165, 653, 1065
        Олег
        14 марта 2017, 16:49
        0
        Ого, этот способ много интереснее моего!
        Конечный вариант кода выглядит так:

        [[!pdoResources?
                                  &loadModels=`ms2gallery`
                                  &class=`msResourceFile`
                                  &tpl=`@INLINE: 
                                    <a href="/assets/images/resources/[[*parent]]/800x536/[[+file]]" data-fancybox="gallery" class="item fancybox swiper-slide" rel="phototabs" data-caption="[[+name]]">
                                        <img src="/assets/images/resources/[[*parent]]/150x130/[[+file]]" alt="[[+name]]" title="[[+name]]">
                                    </a>`
                                  &sortby=`{ "msResourceFile.rank":"ASC" }`
                                  &limit=`0`
                                  &where=`[
                                      { "active":1, "parent":0, "resource_id":[[*parent]] }, {"add:NOT LIKE":"%|[[*id]]|%", "OR:add:LIKE":"", "OR:add:IS":null }
                                    ]`
                                  &showLog=`1`
                                ]]
        Подскажите, пожалуйста, что это за чудный вариант синтаксиса? Где про него можно почитать? Я правильно понял, что второй уровень квадратных скобок это аналог AND (… OR ...)?
        &where=`[
              { "active":1, "parent":0, "resource_id":25 },
              [
                  {"add:NOT LIKE":"%65%", "OR:add:IS":null },
                  { "add:NOT LIKE":"", "OR:add:IS":null }
              ]
            ]`
        Ну раз компонент действительно куплен официально, попробую помочь.
        Безусловно, я почти с самого начала проталкиваю покупку платных дополнений при создании сайта.
          Илья Уткин
          15 марта 2017, 09:07
          +3
          Это не синтаксис — это обычный JSON. Он преобразуется в коде сниппета в массив и передаётся в xPDO. xPDO объединяет все элементы через AND. Вложенность преобразует в скобки. Если находит префикс OR, объединяет через OR вместо AND.
            Василий Наумкин
            15 марта 2017, 12:22
            +1
            А на Fenom можно и вовсе сразу массив задавать, без JSON =)
      Олег
      14 марта 2017, 15:43
      0
      Используя pdoresources смог решить проблему так:
      [[!pdoResources?
                                  &loadModels=`ms2gallery`
                                  &parents=`0`
                                  &resources=`[[*parent]]`
                                  &limit=`0`
                                  &tpl=`@INLINE:
                                  <a href="/assets/images/resources/[[*parent]]/800x536/[[+file]]" data-fancybox="gallery" class="item fancybox swiper-slide" rel="phototabs" data-caption="[[+name]]">
                                      <img src="/assets/images/resources/[[*parent]]/150x130/[[+file]]" alt="[[+name]]" title="[[+name]]">
                                  </a>`
                                  &leftJoin=`{
                                  "File": {
                              			"class":"msResourceFile"
                              			,"alias":"File"
                              			,"on": "File.resource_id = '[[*parent]]' AND File.path = '[[*parent]]/' AND (File.add LIKE '' OR File.add IS NULL OR File.add NOT LIKE '%[[*id]]%')"
                              		}
                                  }`
                                  &select=`{
                                  "File" : "*"
                                  }`
                              ]]
      Выглядит очень криво на мой взгляд, но лучше ничего не придумал.
      Благодарю за подсказку! Иначе дальше бы мучался с ms2gallery
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7