Page 1 of 1

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

Posted: Sun Jun 07, 2009 8:54 pm
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}

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

Posted: Sun Jun 07, 2009 9:36 pm
by ZYV
Чего-то я не понял, collapse=true не подходит?

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

Posted: Mon Jun 08, 2009 5:39 am
by von-hamster
Leee wrote: Т.е. мне нужен какой-нибудь флажок, типа активен ли предок у текущего меню.
См. помощь:
$node->parent -- True, если данный узел является родителем выбранной в данный момент страницы

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

Posted: Mon Jun 08, 2009 6:06 am
by Leee
collapse=true подошел, а я про него и не знал :)
Вот спасибо!

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

Posted: Mon Jun 08, 2009 8:39 am
by ZYV
Прежде чем лезть в код надо читать документацию. Время экономит... Удачи.

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

Posted: Wed Jun 10, 2009 3:14 pm
by Leee
Спасибо за ответ.
У меня возник еще один вопрос.
Чтобы не плодить темы, задам его здесь.
Вот у узла меню есть такое свойство $node->url
А как узнать url его предка ? $node->parent_url например
Думаю, что нужно что-то добавить в процедуре FillNode, по другому никак.
Подскажите пож.

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

Posted: Thu Jun 11, 2009 8:28 am
by Leee
И еще у меня один такой глобальный вопрос.
Вот есть меню, а есть контент. Контент меняется в зависимости от меню.
И мне допустим нужно сделать динамическим баннер в верхней части сайта, т.е. чтобы он менялся в зависимости от выбранного элемента меню.
Или даже не баннер, а просто Глобальный блок контента, который я задаю в CMS админке.
Чтобы он менял полностью свое содержимое.
Дайте мне хотя бы подсказку

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

Posted: Thu Jun 11, 2009 8:38 am
by von-hamster
Leee wrote: Вот у узла меню есть такое свойство $node->url
А как узнать url его предка ? $node->parent_url например
Думаю, что нужно что-то добавить в процедуре FillNode, по другому никак.
Теоретически - можно не лезть никуда. В текущем контенте есть ссылка на родителя. По ней можно получить родителя, а соответственно и его урл. Если я конечно правильно тебя понял.

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

Posted: Thu Jun 11, 2009 8:43 am
by von-hamster
Leee wrote: Вот есть меню, а есть контент. Контент меняется в зависимости от меню.
И мне допустим нужно сделать динамическим баннер в верхней части сайта, т.е. чтобы он менялся в зависимости от выбранного элемента меню.
Тебе поидее не нужен даже глобальный блок. У тебя в шаблоне доступна: {$content_obj} - это полное описание объекта текущей страницы. Если ты баннер берешь из базы - то пишешь UDT и передаешь ему в качествепараметра, например, id текущей страницы, а там выбираешь, что тебе отобразить.

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

Posted: Thu Jun 11, 2009 7:41 pm
by Leee
von-hamster wrote: В текущем контенте есть ссылка на родителя
А можно тут поподробнее ? Как называется свойство?

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

Posted: Thu Jun 11, 2009 8:01 pm
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 - оказывается отличная штука! )

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

Posted: Mon Jun 22, 2009 8:06 am
by StanlyBSV
Люди подскажите пожалуйста!
Хочу сделать меню следующим образом:

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

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

Спасибо"

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

Posted: Mon Jun 22, 2009 9:18 am
by ZYV
И в чем проблема адаптировать http://wiki.cmsmadesimple.org/index.php ... nager  menu_with_icons  только добавить условие, чтобы убрать иконки со второго уровня и текст с первого?

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

Posted: Fri Jun 26, 2009 12:27 pm
by StanlyBSV
Спасибо! Сам уже разобрался!