Forums / Developer / Menu placed outside pagelayout.tpl

"Please Note:
  • At the specific request of Ibexa we are changing this projects name to "Exponential" or "Exponential (CMS)" effective as of August, 11th 2025.
  • This project is not associated with the original eZ Publish software or its original developer, eZ Systems or Ibexa".

Menu placed outside pagelayout.tpl

Author Message

Salvatore Guarino

Friday 02 September 2005 4:30:50 am

I have to place this menu in a custom template, (i.e. my_product.tpl), but the variable '<i>$module_result</i>' in this namespace is unknown. There is another way? Can I use another variable?

<ul>
{def $mainMenu=treemenu( $module_result.path, $module_result.node_id, array('folder','folder_product','tire_chain'), 1, 6)}
{foreach $mainMenu as $menu}
    <li class="level_{$menu.level}">	
    {if $menu.is_selected}
        <div class="selected">
        <a href={$menu.url_alias|ezurl}>{$menu.text}</a>
        </div>
    {else}
        <a href={$menu.url_alias|ezurl}>{$menu.text}</a>
    {/if}
 
    </li>
{/foreach}
    </ul>

Stig Tidemandsen

Tuesday 25 October 2005 3:48:57 am

I'm having the same problem.
Is there any way to make $module_result.path or an equivalent array available within $module_result.content?

Kristof Coomans

Thursday 27 October 2005 12:58:45 am

Are you including this template in pagelayout.tpl, or somewhere else?

independent eZ Publish developer and service provider | http://blog.coomanskristof.be | http://ezpedia.org

Łukasz Serwatka

Thursday 27 October 2005 1:03:49 am

Stig, there is $node.path_array which holds node ids.

you can loop throw this array like

{foreach $node.path_array as $item}
    {def $node_data=fetch( content, node, hash( node_id, $item ) )}
    {$node_data.name}
{/foreach}

Or just use $node.path this array contains content objects. Check it {$node.path|attribute(show,1)}

Personal website -> http://serwatka.net
Blog (about eZ Publish) -> http://serwatka.net/blog

Stig Tidemandsen

Thursday 27 October 2005 1:18:49 am

Thanx for the reply Lukasz However... The actual problem isn't looping the array, but doing the treemenu fetch.

<b>Usage</b>

treemenu( path, 
          node_id
          [, class_filter ]
          [, depth_skip   ]
          [, max_level    ] )

The examples in the documentation use $module_result.path for the path argument. This means that I can't use treemenu outside pagelayout, unless I have a substitute for $module_result.path avaliable.

It would be nice to be able to use treemenu outside pagelayout because it simplifies determening if the node / parent node / grandparent node and so on, is selected:

{foreach $treemenu as $menuitem}
	<div style="margin-left:{$menuitem.level|mul(7)}px">
		<a {$menuitem.is_selected|choose('','class="selected"')} href={$menuitem.url_alias|ezurl}>
			{$menuitem.text} 
		</a>
	</div>
{/foreach}

Łukasz Serwatka

Thursday 27 October 2005 1:42:40 am

You are right, but you can use node.path or node.path_array as workaround and build menu without treemenu operator usling list or tree, more complicated but still possible ;)

Personal website -> http://serwatka.net
Blog (about eZ Publish) -> http://serwatka.net/blog

Łukasz Serwatka

Thursday 27 October 2005 1:50:11 am

Look here
http://ez.no/products/ez_publish_cms/documentation/customization/tips_tricks/creating_tree_menus

Personal website -> http://serwatka.net
Blog (about eZ Publish) -> http://serwatka.net/blog

H-Works Agency

Wednesday 07 December 2005 7:10:47 pm

Here is how i use 'treemenu' out of pagelayout.tpl (thus without $module_result.path) :

<b>The concept is to recreate the same $module_result.path array available in pagelayout.tpl.</b>

{def $module_path=array()}
      {foreach $node.path_array|remove(0,1) as $element}
      {def $thisnode=fetch('content', 'node', hash('node_id',$element))}
      {def $thisArray=hash('text', $thisnode.name, 'url', concat('/content/view/full/',$thisnode.node_id), 'url_alias', $thisnode.url_alias, 'node_id', $thisnode.node_id)}
      {set module_path=$module_path|append($thisArray)}
      {undef $thisnode $thisArray}
      {/foreach}

Then you just have to go on with the classical function synthax :

{let docs=treemenu($module_path,(...))}

</code>

EZP is Great