Поиск материалов по тегам Seo.Pro
Добрый вечер.
Раньше я юзал отдельный плагин, чтобы выводить теги материала и искать материалы по тегу. Что-то меня немного раздражало, что я заполняю поле keywords у Seo.Pro и ещё в отельное поле пишу ключевые слова для поиска (поле на основе tvSuperSelect). И решил, что нужно оставить поле keywords и организовать поиск по ключевым словам именно на основе поля keywords плагина Seo.Pro.
Код вывода тега материала для текущей страницы:
Код страницы «Материалы по тегу»:
По большому счёту заметку я создал для себя, чтобы сохранилась работа, но может кому-то понадобиться…
Раньше я юзал отдельный плагин, чтобы выводить теги материала и искать материалы по тегу. Что-то меня немного раздражало, что я заполняю поле keywords у Seo.Pro и ещё в отельное поле пишу ключевые слова для поиска (поле на основе tvSuperSelect). И решил, что нужно оставить поле keywords и организовать поиск по ключевым словам именно на основе поля keywords плагина Seo.Pro.
{set $keywords = ('seoPro.keywords' | placeholder) | esplit}
{if ('tv.get_tags' | resource) == '1' && $keywords.0}
<hr>
<div class="row justify-content-center">
{foreach $keywords as $keyword}
{include "tpl.Tag" tag=$keyword}
{/foreach}
</div>
{/if}
Шаблон tpl.Tag:<a class="chip m-2" href="{76 | url}?tag={$tag}">#{$tag}</a>
, где тут 76 id ресурса страницы «Материалы по тегу».Код страницы «Материалы по тегу»:
{if $.get['tag']?}
<div class="row">
{set $tag = $.get['tag']}
{'!pdoPage@Pagination' | snippet : [
'element' => 'pdoResources',
'parents' => '29, 6, 28',
'sortby' => 'publishedon',
'sortdir' => 'DESC',
'leftJoin' => '{ "SeoPro": { "class": "seoKeywords", "on": "modResource.id = SeoPro.resource" } }',
'select' => '{ "modResource": "*", "SeoPro": "keywords" }',
'where' => '{ "published:=": "1", "AND:SeoPro.keywords:LIKE": "%, '~ $tag ~',%", "OR:SeoPro.keywords:LIKE": "%,' ~ $tag ~ ',%", "OR:SeoPro.keywords:LIKE": "%, ' ~ $tag ~ '", "OR:SeoPro.keywords:LIKE": "%' ~ $tag ~ ',", "OR:SeoPro.keywords:LIKE": "% ' ~ $tag ~ ' %" }',
'groupby' => 'modResource.id',
'limit' => ('mobile' | mobiledetect ? '10' : '20'),
'pageLimit' => ('mobile' | mobiledetect ? '3' : '5'),
'pageVarKey' => 'material',
'pageNavVar' => 'material.nav',
'tplWrapper' => '@INLINE <ul>{$output}</ul>',
'tpl' => '@INLINE <li><a href="{$uri}"><span class="grey-text mt-4 mb-3">{$pagetitle}</span></a></li>',
'showLog' => 0,
]?: 'Ресурсов по данному тегу не найдено'}
</div>
{'material.nav' | placeholder}
{else}
Укажите тег для выборки документов
{/if}
, где в parents указывается в каких ресурсах (папках) искать.По большому счёту заметку я создал для себя, чтобы сохранилась работа, но может кому-то понадобиться…
Комментарии: 8
@Дмитрий лишнее убери
'where' => '{ "published:=": "1", "AND:SeoPro.keywords:LIKE": "%, '~ $tag ~',%", "OR:SeoPro.keywords:LIKE": "%,' ~ $tag ~ ',%", "OR:SeoPro.keywords:LIKE": "%, ' ~ $tag ~ '", "OR:SeoPro.keywords:LIKE": "%' ~ $tag ~ ',", "OR:SeoPro.keywords:LIKE": "% ' ~ $tag ~ ' %" }',
Если это не вопрос, а заметка, то лучше перенести в соответствующий раздел
Рейтинга у человека не хватает, чтобы в другие разделы размещать ?♂️
Автор, похоже, не в курсе, что именно в запросе LIKE заменяет %. Подсказка: выборка очень не оптимальна.
Более того, при совпадении ключевого слова будут выведены и неопубликованные ресурсы. Ну и создание отдельного чанка tpl.Tag при использовании Fenom тоже под большим вопросом.
Так что рано это куда-то размещать.
Более того, при совпадении ключевого слова будут выведены и неопубликованные ресурсы. Ну и создание отдельного чанка tpl.Tag при использовании Fenom тоже под большим вопросом.
Так что рано это куда-то размещать.
Ну извините)
Как умею)
В where я указал «published:=»: «1». Почему будет выводить неопубликованные?
Как умею)
В where я указал «published:=»: «1». Почему будет выводить неопубликованные?
Потому что далее идёт OR.
И то, что перед этим есть AND не имеет никакого значения, потому что условие не вложенное.
Можно сделать &showLog=`1` и посмотреть, что получается в результате.
И то, что перед этим есть AND не имеет никакого значения, потому что условие не вложенное.
Можно сделать &showLog=`1` и посмотреть, что получается в результате.
И как условие сделать вложенным?
A && (B || C || D || E)
?
A && (B || C || D || E)
?
Немного не по теме, но другой не нашел.
Как вывести все ключевые слова из поля seoPro.keywords ресурса в другом ресурсе?
Пытаюсь вывести так, но никаких данных не подгружается
Как вывести все ключевые слова из поля seoPro.keywords ресурса в другом ресурсе?
Пытаюсь вывести так, но никаких данных не подгружается
{'!pdoResources'|snippet:[
'tpl' => '',
'resources' => $id,
'parents' => $id,
'loadModels'=>'seopro',
'select'=>'{
"modResource":"*",
"kwords": "kwords.keywords AS keywords"
}',
'leftJoin'=>'{
"kwords":{
"class":"seoKeywords",
"on":"modResource.id = kwords.resource"
}
}',
]}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.