Тема: SEO-ссылки в фильтре

Как сделать в фильтре активную гиперссылку с анкором соответствующим названию параметра фильтра?

Пример:
- исходная страница https://kupioboi.ru/catalog/oboi/
- целевая страница https://kupioboi.ru/catalog/oboi/rodina-brenda_rossiya/
Сейчас так (без анкора)

<li style="order: 1;" class="filter_block">
                        <input type="checkbox" name="pf[1][]" value="1" class="cb" id="cb_1_1">
                        <label for="cb_1_1"><a>Россия</a></label>
</li>

Нужно так

<li style="order: 1;" class="filter_block">
                        <input type="checkbox" name="pf[1][]" value="1" class="cb" id="cb_1_1">
                        <label for="cb_1_1><a href="/catalog/oboi/rodina-brenda_rossiya/">Россия</a></label>
</li>

Или как-то так

<li style="order: 1;" class="filter_block">
<a href="/catalog/oboi/rodina-brenda_rossiya/">
                        <input type="checkbox" name="pf[1][]" value="1" class="cb" id="cb_1_1">
                        <label for="cb_1_1"><span>Россия</span></label>
</a>
</li>

Повысить оценку Понизить оценку

Re: SEO-ссылки в фильтре

А что Вам мещает в получивщийся адрес дописать ?pf[1][]=1 ?

3 Отредактировано Владимир 1916 (06.11.2019 11:50:02)

Re: SEO-ссылки в фильтре

Закусило Александр пишет:

А что Вам мещает в получивщийся адрес дописать ?pf[1][]=1 ?

если правильно понял, Вы предлагаете сделать так

<label for="cb_{$prop.id}_{$value@iteration}">
            <a href="/catalog/oboi/?pf[1][]=1/">{$value}</a></label>  

НО, так формируется ссылка <a href="/catalog/oboi/?pf[1][]=1/">Россия</a>
которая соответственно дает переход на https://kupioboi.ru/catalog/oboi/?pf[1][]=1/ - то есть на дубль страницы, а не на https://kupioboi.ru/catalog/oboi/rodina-brenda_rossiya/

Повысить оценку Понизить оценку

Re: SEO-ссылки в фильтре

Ну вы привели выше пример с pf[1][] поэтому для него я и дал это.

{* Получаем текущую категорию *}
{$maindir=$product->getMainDir()}
{$url=$maindir->getUrl()} {* Получаем нужный адрес *}


{* Получаем характеристики внутри цикла перебора характеристик *}
{foreach $product.properties as $data}
                <div class="propertyGroup">
                    <h2><span>{$data.group.title|default:t("Характеристики")}</span></h2>
                    <table class="kv">
                        {foreach from=$data.properties item=property}
                            {assign var=prop_value value=$property->textView()}
                                <tr>
                                    <td class="key"><span>{$property.title}</span>
                                        {if $property.description}
                                            <a class="popover-button"
                                               data-toggle="popover"
                                               tabindex="0"
                                               data-trigger="manual"
                                               data-content="{$property.description}"> ? </a>
                                        {/if}
                                    </td>
                                    <td class="value"><a href="{$url}{$property.alias}_{$prop_value}/">{$prop_value}</a> {$property.unit}</td> {* Ссылка тут *}
                                </tr>
                        {/foreach}
                    </table>
                </div>
            {/foreach}

Примерно так...

Re: SEO-ссылки в фильтре

У меня другой вывод в шаблоне

{* Шаблон для фильтра с типом - список *}

