Как удалить ссылку (непростую ссылку) Есть решение

Уважаемы, подскажите пожалуйста, как удалить циклическую ссылку с этого меню для категорий:


{if isset($category)}{$selected_category=$category.id}{else}{$selected_category=null}{/if}
{if $categories = $wa->shop->categories(0, null, true)}
<div class="block">
{wa_print_tree tree=$categories selected=$selected_category unfolded=$theme_settings.sidebar_unfolded_nav collapsible_class='collapsible' class="menu-v" elem ='<a href=":url" title=":name">:name</a>'}
</div>
{/if}

Если находиться на странице категории, то она ссылается на саму себя, как удалить ссылку и оставить только текст менюшки, чтоб страница не ссылалась на саму себя?

Есть ли вообще решение (хоть какое-то), или для этого нужно писать скрипт?

2 ответа

  • 2
    replicant 22 февраля 2019 12:47 # Решение

    Например так

    {if $wa->shop->categories()}
    {if isset($category)}{$cid = $category.id}{else}{$cid = null}{/if}
    <div itemscope itemtype="http://schema.org/SiteNavigationElement">
    	<ul>
    	{foreach $wa->shop->categories(0,1,false) as $c}
    	{if $cid == $c.id}
    		<li class="select">
    			<span>
    				<header itemprop="text">{$c.name}</header>
    			</span>
    		</li>
    		{else}
    		<li>
    			<a href="{$c.url}" itemprop="url">
    				<header itemprop="text">{$c.name}</header>
    			</a>
    		</li>
    	{/if}
    	{/foreach}
    	</ul>
    </div>
    {/if}

    или так

    {if $action == 'product' && !empty($product.id)}
    {foreach $product.categories as $pc}{if $pc@first}
    
            {$categories = $wa->shop->categories(0, 2, true)}
            {if count($categories)}
    
                    {foreach $categories as $cat}
                    {$catcount = $wa->shop->productsCount("category/`$cat.id`")}
                    {$childs_count = $cat.childs|@count }    
            <div class="siblings">
                    {if $pc.id == $cat.id}<a href="{$cat.url}" style="color:#d00;">{$cat.name}</a>{else}<a href="{$cat.url}">{$cat.name}</a>{/if}
                {if $childs_count > 0}
                    <div class="pe"></div>
                    <div class="pt" style="display:{if $cat.id == $root_category_id}block{else}none{/if};">
                
                {foreach $cat.childs as $sc}
                {$subcatcount = $wa->shop->productsCount("category/`$sc.id`")}
                    {if $pc.id == $sc.id}<a href="{$sc.url}" style="color:#d00;">{$sc.name}</a>{else}<a href="{$sc.url}">{$sc.name}</a>{/if}
                {/foreach}
                
                </div>
                {/if}
            </div>
                    {/foreach}
            {/if}
    
    {/if}{/foreach}
    
    {else}
            {$categories = $wa->shop->categories(0, 2, true)}
            {if count($categories)}
    
                    {foreach $categories as $cat}
                    {$catcount = $wa->shop->productsCount("category/`$cat.id`")}
                    {$childs_count = $cat.childs|@count }    
            <div class="siblings">
                    {if $category.id == $cat.id}<span style="color:#d00;">{$cat.name}</span>{else}<a href="{$cat.url}">{$cat.name}</a>{/if}
                {if $childs_count > 0}
                    <div class="pe"></div>
                    <div class="pt" style="display:{if $cat.id == $root_category_id}block{else}none{/if};">
               
                {foreach $cat.childs as $sc}
                {$subcatcount = $wa->shop->productsCount("category/`$sc.id`")}
                    {if $category.id == $sc.id}<span style="color:#d00;">{$sc.name}</span>{else}<a href="{$sc.url}">{$sc.name}</a>{/if}
                {/foreach}
                
                </div>
                {/if}
            </div>
                    {/foreach}
            {/if}
    
    {/if}

    Есть ещё всякие вариации, но дальше уже сами.

    • +1
      Владимир Владимир 22 февраля 2019 16:45 #

      Получилось встроить, забрал часть нужного кода и всё работает. А вообще меню получилось грубо говоря "с нуля", совсем другой код, огромное спасибо!!!

  • 1
    replicant 21 февраля 2019 18:12 #

    Если не ошибаюсь, то штатно при использовании wa_print_tree вы от этой ссылки не избавитесь, т.к. там не очень много возможностей для кастомизации.

    А чем она мешает-то?

    • +1
      Владимир Владимир 21 февраля 2019 20:29 #

      Ни чем не мешает, просто по SEO заморачиваюсь (без циклических ссылок вес страниц более правильнее расчитывается и продвижение идёт лучше), и эта последняя, и самая сложная для меня задача, которую я не могу решить.

      А вообще тут уже задавали такой вопрос, и не раз, все только раздвигают руками, даже не вериться что убрать циклические ссылки это очень мега сложно.

      Вот в этой теме человек как-то поборол это:

      https://perfect.steemy.ru/

      Просто стало завидно, как он поборол циклические ссылки.

      • +1
        replicant replicant 21 февраля 2019 21:10 #

        Да я так и понял, что это СЕО-культом попахивает.

        А человек поборол легко. Он просто не юзает деревянный wa_print_tree "из коробки" :)  Зайдите на мой тестовый сайт и покликайте в главном меню навигации категорий слева. Сделал для вас за 30 секунд. Могу намекнуть как, если интересно. В категориях ссылки отключаются, а когда заходите в товарную страницу, то снова активны. С футером и шапкой уже не стал шаманить. Лениво. Но принцип схожий.

        • +1
          Владимир Владимир 21 февраля 2019 21:16 #

          Зашёл, да всё верно, конечно интересно, как сделали так?

          Вот что знаю:

          {if $action !== 'category'}
          вывести кроме страниц категорий
          {/if}

          Возможно вы обернули сами ссылки в эту конструкцию? Я пока не пробовал так сделать, но как идея.

          • +1
            replicant replicant 21 февраля 2019 21:30 #

            В правильном направлении мыслите, но там придется повозиться, если с нуля, а у меня уже почти всё было готово, кроме отключателя ссылок. Сегодня уже убегаю с работы. Лучше завтра в Телеграме меня поймайте по этому аккаунту. Форум не люблю из-за "лагов" и путаницы в процессе диалога.

            • +1
              Владимир Владимир 21 февраля 2019 21:34 #

              Да ладно... Всем оплату подавай...

              А то для меня сделали за 30 секунд... Понты...

              Сам догадаюсь, спасибо, не сижу в телеграмме.

              • +1
                replicant replicant 21 февраля 2019 21:43 #

                Не нужны мне ваши деньги, у меня и своих достаточно. Я бы вам по шагам рассказал как надо. А если не хотите, то как хотите.

                З.Ы. Вообще-то именно из-за вашего поста и сделал. И может быть подумаю и буду у себя использовать эту идею.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите