Поиск материалов по тегам 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"
            }
        }',
    ]}            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.