Меню. Как узнать при выводе меню 2-го уровня, k

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

Moderators: iturbay, wdwp

Post Reply
Leee
Forum Members
Forum Members
Posts: 22
Joined: Sun Jun 07, 2009 8:41 pm

Меню. Как узнать при выводе меню 2-го уровня, k

Post by Leee »

Задача банальна, но как решить не знаю.

При активном меню 2-го уровня должно показываться подменю, причем не как список, а как листбокс.
Есди меню неактивно, листбокс должен скрываться

ПРимер здесь
http://www.berkemann.com/
Щелкаем Bestseller->Wood

------------
Я попытался сделать так. Но меню 3-го уровня показывается всегда. Т.е. мне нужен какой-нибудь флажок, типа активен ли предок у текущего меню. Долго и упорно ковыряюсь в коде процедуры FillNode  (MenuManager.module.php)
Скорее всего задача банальна, а я не знаю, как ее решить


{* CSS classes used in this template:
.currentpage - The active/current page
.bullet_sectionheader - To style section header
hr.separator - To style the ruler for the separator *}
{if $count > 0}

{foreach from=$nodelist item=node}

{if $node->depth > $node->prevdepth}

        {if $node->origdepth ==2}
               
                -- выбор --
        {else}
                {repeat string="" times=$node->depth-$node->prevdepth}
        {/if}

{elseif $node->depth prevdepth}

        {if $node->origdepth ==2}
             
        {else}
              {repeat string="" times=$node->prevdepth-$node->depth}
             
        {/if}

{elseif $node->index > 0}
        {if $node->origdepth ==2}
             
        {else}
             
        {/if}
{/if}

{if $node->current == true}

        {if $node->depth ==2}
            id}>
        {else}
           
        {/if}

        url}" class="currentpage"{if $node->target ne ""} target="{$node->target}"{/if}> {$node->menutext}

{elseif $node->parent == true && $node->depth == 1}

        {if $node->depth ==2}
            id}>
        {else}
           
        {/if}

        url}" class="activeparent"{if $node->target ne ""} target="{$node->target}"{/if}> {$node->menutext}

{elseif $node->type == 'sectionheader'}
{$node->menutext}

{elseif $node->type == 'separator'}


{else}

        {if $node->depth ==2}
            id}>
        {else}
           
        {/if}

        url}"{if $node->target ne ""} target="{$node->target}"{/if}> {$node->menutext}

{/if}

{/foreach}

      {repeat string="" times=$node->depth-1}
     

{/if}
ZYV
Language Partners
Language Partners
Posts: 868
Joined: Tue Nov 15, 2005 9:08 pm

Re: Меню. Как узнать при выводе меню 2-го уровня, k

Post by ZYV »

Чего-то я не понял, collapse=true не подходит?
unsigned double ZYV;
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Меню. Как узнать при выводе меню 2-го уровня, k

Post by von-hamster »

Leee wrote: Т.е. мне нужен какой-нибудь флажок, типа активен ли предок у текущего меню.
См. помощь:
$node->parent -- True, если данный узел является родителем выбранной в данный момент страницы
Leee
Forum Members
Forum Members
Posts: 22
Joined: Sun Jun 07, 2009 8:41 pm

Re: Меню. Как узнать при выводе меню 2-го уровня, k

Post by Leee »

collapse=true подошел, а я про него и не знал :)
Вот спасибо!
ZYV
Language Partners
Language Partners
Posts: 868
Joined: Tue Nov 15, 2005 9:08 pm

Re: Меню. Как узнать при выводе меню 2-го уровня, k

Post by ZYV »

Прежде чем лезть в код надо читать документацию. Время экономит... Удачи.
unsigned double ZYV;
Leee
Forum Members
Forum Members
Posts: 22
Joined: Sun Jun 07, 2009 8:41 pm

Re: Меню. Как узнать при выводе меню 2-го уровня, k

Post by Leee »

Спасибо за ответ.
У меня возник еще один вопрос.
Чтобы не плодить темы, задам его здесь.
Вот у узла меню есть такое свойство $node->url
А как узнать url его предка ? $node->parent_url например
Думаю, что нужно что-то добавить в процедуре FillNode, по другому никак.
Подскажите пож.
Leee
Forum Members
Forum Members
Posts: 22
Joined: Sun Jun 07, 2009 8:41 pm

Re: Меню. Как узнать при выводе меню 2-го уровня, k

Post by Leee »

