Вывод похожих статей c помощью тегов

Добро, подскажите пожалуйста,

Пытаюсь реализовать вывод похожих статей c помощью тегов (TV поле — Авто-метка).
Если указывать 1 тег в TV поле в создаваемом ресурсе а также в искомых ресурсах — то работает.
Если перечисление тегов через запятую то — НЕ работает.

Подскажите как &where запрос исправить? или может есть альтернативы снипеты / плагины

[[!pdoResources? 
    &parents=`0` 
    &limit=`10` 
    &select=`{"modResource":"uri,pagetitle,menutitle"}` 
    &includeTVs=`tags`
    
    &where=`{"tags":"[[*tags]]"}`
    
    &tpl=`@INLINE — <a href="[[+uri]]">[[+menutitle:default=`[[+pagetitle]]`]]</a>`
    &outputSeparator=`
`
    &sortby=`RAND()` 
    &showLog=`1`
]]
// Лог если несколько тегов - не выводит не чего. 
0.0003128: pdoTools loaded
0.0000610: xPDO query object created
0.0010691: Included list of tvs: tags
0.0007489: leftJoined modTemplateVarResource as TVtags
0.0003490: Added selection of modResource: SQL_CALC_FOUND_ROWS `uri`, `pagetitle`, `menutitle`
0.0000191: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.tags`
0.0000930: Replaced TV conditions
0.0000579: Processed additional conditions
0.0009470: Added where condition: `TVtags`.`value`=nod32,3dmax, modResource.published=1, modResource.deleted=0
0.0000470: Replaced TV conditions
0.0003021: Sorted by RAND(), DESC
0.0000088: Limited to 10, offset 0
0.0004950: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `modResource`.`uri`, `modResource`.`pagetitle`, `modResource`.`menutitle`, IFNULL(`TVtags`.`value`, '') AS `tv.tags` FROM `modx_site_content` AS `modResource` LEFT JOIN `modx_site_tmplvar_contentvalues` `TVtags` ON `TVtags`.`contentid` = `modResource`.`id` AND `TVtags`.`tmplvarid` = 5 WHERE  ( `TVtags`.`value` = 'nod32,3dmax' AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 )  ORDER BY RAND() DESC LIMIT 10 "
0.0016038: SQL executed
0.0001750: Total rows: 0
0.0000150: Rows fetched
0.0000379: Prepared and processed TVs
0.0000019: Returning processed chunks
0.0063808: Total time
17 301 504: Memory usage
вот доступ пофиксить:
s5073.h5.modhost.pro/manager/
s5073
stNN2YgWzoCL
tvset
13 апреля 2016, 23:00
modx.pro
5
3 291
0

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

Илья Уткин
14 апреля 2016, 12:25
1
+1
&where=`{"tags:LIKE":"%[[*tags]]%"}`
    tvset
    14 апреля 2016, 20:54
    0
    хм…
    работает — если имеются на других ресурсах по нескольку тегов.
    А если на редактируемой странице несколько тегов то не выводит.

    У меня вариант делает все наоборот:
    &where=`{"tags:IN":["xleb","saxap"]}`
    На редактируемой странице — выводит все наведенное с тегами.
    А если на искомых ресурсах то не пашет.

    чот запарился :(
    можт есть готовые снипеты плагины?
    tvset
    15 апреля 2016, 05:39
    0
    кароче вот кастыльное решение:

    [[!pdoResources?
        &parents=`0`
        &depth=`1`
        &limit=`5`
        &select=`{"modResource":"uri,pagetitle,menutitle"}`
        &tpl=`@INLINE — <a href="[[+uri]]">[[+menutitle:default=`[[+pagetitle]]`]]</a>`
        &tvFilters=`[[!getTagFilter? &tags=`[[*tags]]`]]`
        &outputSeparator=`
    `
        &sortby=`RAND()`
        &showLog=`1`
    ]]
    снипет getTagFilter:
    $tags = explode(',', $tags);
    $tagstr = '';
    foreach ($tags as $k=>$tag){
        if($k == "'.end($tags).'") {
           $tagstr .= 'tags==%'.$tag.'%';
        }else{
           $tagstr .= '||tags==%'.$tag.'%';
        }
        
    }
    echo  $tagstr;
      Andrey
      14 апреля 2018, 16:54
      0
      Привет!

      Круто работает! Есть ньюанс, в вывод может попасть та же самая статья, которую сейчас читаешь… Как ее убрать из фильтра?

      Это можно отловить, когда статей мало при тестировке 4-5 статьи
        tvset
        18 апреля 2018, 15:53
        0
        на текущий момент юзаю getRelated, работает хорошо…
      Сергей Шлоков
      16 апреля 2016, 10:53
      +1
      Есть вот такой вариант.
        tvset
        16 апреля 2016, 23:13
        0
        спасибо.
        в качестве некоторого примера тоже подойдет.
          Сергей Шлоков
          17 апреля 2016, 08:16
          0
          Я почему для примера это привёл. Вариант с LIKE имеет свою специфику — он ищет подстроку! Т.е. если надо найти тэг auto, он найдет и super-auto и automoto и т.д.
        Павел Гвоздь
        17 апреля 2016, 14:55
        1
        +1
        Вот так это делается с tvSuperSelect и Fenom:

        <h4>Похожие записи:</h4>
        {var $tags = $_modx->runSnippet('tvssTags', [
            'id' => $_modx->resource.id,
            'tv' => '17',
            'tpl' => '@INLINE [[+tag]]',
        ])}
        {$_modx->runSnippet('tvssTickets', [
            'tv' => '17',
            'tags' => $tags,
            'parents' => 0,
            'limit' => 4,
        ]) ?: 'Похожих ресурсов не найдено'}

        А это на нативном синтаксисе MODX Revo:
        <h4>Похожие записи:</h4>
        [[!tvssTickets?
            &tv=`17`
            &tags=`[[!tvssTags?id=`[[*id]]`&tv=`17`&tpl=`@INLINE [[+tag]]`]]`
            &parents=`0`
            &limit=`4`
        ]]
          Павел Гвоздь
          18 апреля 2016, 14:28
          0
          Я забыл о параметре &outputSeparator… Вот так будет правильно:

          Fenom:
          <h4>Похожие записи:</h4>
          {var $tags = $_modx->runSnippet('tvssTags', [
              'id' => $_modx->resource.id,
              'tv' => '17',
              'tpl' => '@INLINE [[+tag]]',
              'outputSeparator' => '||',
          ])}
          {$_modx->runSnippet('tvssTickets', [
              'tv' => '17',
              'tags' => $tags,
              'parents' => 0,
              'limit' => 4,
          ]) ?: 'Похожих ресурсов не найдено'}

          Стандартный синтаксис:
          <h4>Похожие записи:</h4>
          [[!tvssTickets?
              &tv=`17`
              &tags=`[[!tvssTags?id=`[[*id]]`&tv=`17`&tpl=`@INLINE [[+tag]]`&outputSeparator=`||`]]`
              &parents=`0`
              &limit=`4`
          ]]
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          10