<div class="filter filter-checkbox rs-type-multiselect {if $filters[$prop.id] || $prop.is_expanded}open{/if}">
    <a class="expand">
        <span class="right-arrow"><i class="fa fa-angle-down {if $basefilters.isnum != '' || (is_array($param.expanded) && in_array('num', $param.expanded))} rotated{/if}" aria-hidden="true"></i></span>
        <p>{$prop.title} {if $prop.unit}({$prop.unit}){/if}
            <span class="filter-remove rs-remove hidden" title="{t}Сбросить выбранные параметры{/t}"><i class="fa fa-times-circle" aria-hidden="true"></i></span></p>
    </a>
    <div class="detail">

        <ul class="filter-checkbox_selected rs-selected list-unstyled hidden"></ul>
        <div class="filter-checkbox_container">
            <ul class="filter-checkbox_content list-unstyled rs-content">
                {$i = 1}
                {foreach $prop->getAllowedValues() as $key => $value}
                    <li style="order: {$i++};" class="filter_block {if isset($filters_allowed_sorted[$prop.id][$key]) && ($filters_allowed_sorted[$prop.id][$key] == false)}disabled-property{/if}">
                        <input type="checkbox" {if is_array($filters[$prop.id]) && in_array($key, $filters[$prop.id])}checked{/if} name="pf[{$prop.id}][]" value="{$key}" class="cb" id="cb_{$prop.id}_{$value@iteration}">
                        <label for="cb_{$prop.id}_{$value@iteration}">
                        
                            <a href="{$prop.alias}_ЗНАЧЕНИЕ/">{$value}</a>
                        
                    </li>
                {/foreach}
            </ul>
        </div>
    </div>
</div>

Что вместо ЗНАЧЕНИЯ вставить нужно? <a href="{$prop.alias}_ЗНАЧЕНИЕ/">{$value}</a>

Повысить оценку Понизить оценку

Re: SEO-ссылки в фильтре

А что это за фильтр и на какой странице он применяется.

Re: SEO-ссылки в фильтре

Это обычный фильтр по характеристикам https://kupioboi.ru/catalog/oboi/
Платная тема Яркая.

Повысить оценку Понизить оценку

8 Отредактировано Закусило Александр (07.11.2019 11:44:24)

Re: SEO-ссылки в фильтре

Ясно. Ну у меня на сайте это сделано. Вот так.

<ul class="filter-checkbox_content rs-content">
                {$values_objects=$prop->getAllowedValuesObjects()}
                {$i = 1}
                {foreach $prop->getAllowedValues() as $key => $value}
                    <li style="order: {$i++};">
                        {$data=$filters[$prop.id]}
                        {if !empty($data)}
                            {foreach $data as $k=>$v}
                                {$data[$k]=urldecode($v)}
                            {/foreach}
                        {/if}
                        <input type="checkbox" {if is_array($filters[$prop.id]) && in_array($key, $filters[$prop.id])}checked{/if} name="pf[{$prop.id}][]" value="{$key}" class="cb" id="cb_{$prop.id}_{$value@iteration}">
                        <label for="cb_{$prop.id}_{$value@iteration}"><a href="{str_replace("//", "/", $category->getUrl())}{if $prop.alias}{$prop.alias}{else}{$prop.id}{/if}_{if $values_objects[$key].alias}{$values_objects[$key].alias}{else}{$values_objects[$key].id}{/if}/">{$value}</a></label>
                    </li>
                {/foreach}
            </ul>

Re: SEO-ссылки в фильтре

Все получилось, спасибо!

Повысить оценку Понизить оценку

Re: SEO-ссылки в фильтре

Закусило Александр пишет:

Ясно. Ну у меня на сайте это сделано. Вот так.

<ul class="filter-checkbox_content rs-content">
                {$values_objects=$prop->getAllowedValuesObjects()}
                {$i = 1}
                {foreach $prop->getAllowedValues() as $key => $value}
                    <li style="order: {$i++};">
                        {$data=$filters[$prop.id]}
                        {if !empty($data)}
                            {foreach $data as $k=>$v}
                                {$data[$k]=urldecode($v)}
                            {/foreach}
                        {/if}
                        <input type="checkbox" {if is_array($filters[$prop.id]) && in_array($key, $filters[$prop.id])}checked{/if} name="pf[{$prop.id}][]" value="{$key}" class="cb" id="cb_{$prop.id}_{$value@iteration}">
                        <label for="cb_{$prop.id}_{$value@iteration}"><a href="{str_replace("//", "/", $category->getUrl())}{if $prop.alias}{$prop.alias}{else}{$prop.id}{/if}_{if $values_objects[$key].alias}{$values_objects[$key].alias}{else}{$values_objects[$key].id}{/if}/">{$value}</a></label>
                    </li>
                {/foreach}
            </ul>

