Как вывести {menu} с нужной структурой?

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

Post Reply
derean
New Member
New Member
Posts: 1
Joined: Mon Sep 28, 2015 10:30 pm

Как вывести {menu} с нужной структурой?

Post by derean »

Подскажите пожалуйста как вывести нужную часть {menu}:
пример - есть страницы
1 главная
2 контакты
3 каталог
3.1 масла
3.2 другая всячина
3.2.1 еще глубже
3.2.2 я здесь
3.2.2.1 ывапывап
3.3 вавпвап
3.3.1 вапрвапрва
3.3.2 ывапывап

хотелось чтоб при выборе страницы 3.2.2.1 или 3.2.2 выводились все из 3.2 включая дочерние, при выборе 3.3.1 или 3.3.2 выводилось все с дочерними из меню 3.3

Вывести дочерние и сестринские меню я уже узнал как, но как можно вывести родительский пункт меню или в идеале - узнать "номер иерархии" обрезать лишнее до требуемого уровня и вывести все что в нем или как то отследить наличие в дочерних элементах текущей страницы и вывести нужную часть. Буду очень благодарен ибо мало примеров в сети с извращениями по {menu}
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

Re: Как вывести {menu} с нужной структурой?

Post by guro »

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

Code: Select all

$manager = cmsms()->GetHierarchyManager();

if( !isset($params['level']) ) $params['level'] = 0;
$var = isset($params['assign']) ? $params['assign'] : 'root_page_alias';

$result = "NO RESULT";
$thisPage = $smarty->get_template_vars('content_id');
$currentNode = $manager->sureGetNodeById($thisPage);
while( isset($currentNode) && $currentNode->getLevel() >= $params['level'] )
{
    $currentContent =& $currentNode->getContent();
    $result = $currentContent->Alias();
    $currentNode =& $currentNode->getParentNode();
}
$smarty->assign($var,$result);
соответственно вызов

Code: Select all

{get_root_page_alias assign=alias_page level=1}
level=1, т.к. вам требуется 3.2 и 3.3. После получения алиаса страницы 3.2 или 3.3 можно вызвать

Code: Select all

{menu start_page=$alias_page}
Post Reply

Return to “Russian - русский”