Page 1 of 1

$node->haschildren always returns true

Posted: Wed Oct 20, 2010 3:04 pm
by lacertus2
$node->haschildren always returns true. Why?

In this example, #menu2 is always shown regardless if the page has subpages or not.

God this CMS drives me nuts.

Code: Select all

{if $count > 0}
{assign var="test1" value="test"}
{assign var="test2" value="test1"}

<div class="menus">
	{foreach from=$nodelist item=node1}

		{if $test1 == "test"}
			<ul id="menu1">	
				{foreach from=$nodelist item=node}
						{if $node->depth == 1}
		
							{if $node->current == true}
								<li><a class="selected" href="{$node->url}">{$node->menutext} {$node->prevdepth}</a></li>
							{else}
								<li><a href="{$node->url}">{$node->menutext} {$node->haschildren} </a></li>
							{/if}
							
					
						{/if}
						{if $node->haschildren == true}
						 	{assign var="test2" value="test"}
						{/if}

				{/foreach}
			</ul>
			{assign var="test1" value="test1"}
		{/if}
		
	    {if $test2 == "test"}
			<ul id="menu2">
				{foreach from=$nodelist item=node}
								
					{if $node->depth == 2}
					
								{if $node->current == true}
									<li><a class="selected" href="{$node->url}">{$node->menutext}</a></li>
								{else}
									<li><a href="{$node->url}">{$node->menutext}</a></li>
								{/if} 
					
					{/if}
									
				{/foreach}
			</ul>
			{assign var="test2" value="test1"}
		{/if}
	{/foreach}
</div>				
{/if}
<br style="clear:both;">

Re: $node->haschildren always returns true

Posted: Wed Oct 20, 2010 11:12 pm
by Dr.CSS
I think maybe you are driving yourself nuts, I've made at least 100 menu templates of all sorts and have never had as much trouble as you seem to be having...

If you gave a live example or even an image example of what you are looking for I'm sure it can be worked out...

Re: $node->haschildren always returns true

Posted: Thu Oct 21, 2010 12:32 am
by lacertus2
Sorry. I suck at smarty. You probably (or don't) know the frustration of working with something for days and getting nowhere.

Okay, so this is what I want. I've changed it a bit from the previous thread.

I have 3 levels. If the current page has a sub-page, the submenu is shown. If the current page has no children, nothing is shown. Also, all parent(s) should all have the class "selected".

Image

Code: Select all

<ul id="menu1">
   <li><a href="page">Home</a></li>
   <li><a href="page" class="selected">Projects</a></li>
   <li><a href="page">About</a></li>
</ul>

<ul id="menu2"> 
   <li><a href="page">Project 1</a></li>
   <li><a href="page">Project 2</a></li>
   <li><a href="page" class="selected">Project 3</a></li>
</ul>

<ul id="menu3"> 
   <li><a href="page" class="selected">Source code</a></li>
   <li><a href="page">Download</a></li>
</ul>

Re: $node->haschildren always returns true

Posted: Sat Oct 23, 2010 6:08 am
by lacertus2
Nobody?

Re: $node->haschildren always returns true

Posted: Sat Oct 23, 2010 8:33 am
by Dr.CSS

{menu number_of_levels='1'}


{menu start_level='2' number_of_levels='1'}


{menu start_level='3' number_of_levels='1'}


Or just the menu calls w/o divs if wanted...