есть проблемка

<a href="{str_replace("//", "/", $category->getUrl())}{if $prop.alias}{$prop.alias}{else}{$prop.id}{/if}_{if $values_objects[$key].alias}{$values_objects[$key].alias}{else}{$values_objects[$key].id}{/if}/">{$value}</a>

выдает ошибку 404, нет такой страницы.

это происходит из-за вот этого куска {str_replace("//", "/", $category->getUrl())}
я его убрал, оставив <a href="{if $prop.alias}{$prop.alias}{else}{$prop.id}{/if}_{if $values_objects[$key].alias}{$values_objects[$key].alias}{else}{$values_objects[$key].id}{/if}/">{$value}</a>
тогда работает, по при каждом следующем нажатии заново добавляет алиас. Как-то так kupioboi.ru/catalog/oboi/rodina-brenda_rossiya/rodina-brenda_rossiya/rodina-brenda_rossiya/

может у Вас вверху еще какой-то кусок кода есть, необходимый, чтобы {str_replace("//", "/", $category->getUrl())} работала?

Повысить оценку Понизить оценку

Re: SEO-ссылки в фильтре

Нет, я Вам весь код дал, смотрите внимательнее что происходит у Вас.

Re: SEO-ссылки в фильтре

Попробовал тоже самое на другом сайте вставить. сайт перекосило.
И вот такая абракадабра в исходном коде вылезла

<ul class="filter-checkbox_content list-unstyled rs-content">
                                                                    <li style="order: 1;">
                                                                        <input type="checkbox"  name="pf[403][]" value="598" class="cb" id="cb_403_1">
                        <label for="cb_403_1"><a href="<div style='background-color: #f3f3f3;'>
          <div><b>Исключение - "Call to a member function getUrl() on null"</b></div>
          <table valign='top'><tr><td>Код ошибки:</td><td>0</td></tr>
          <tr><td>Тип ошибки:</td><td>Error</td></tr>
          <tr><td>Файл:</td><td>/var/www/admin/www/fabrika-lukov.ru/cache/smarty/compile/60f38b0841e0bb7d53fe40c576264dae88cbb776_0.rs.list.my.tpl.php</td></tr>  
          <tr><td>Строка:</td><td>96</td></tr>  
          <tr><td>Стек вызова:</td><td><pre>#0 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_resource_base.php(128): content_5dc99fa5330220_43365559(Object(Smarty_Internal_Template))
