Обычная запись where работает, но если добавить get не работает, как исправить?

Такая where
{"news-type: LIKE":"%company%"}
работает, но если допустим добавить
[[!#GET.news-type]]
{"news-type: LIKE":"%[[!#GET.news-type]]%"}
То уже не работает, или полностью сгенерироваться строку where в снипете, тоже не работает смотрел по логу

{'!pdoPage' | snippet : [
   'parents' => '[[*id]]',
   'showHidden' => '1',
   'limit' => '8',
   'depth' => '1',
   'level' => '1',
   'showLog' => '1',
   'ajaxMode' => 'default',
   'sortby' => '{ "parent":"ASC", "menuindex":"ASC" }',
   'includeTVs' => 'img,news-type',
   'templates' => '7',
   'where' => '{"news-type: LIKE":"%industry%"}',
   'tpl' => 'newsTpl',

]}
Viktor
16 января 2022, 09:42
modx.pro
112
0

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

Viktor
16 января 2022, 09:43
0
Допустим снипет просто формирует where запись без get и всё равно не работает
    Viktor
    16 января 2022, 14:49
    0
    Довольно странно проблема была в fenom сменил на стандартный шаблонизатор, и всё заработало, пздц потратил 4 дня(
    [[!pdoPage:default=`<h1>Ничего не найдено.</h1>`?
      &parents=`[[*id]]`
      &limit=`8`
      &depth=`1`
      &ajaxMode=`default`
      &tpl=`newsTpl`
      &pageLimit=`7`
      &sortby=`{ "parent":"ASC", "menuindex":"ASC" }`
      &where=`{ [[!WhereGen? &tv=`news-type` &sign=`LIKE` &get=`sort-type` &value=``]] }`
      &includeTVs=`img,news-type`
      &ajaxElemWrapper=`#pdopage`
       &ajaxElemRows=`#pdopage .rows`
      &ajaxElemPagination=`#pdopage .pagination`
      &ajaxElemLink=`#pdopage .pagination a`
     ]]
      Николай Савин
      16 января 2022, 15:01
      0
      Проблема не в fenom.
      Если уж начали переводить вызов сниппета на другой синтаксис — то очень желательно делать это полностью.
      Избавляйтесь от JSON строк внутри, от вложенных MODX тэгов
      Примерно вот так должна выглядеть ваша конструкция
      {'!pdoPage' | snippet : [
         'parents' => $_modx->resource.id,
         'showHidden' => 1,
         'limit' => 8,
         'depth' => 1,
         'level' => 1,
         'showLog' => 1,
         'ajaxMode' => 'default',
         'sortby' => ['parent' => 'ASC', 'menuindex' => 'ASC'],
         'includeTVs' => 'img,news-type',
         'templates' => '7',
         'where' => ['news-type:LIKE' => '%industry%'],
         'tpl' => 'newsTpl',
      ]}
      Я не проверял — но это корректная запись — это как минимум первый шаг к нормальной работе кода.

      Вот такая конструкция пишется вот так
      [[!#GET.news-type]]
      {$.get.news-type}
      И это выстрел себе в ногу — нельзя использовать нефильтрованные параметры в SQL запросах. Это прямая дорога к SQL инъекциям.
        Viktor
        16 января 2022, 15:16
        0
        Сколько не пытался использовать вот это не работало
        $_modx->resource.id
        поэтому поставил [[*id]], вот эта запись выдаёт белую страницу
        'where' => ['news-type:LIKE' => '%{$.get.news-type}%'],
          Николай Савин
          16 января 2022, 15:21
          +1
          Вы здесь наткнулись сразу на две проблемы

          В этой строке не нужны фигурные скобки, запускающие феном, так как вы и так внутри феном конструкции
          'where' => ['news-type:LIKE' => '%{$.get.news-type}%'],

          Но если убрать фигурные скобки — то тоже ничего хорошего не получится
          'where' => ['news-type:LIKE' => '%$.get.news-type%'],

          Здесь уже другая проблема — нельзя писать феном конструкции внутри кавычек.
          Здесь нужно соединить строки с % и get конструкцию через конкатенацию
          Вот так
          'where' => ['news-type:LIKE' => '%' ~ $.get.news-type ~ '%'],
          И тут еще третья проблема, связанная с правилами именования переменных. Проблема с дефисом. В PHP нельзя использовать дефис в именах переменных. А вот в массиве ($.get это ведь массив) можно.
          Пожалуй вот такая конструкция должна отработать корректно

          'where' => ['news-type:LIKE' => '%' ~ $.get['news-type'] ~ '%'],
            Viktor
            16 января 2022, 15:53
            0
            Заработало НО, может быть я туплю, но всего есть 3 ресурса, ваш код сортирует только по названию «industry», по названию «company» вообще не сортирует, но стоит поставить, 2 ресурса(И ПРИЭТОМ поле должно быть типом тэг) одного значения всё сортирует. Или если будет 2 новости company и 1 новость industry он будет сортировать и выводить только industry. Если поставлю два ресурса industry то оно выводит два ресурса industry а company игнорирует, со стандартным шаблонизатором таких проблем нет.
            {'!pdoPage' | snippet : [
               'parents' => $_modx->resource.id,
               'showHidden' => 1,
               'limit' => 8,
               'depth' => 1,
               'level' => 1,
               'showLog' => 1,
               'ajaxMode' => 'default',
               'sortby' => ['parent' => 'ASC', 'menuindex' => 'ASC'],
               'includeTVs' => 'img,newsType',
               'templates' => '7',
               'where' => ['newsType:LIKE' => '%' ~ $.get['sortNewsType'] ~ '%'],
               'tpl' => 'newsTpl'
            ]}
              Николай Савин
              16 января 2022, 16:10
              -1
              Это не мой код, это Ваш код.
              Я лишь подсказал как его на феном переписать. Мелкие нюансы
                Viktor
                16 января 2022, 16:10
                0
                сменил company на другое слово заработало
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          8