И еще у меня один такой глобальный вопрос.
Вот есть меню, а есть контент. Контент меняется в зависимости от меню.
И мне допустим нужно сделать динамическим баннер в верхней части сайта, т.е. чтобы он менялся в зависимости от выбранного элемента меню.
Или даже не баннер, а просто Глобальный блок контента, который я задаю в CMS админке.
Чтобы он менял полностью свое содержимое.
Дайте мне хотя бы подсказку
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Меню. Как узнать при выводе меню 2-го уровня, k

Post by von-hamster »

Leee wrote: Вот у узла меню есть такое свойство $node->url
А как узнать url его предка ? $node->parent_url например
Думаю, что нужно что-то добавить в процедуре FillNode, по другому никак.
Теоретически - можно не лезть никуда. В текущем контенте есть ссылка на родителя. По ней можно получить родителя, а соответственно и его урл. Если я конечно правильно тебя понял.
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Меню. Как узнать при выводе меню 2-го уровня, k

Post by von-hamster »

Leee wrote: Вот есть меню, а есть контент. Контент меняется в зависимости от меню.
И мне допустим нужно сделать динамическим баннер в верхней части сайта, т.е. чтобы он менялся в зависимости от выбранного элемента меню.
Тебе поидее не нужен даже глобальный блок. У тебя в шаблоне доступна: {$content_obj} - это полное описание объекта текущей страницы. Если ты баннер берешь из базы - то пишешь UDT и передаешь ему в качествепараметра, например, id текущей страницы, а там выбираешь, что тебе отобразить.
Leee
Forum Members
Forum Members
Posts: 22
Joined: Sun Jun 07, 2009 8:41 pm

Re: Меню. Как узнать при выводе меню 2-го уровня, k

Post by Leee »

von-hamster wrote: В текущем контенте есть ссылка на родителя
А можно тут поподробнее ? Как называется свойство?
Leee
Forum Members
Forum Members
Posts: 22
Joined: Sun Jun 07, 2009 8:41 pm

Re: Меню. Как узнать при выводе меню 2-го уровня, k

Post by Leee »

Всем спасибо.
В поиске наткнулся на эту ссылку
http://wiki.cmsmadesimple.org/index.php ... .27s_alias
Вследствие чего написал такой тег

Code: Select all

global $gCms;
global $smarty;

$manager =& $gCms->GetHierarchyManager();

$var = 'parent_content';
if( isset($params['assign']) && $params['assign'] != '' )
{
  $var = $params['assign'];
}
$result = "NO RESULT";
$thisPage = $gCms->variables['content_id'];
$currentNode = &$manager->sureGetNodeById($thisPage);

if ($currentNode->getLevel() > 0 ) {
    $parentNode =& $currentNode->getParentNode();
    $parentContent= $parentNode->getContent();
    $result = $parentContent;
}
$smarty->assign($var,$result);
user defined tags - оказывается отличная штука! )
User avatar
StanlyBSV
Forum Members
Forum Members
Posts: 90
Joined: Fri Aug 01, 2008 8:59 am

Re: Меню. Как узнать при выводе меню 2-го уровня, k

Post by StanlyBSV »

Люди подскажите пожалуйста!
Хочу сделать меню следующим образом:

Меню первого уровня (в виде картинки)
  - текст меню второго уровня (раскрытый)
  - текст меню второго уровня (раскрытый)
Меню первого уровня (в виде картинки)
  - текст меню второго уровня (раскрытый)
  - текст меню второго уровня (раскрытый)

т.е. чтобы в админке была схема такая, допустим "главная" (на сайте это ссылка ввиде картинки главная) а само меню второго уровня. и так надо сделать мне 5 минюшек. или есть какой то способ легче сделать? вот этот шаблон Left simple navigation + 1 column только чтобы он был весь раскрыт, а заместо названий ссылок первого уровня были картинки.

Спасибо"
ZYV
Language Partners
Language Partners
Posts: 868
Joined: Tue Nov 15, 2005 9:08 pm

Re: Меню. Как узнать при выводе меню 2-го уровня, k

Post by ZYV »

И в чем проблема адаптировать http://wiki.cmsmadesimple.org/index.php ... nager  menu_with_icons  только добавить условие, чтобы убрать иконки со второго уровня и текст с первого?
unsigned double ZYV;
User avatar
StanlyBSV
Forum Members
Forum Members
Posts: 90
Joined: Fri Aug 01, 2008 8:59 am

Re: Меню. Как узнать при выводе меню 2-го уровня, k

Post by StanlyBSV »

Спасибо! Сам уже разобрался!
Post Reply

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