Определение категорий в иерархии страницы - полезная и часто используемая работа при подготовке макета сайта. Получить непосредственного "родителя" несложно: в соответствующих модулях и плагинах для этого есть свои теги и переменные, формируемые через системную функцию cot_generate_pagetags. Однако получить таким образом можно только первую категорию.
Напомним, что в страницах за это отвечают теги:
{PAGE_CAT} и {PAGE_CATTITLE}
В разделах (листах) можно использовать:
{LIST_CAT} и {LIST_CATEGORY}
В регулярном блоке списка страниц:
{LIST_ROW_CAT} и {LIST_ROW_CATTITLE}
Аналогичным образом формируются теги в других плагинах, использующих страничную структуру, например News или Recent Items.
Но что делать если нам необходимо получить и сравнить первого "родителя" в сайте с развернутой структурой, вроде "Раздел 1" / "Раздел 1.1" / "Раздел 1.1.1" / "Конечная страница"? Это можно сделать при помощи несложной функции, которую мы разместим в PHP-файле темы (themename.php):
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'], '.'));
}
}
Теперь в HTML коде темы можно производить операции с получением и сравнением кода, например:
<!-- IF {PHP.pag.page_cat|get_root_cat($this)} == accessories -->
{FILE "{PHP.cfg.themes_dir}/{PHP.theme}/inc/page-shop-accessories.tpl"}
<!-- ENDIF -->
Аналогичным способом можно получить и использовать название первого родительского раздела:
if (!function_exists(get_root_title))
{
function get_root_title($code)
{
global $structure;
$cat = mb_substr($structure['page'][$code]['path'], 0, mb_strpos($structure['page'][$code]['path'], '.'));
return $structure['page'][$cat]['title'];
}
}
Удачной вам верстки!
Обсудить на форумах сообщества Котонти.
Заинтересовались? Звоните нам по телефонам +375 (29) 774-35-89 и +375 (44) 774-35-89 в Минске. Мы будем рады помочь Вам в реализации Вашего проекта.