Как реализовать подсветку текущего раздела?

  • В навигации (header.tpl и footer.tpl) присутствует меню вида:

    <ul class="list-inline">
    	<li><a href="{PHP.cfg.mainurl}">{PHP.L.Home}</a></li>
    	<li><a href="{PHP|cot_url('page','c=news')}">{PHP.structure.page.news.title}</a></li>
    	<li><a href="{PHP|cot_url('page','c=events')}">{PHP.structure.page.events.title}</a></li>
    	<li><a href="{PHP|cot_url('page','c=shop')}">{PHP.structure.page.shop.title}</a></li>
    </ul>

    Нужно подсветить текущее меню примерно так:

    ...
    	<li class="current"><a href="{PHP|cot_url('page','c=news')}">{PHP.structure.page.news.title}</a></li>
    ...

    Понятно, что можно использовать проверку xTemplate:

    ...
    	<li<!-- IF {PHP.c} == shop--> class="current"<!-- ENDIF -->><a href="{PHP|cot_url('page','c=shop')}">{PHP.structure.page.shop.title}</a></li>
    ...

    Но у меня в разделе Shop под 50 подразделов с разным уровнем вложенности.


  • По дате
  • По рейтингу
1 ответ
  • Самое простое решение -- объявить в файле THEMENAME.php PHP-функцию get_root_cat:

    if (!function_exists(get_root_cat))
    {
    	function get_root_cat($code)
    	{
    		global $structure;
    		return mb_substr($structure['page'][$code]['path'], 0, mb_strpos($structure['page'][$code]['path'], '.'));
    	}
    }

    Однако проверку корневого раздела такой вариант не сделает, поэтому в условии придется указать так:

    <li<!-- IF {PHP.c} == shop OR {PHP.c|get_root_cat($this)}  == shop --> class="current"<!-- ENDIF -->>
    	<a href="{PHP|cot_url('page','c=shop')}">{PHP.structure.page.shop.title}</a>
    </li>

    • Admin
    • 8 июля 2015 г.

Внимание

  • Для публикации ответа необходим соответствующий доступ