pdoResources Fenom Where LIKE

Нужно вывести все ресурсы, у которых id содержится в доп. поле текущего ресурса. Без where выводятся все ресурсы. С where ничего не выводится.
Вывожу ресурсы через pdoResources на странице ресурса. В шаблоне прописано:
{'!pdoResources' | snippet : [
                'parents' => 1616,
                'includeTVs' => 'inner-image,color',
                'tplWrapper' => '@FILE chunks/offices_napravleniya_wrapper.tpl',
                'tpl' => '@FILE chunks/offices_napravleniya_item.tpl',
                'sortby' => 'menuindex',
                'sortdir' => 'ASC',
                'where' => "[\"id LIKE '%"~$_modx->resource.officenapravleniya~"%'\"]"
 ]}
В БД у данного ресурса TV «officenapravleniya» такое значение 1621||1618||1617||1622
Пробовал:
  • 'where' => "[\«id LIKE '%»~$_modx->resource.officenapravleniya~"%'\"]"
  • 'where' => '{«id:LIKE»: "%$_modx->resource.officenapravleniya%"}'
  • 'where' => '{«id:LIKE»: "%'~$_modx->resource.officenapravleniya~'%"}'
  • 'where' => 'id==%' ~ $_modx->resource.officenapravleniya~'%'

Сергей Самусев
25 апреля 2019, 19:20
modx.pro
996
0
Поблагодарить автора Отправить деньги

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

Андрей
25 апреля 2019, 21:07
0
'where' => [
    'id:LIKE' => '%'~$_modx->resource.officenapravleniya~'%'
]
    Сергей Самусев
    25 апреля 2019, 21:09
    0
    неа...((
      Андрей
      25 апреля 2019, 21:16
      0
      А что показывает если просто $_modx->resource.officenapravleniya на странице вывести?

      {set $ids = $_modx->resource.officenapravleniya | split : '||'}
      
      'where' => [
      	'id:IN' => $ids
      ]
      Можно еще добавить параметр 'showLog' => 1 и посмотреть в чем проблема
        Сергей Самусев
        25 апреля 2019, 21:29
        0
        {$_modx->resource.officenapravleniya} выдаёт 1621161816171622
          Андрей
          25 апреля 2019, 21:40
          0
          В настройках TV поставьте разделитель запятую например.
            Сергей Самусев
            25 апреля 2019, 21:43
            0
            Там множественный выбор, если ставить запятую вместо || выдаёт только один вариант

            @EVAL $output = $modx->runSnippet('pdoResources',array('parents'=> '1616', 'tpl'=>'@CODE:[[+pagetitle]]==[[+id]]', 'hideContainers'=>'1', 'outputSeparator'=>'||'));
            return '' . $output;
              Андрей
              25 апреля 2019, 21:52
              0
              Во вкладке Параметры вывода или как-то так называется, там можно указать разделитель.
          Сергей Самусев
          25 апреля 2019, 21:29
          0
          LOG
          Added where condition: id:IN(1621161816171622), modResource.parent:IN(1616,1617,1618,1619,1620,1621,1622), modResource.published=1, modResource.deleted=0
      Сергей Самусев
      25 апреля 2019, 22:00
      0
      Теперь {$_modx->resource.officenapravleniya} выдаёт 1618,1617,1621? но where не работает
        Сергей Самусев
        25 апреля 2019, 22:01
        0
        а через
        {set $ids = $_modx->resource.officenapravleniya | split : '||'}
        'where' => [
          'id:IN' => $ids
        ]
        только первый ресурс из нужных
          Сергей Самусев
          25 апреля 2019, 22:02
          0
          Сори)) {set $ids = $_modx->resource.officenapravleniya | split: ','} Заработало. Спасибо за помощь.
            Сергей Шлоков
            26 апреля 2019, 12:50
            +2
            Буду груб. Если Вы используете MODX, то изучите хотя бы базовые понятия работы с MySql. Как может придти в голову запрос поиска по id с LIKE? Я не говорю про тот же FIND_IN_SET. Не все знают про эту функцию. Но надо же знать, что id — это первичный индекс. По нему запрос с равенством и оператором IN отрабатывает мгновенно. А с LIKE Вы заставляете MySql бежать по всем строкам и проверять вхождение. А если строк будет сотни тысяч или миллион? Вроде же не новичок…
              Иван Бочкарев
              25 ноября 2019, 09:05
              1
              0
              Можно так:
              {set $material = $_modx->resource.project_material | split:'||'}
              {foreach $material as $item}
                  {set $filter[] = 'project_material=='~$item}
              {/foreach}
              
              {'!pdoResources' | snippet : [
                'parents' => 7,
                'limit' => 2,
                'tvPrefix' => '',
                'tvFilters' => $filter,
                'showLog' => 0,
                'sortby' => 'RAND()',
                'includeTVs' => 'project_image,project_price,project_area,project_material,project_size,project_bedrooms,project_bathrooms,location',
                'tpl' => '@FILE chunks/projects/project.tpl',
              ]}
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                13