Вывод похожих статей c помощью тегов
Добро, подскажите пожалуйста,
Пытаюсь реализовать вывод похожих статей c помощью тегов (TV поле — Авто-метка).
Если указывать 1 тег в TV поле в создаваемом ресурсе а также в искомых ресурсах — то работает.
Если перечисление тегов через запятую то — НЕ работает.
Подскажите как &where запрос исправить? или может есть альтернативы снипеты / плагины
s5073.h5.modhost.pro/manager/
s5073
stNN2YgWzoCL
Пытаюсь реализовать вывод похожих статей 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
Комментарии: 10
&where=`{"tags:LIKE":"%[[*tags]]%"}`
хм…
работает — если имеются на других ресурсах по нескольку тегов.
А если на редактируемой странице несколько тегов то не выводит.
У меня вариант делает все наоборот:
А если на искомых ресурсах то не пашет.
чот запарился :(
можт есть готовые снипеты плагины?
работает — если имеются на других ресурсах по нескольку тегов.
А если на редактируемой странице несколько тегов то не выводит.
У меня вариант делает все наоборот:
&where=`{"tags:IN":["xleb","saxap"]}`
На редактируемой странице — выводит все наведенное с тегами. А если на искомых ресурсах то не пашет.
чот запарился :(
можт есть готовые снипеты плагины?
кароче вот кастыльное решение:
[[!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;
Привет!
Круто работает! Есть ньюанс, в вывод может попасть та же самая статья, которую сейчас читаешь… Как ее убрать из фильтра?
Это можно отловить, когда статей мало при тестировке 4-5 статьи
Круто работает! Есть ньюанс, в вывод может попасть та же самая статья, которую сейчас читаешь… Как ее убрать из фильтра?
Это можно отловить, когда статей мало при тестировке 4-5 статьи
на текущий момент юзаю getRelated, работает хорошо…
Есть вот такой вариант.
спасибо.
в качестве некоторого примера тоже подойдет.
в качестве некоторого примера тоже подойдет.
Я почему для примера это привёл. Вариант с LIKE имеет свою специфику — он ищет подстроку! Т.е. если надо найти тэг auto, он найдет и super-auto и automoto и т.д.
Вот так это делается с tvSuperSelect и Fenom:
А это на нативном синтаксисе MODX Revo:
<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`
]]
Я забыл о параметре &outputSeparator… Вот так будет правильно:
Fenom:
Стандартный синтаксис:
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`
]]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.