#1 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_compiled.php(170): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template))
#2 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_template.php(184): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template))
#3 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_template.php(350): Smarty_Internal_Template->render()
#4 /var/www/admin/www/fabrika-lukov.ru/cache/smarty/compile/bb74641f07150a8f2266ac8c1f29fa3b15c573ac_0.rs.filters.tpl.php(300): Smarty_Internal_Template->_subTemplateRender('rs:%catalog%/bl...', NULL, NULL, 0, 3600, Array, 0, true)
#5 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_resource_base.php(128): content_5dc99fa530b808_68186870(Object(Smarty_Internal_Template))
#6 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_compiled.php(170): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template))
#7 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_template.php(184): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template))
#8 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_templatebase.php(199): Smarty_Internal_Template->render(false, 0)
#9 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_templatebase.php(99): Smarty_Internal_TemplateBase->_execute(Object(Smarty_Internal_Template), NULL, NULL, NULL, 0)
#10 /var/www/admin/www/fabrika-lukov.ru/core/rs/controller/result/standard.inc.php(241): Smarty_Internal_TemplateBase->fetch('blocks/sidefilt...')
#11 /var/www/admin/www/fabrika-lukov.ru/core/rs/controller/result/standard.inc.php(268): RS\Controller\Result\Standard->getHtml()
#12 /var/www/admin/www/fabrika-lukov.ru/core/rs/controller/abstractcontroller.inc.php(168): RS\Controller\Result\Standard->getOutput()
#13 /var/www/admin/www/fabrika-lukov.ru/core/rs/controller/abstractclient.inc.php(79): RS\Controller\AbstractController->processResult(Object(RS\Controller\Result\Standard))
#14 /var/www/admin/www/fabrika-lukov.ru/core/rs/application/block/template.inc.php(45): RS\Controller\AbstractClient->processResult(Object(RS\Controller\Result\Standard))
#15 /var/www/admin/www/fabrika-lukov.ru/core/smarty/rsplugins/function.moduleinsert.php(54): RS\Application\Block\Template::insert('catalog\\control...', Array, Array)
#16 /var/www/admin/www/fabrika-lukov.ru/cache/smarty/compile/1475aa692cab9f183e532b676264ba5b60a52a2f_0.rs.blocks.tpl.php(37): smarty_function_moduleinsert(Array, Object(Smarty_Internal_Template), '/var/www/admin/...')
#17 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_resource_base.php(128): content_5dc99fa524fb15_83678877(Object(Smarty_Internal_Template))
#18 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_compiled.php(170): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template))
#19 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_template.php(348): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template))
#20 /var/www/admin/www/fabrika-lukov.ru/cache/smarty/compile/5d68e5c934b6c51589852e04f3134060446e79f9_0.rs.section.tpl.php(120): Smarty_Internal_Template->_subTemplateRender('rs:%system%/gs/...', NULL, NULL, 0, 3600, Array, 0, false)
#21 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_resource_base.php(128): content_5dc99fa5233a26_56146126(Object(Smarty_Internal_Template))
#22 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_compiled.php(170): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template))
#23 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_template.php(348): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template))
#24 /var/www/admin/www/fabrika-lukov.ru/cache/smarty/compile/5ea7d385ae1e7f0dd35198eb2abe7ff7bd9f9dc2_0.rs.sections.tpl.php(33): Smarty_Internal_Template->_subTemplateRender('rs:%system%/gs/...', NULL, NULL, 0, 3600, Array, 0, true)
#25 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_resource_base.php(128): content_5dc99fa51deac2_69546019(Object(Smarty_Internal_Template))
#26 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_compiled.php(170): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template))
#27 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_template.php(348): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template))
#28 /var/www/admin/www/fabrika-lukov.ru/cache/smarty/compile/5d68e5c934b6c51589852e04f3134060446e79f9_0.rs.section.tpl.php(116): Smarty_Internal_Template->_subTemplateRender('rs:%system%/gs/...', NULL, NULL, 0, 3600, Array, 0, false)
#29 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_resource_base.php(128): content_5dc99fa5233a26_56146126(Object(Smarty_Internal_Template))
#30 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_compiled.php(170): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template))
#31 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_template.php(348): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template))
#32 /var/www/admin/www/fabrika-lukov.ru/cache/smarty/compile/5ea7d385ae1e7f0dd35198eb2abe7ff7bd9f9dc2_0.rs.sections.tpl.php(33): Smarty_Internal_Template->_subTemplateRender('rs:%system%/gs/...', NULL, NULL, 0, 3600, Array, 0, true)
#33 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_resource_base.php(128): content_5dc99fa51deac2_69546019(Object(Smarty_Internal_Template))
#34 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_compiled.php(170): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template))
#35 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_template.php(348): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template))
#36 /var/www/admin/www/fabrika-lukov.ru/cache/smarty/compile/f2ed0bc09ebc9a8686c683a5b97957a7a2c4f17c_0.rs.container.tpl.php(50): Smarty_Internal_Template->_subTemplateRender('rs:%system%/gs/...', NULL, NULL, 0, 3600, Array, 0, true)
#37 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_resource_base.php(128): content_5dc99fa51d1e14_15138559(Object(Smarty_Internal_Template))
#38 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_compiled.php(170): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template))
#39 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_template.php(348): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template))
#40 /var/www/admin/www/fabrika-lukov.ru/cache/smarty/compile/c7d959bd751df92399726bb234a7920fdd3075f6_0.rs.gs_maker.tpl.php(38): Smarty_Internal_Template->_subTemplateRender('rs:%system%/gs/...', NULL, NULL, 0, 3600, Array, 0, true)
#41 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_resource_base.php(128): content_5dc99fa5198563_72041158(Object(Smarty_Internal_Template))
#42 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_compiled.php(170): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template))
#43 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_template.php(184): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template))
#44 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_templatebase.php(199): Smarty_Internal_Template->render(false, 0)
#45 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_templatebase.php(99): Smarty_Internal_TemplateBase->_execute(Object(Smarty_Internal_Template), NULL, NULL, NULL, 0)
#46 /var/www/admin/www/fabrika-lukov.ru/core/rs/application/block/manager.inc.php(93): Smarty_Internal_TemplateBase->fetch('%system%/gs_mak...')
#47 /var/www/admin/www/fabrika-lukov.ru/cache/smarty/compile/89d73eecdd500e82ad4ccd2e3dee00b29e5a767f_0.rs.layout.tpl.php(66): RS\Application\Block\Manager->renderLayout()
#48 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_resource_base.php(128): content_5dc99fa5167a42_35437567(Object(Smarty_Internal_Template))
#49 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_template_compiled.php(170): Smarty_Template_Resource_Base->getRenderedTemplateCode(Object(Smarty_Internal_Template))
#50 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_template.php(184): Smarty_Template_Compiled->render(Object(Smarty_Internal_Template))
#51 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_templatebase.php(199): Smarty_Internal_Template->render(false, 0)
#52 /var/www/admin/www/fabrika-lukov.ru/core/smarty/sysplugins/smarty_internal_templatebase.php(99): Smarty_Internal_TemplateBase->_execute(Object(Smarty_Internal_Template), NULL, NULL, NULL, 0)
#53 /var/www/admin/www/fabrika-lukov.ru/core/rs/controller/front.inc.php(69): Smarty_Internal_TemplateBase->fetch('%THEME%/layout....')
#54 /var/www/admin/www/fabrika-lukov.ru/core/rs/router/manager.inc.php(412): RS\Controller\Front->exec()
#55 /var/www/admin/www/fabrika-lukov.ru/core/rs/router/manager.inc.php(433): RS\Router\Manager->applyRoute(Object(Catalog\Model\CustomRoute))
#56 /var/www/admin/www/fabrika-lukov.ru/index.php(24): RS\Router\Manager->dispatch()
#57 {main}</pre></td></tr>  
          </table>
          </div>

больше всего вот эта строчка удивила <a href="<div style='background-color: #f3f3f3;'>

Повысить оценку Понизить оценку

Re: SEO-ссылки в фильтре

{var_dump($category)} выдает NULL

Повысить оценку Понизить оценку

Re: SEO-ссылки в фильтре

Попробуйте категорию получить вот так:

{$category=$router->getCurrentRoute()->getExtra('category')}

Re: SEO-ссылки в фильтре

Закусило Александр пишет:

Попробуйте категорию получить вот так:

{$category=$router->getCurrentRoute()->getExtra('category')}

Да, так удалось получить. Спасибо.
А в чем причина может быть, почему стандартно не выводится?

Повысить оценку Понизить оценку

Re: SEO-ссылки в фильтре

Потому что в этом шаблоне её нет