Help with my first recursion menu

View: New views
6 Messages — Rating Filter:   Alert me  

Help with my first recursion menu

by TALOFO :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello all,

Please have a look here:
http://www.nuvemk.com/c_categoria/seccao/1


When we click on "Fitofármacos", I can display the correspondent children!
This is great! And I'm really happy!
:)

When we click on Fitofármacos children - "Herbicidas", I was expecting to
have returned Herbicidas childs, without losing the Fitofármacos menu item.

The reason I'm losing him, I suppose, it's due the fact that the URI is not
properly generated by the function responsible to parse a menu.

Notice that, on the link posted above:
If you click on fitofármacos and then click on herbicidas, the expected URL
should be:
http://www.nuvemk.com/c_categoria/seccao/1/6/9/

but I'm getting this instead:
http://www.nuvemk.com/c_categoria/seccao/6/9/

If we try to navigate deeply, and inside Herbicidas we click on "Herbicidas
A", we are expecting an URL like so:
http://www.nuvemk.com/c_categoria/seccao/1/6/9/27/

But we are getting this instead:
http://www.nuvemk.com/c_categoria/seccao/9/27/


Here is the actual code:
http://pastebin.com/m8ffe9db

I've not yet completely understand the recursion, can I have your help in
order to understand how can I recursively build the URI segments?



Thanks a lot in advance,
Márcio


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Parent Message unknown RE: Help with my first recursion menu

by TALOFO :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

> -----Original Message-----
> From: MEM [mailto:talofo@...]
> Sent: quarta-feira, 28 de Outubro de 2009 15:55
> To: 'php-general@...'
> Subject: Help with my first recursion menu
>
> Hello all,
>
> Please have a look here:
> http://www.nuvemk.com/c_categoria/seccao/1
>
>
> When we click on "Fitofármacos", I can display the correspondent
> children! This is great! And I'm really happy!
> :)
>
> When we click on Fitofármacos children - "Herbicidas", I was expecting
> to have returned Herbicidas childs, without losing the Fitofármacos
> menu item.
>
> The reason I'm losing him, I suppose, it's due the fact that the URI is
> not properly generated by the function responsible to parse a menu.
>
> Notice that, on the link posted above:
> If you click on fitofármacos and then click on herbicidas, the expected
> URL should be:
> http://www.nuvemk.com/c_categoria/seccao/1/6/9/
>
> but I'm getting this instead:
> http://www.nuvemk.com/c_categoria/seccao/6/9/
>
> If we try to navigate deeply, and inside Herbicidas we click on
> "Herbicidas A", we are expecting an URL like so:
> http://www.nuvemk.com/c_categoria/seccao/1/6/9/27/
>
> But we are getting this instead:
> http://www.nuvemk.com/c_categoria/seccao/9/27/
>
>
> Here is the actual code:
> http://pastebin.com/m8ffe9db
>
> I've not yet completely understand the recursion, can I have your help
> in order to understand how can I recursively build the URI segments?
>
>
>
> Thanks a lot in advance,
> Márcio




I've been told that stack is the way to go, so I'm trying to understand the
following code:
http://pastebin.com/m5616c88f
I've commented every line so that any of you could see if I'm interpreting
something wrong:


I have two questions about this code, that hopefully someone on the list
could explain:

1)
Why do we need to remove the last array item? (on line 32):
array_pop($urlStack);

2)
Why we print the closed tag of the li element, after the recursive call? (on
line 29)
echo "</li>\n";


Thanks a lot in advance,
Márcio


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Re: RE: Help with my first recursion menu

by Lex Braun :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

On Wed, Oct 28, 2009 at 5:22 PM, MEM <talofo@...> wrote:

>  I've been told that stack is the way to go, so I'm trying to understand
> the
> following code:
> http://pastebin.com/m5616c88f
> I've commented every line so that any of you could see if I'm interpreting
> something wrong:
>
>
> I have two questions about this code, that hopefully someone on the list
> could explain:
>
> 1)
> Why do we need to remove the last array item? (on line 32):
> array_pop($urlStack);
>
On line 20, $url creates an URL path that includes the $cat path.  Once
you've completed iteration on all children of $cat, the url path should no
longer include $cat path, thus it is removed from $urlStack.


>
> 2)
> Why we print the closed tag of the li element, after the recursive call?
> (on
> line 29)
> echo "</li>\n";
>
Line 29 is closing the li element that was opened on line 23 for $cat.

>
>
> Thanks a lot in advance,
> Márcio
>
-Lex

RE: RE: Help with my first recursion menu

by TALOFO :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

 
From: Lex Braun [mailto:lex.braun@...]
Sent: sábado, 31 de Outubro de 2009 14:05
To: MEM
Cc: php-general@...
Subject: Re: [PHP] RE: Help with my first recursion menu
 
Hi,
On Wed, Oct 28, 2009 at 5:22 PM, MEM <talofo@...> wrote:
I've been told that stack is the way to go, so I'm trying to understand the
following code:
http://pastebin.com/m5616c88f
I've commented every line so that any of you could see if I'm interpreting
something wrong:


I have two questions about this code, that hopefully someone on the list
could explain:

1)
Why do we need to remove the last array item? (on line 32):
array_pop($urlStack);
On line 20, $url creates an URL path that includes the $cat path.  Once you've completed iteration on all children of $cat, the url path should no longer include $cat path, thus it is removed from $urlStack.
 

2)
Why we print the closed tag of the li element, after the recursive call? (on
line 29)
echo "</li>\n";
Line 29 is closing the li element that was opened on line 23 for $cat.


Thanks a lot in advance,
Márcio
-Lex
 
 
 
 
Thanks a lot. I knew that:
“Line 29 is closing the li element that was opened on line 23 for $cat.”
 
My question intend to be more like:
Why that line to close the li element is *after* the recursive call?
Somehow, it seems that instead of creating something like this:
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
 
We are doing:
<ul>
<li>item1
<li>item2
<li>item3
</li>
</ul>
 
Anyway, the main doubt was the first. I will test this and see what I get.
 
Thanks a lot for your reply.
Regards,
Márcio
 

Re: RE: Help with my first recursion menu

by Lex Braun :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

On Sat, Oct 31, 2009 at 11:07 AM, MEM <talofo@...> wrote:

>
>
> *From:* Lex Braun [mailto:lex.braun@...]
> *Sent:* sábado, 31 de Outubro de 2009 14:05
> *To:* MEM
> *Cc:* php-general@...
> *Subject:* Re: [PHP] RE: Help with my first recursion menu
>
>
>
> Hi,
>
> On Wed, Oct 28, 2009 at 5:22 PM, MEM <talofo@...> wrote:
>
> I've been told that stack is the way to go, so I'm trying to understand the
> following code:
> http://pastebin.com/m5616c88f
> I've commented every line so that any of you could see if I'm interpreting
> something wrong:
>
>
> I have two questions about this code, that hopefully someone on the list
> could explain:
>
> 1)
> Why do we need to remove the last array item? (on line 32):
> array_pop($urlStack);
>
> On line 20, $url creates an URL path that includes the $cat path.  Once
> you've completed iteration on all children of $cat, the url path should no
> longer include $cat path, thus it is removed from $urlStack.
>
>
>
>
> 2)
> Why we print the closed tag of the li element, after the recursive call?
> (on
> line 29)
> echo "</li>\n";
>
>  Line 29 is closing the li element that was opened on line 23 for $cat.
>
>
>
> Thanks a lot in advance,
> Márcio
>
>  -Lex
>
>
>
>
>
>
>
>
>
> Thanks a lot. I knew that:
>
> “Line 29 is closing the li element that was opened on line 23 for $cat.”
>
>
>
> My question intend to be more like:
>
> Why that line to close the li element is **after** the recursive call?
>
> Somehow, it seems that instead of creating something like this:
>
> <ul>
>
> <li>item1</li>
>
> <li>item2</li>
>
> <li>item3</li>
>
> </ul>
>
>
>
> We are doing:
>
> <ul>
>
> <li>item1
>
> <li>item2
>
> <li>item3
>
> </li>
>
> </ul>
>
>
>
Say you have a tree menu that contains :
$arr = array('item1' => 'Item 1', 'item2' => array('item2a' => 'Item 2a',
'item2b' => 'Item 2b'));
$urlStack = array('category');

When you call the tree() function with the above $arr values, the function
acts as follows:
1. First time through the function, the opening ul element is printed
2. First time through the foreach loop sets $cat = 'item1' and $val = 'Item
1'.
3. As this is not an array, the else condition prints <li>Item 1</li>
4. Second time through the foreach loop sets $cat = 'Item 2' and $val =
array('item2a' => 'Item 2a', 'item2b' => 'Item 2b').
5. As this is an array, the if condition prints <li><a href=''>Item</a> and
calls the tree function recursively
6. Second time through the tree function, another <ul> element is printed
and the two sub items are printed as <li>sub item</li> as they do not
contain additional arrays.  Tree function ends by printing the closing </ul>
tag.
7. The foreach loop from step 5 continues and prints the closing </li>. Tree
function ends by printing the closing </ul> tag.

The output from calling tree($arr, $urlStack) would thus be:
<ul>
<li>Item 1</li>
<li>
<a href="?path=category/Item 2">Item 2</a>
<ul>
<li>Item 2a</li>
<li>Item 2b</li>
</ul>
</li>
</ul>

RE: RE: Help with my first recursion menu

by TALOFO :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

 
From: Lex Braun [mailto:lex.braun@...]
Sent: segunda-feira, 2 de Novembro de 2009 02:58
To: MEM
Cc: php-general@...
Subject: Re: [PHP] RE: Help with my first recursion menu
 
Hi,
On Sat, Oct 31, 2009 at 11:07 AM, MEM <talofo@...> wrote:
 
From: Lex Braun [mailto:lex.braun@...]
Sent: sábado, 31 de Outubro de 2009 14:05
To: MEM
Cc: php-general@...
Subject: Re: [PHP] RE: Help with my first recursion menu
 
Hi,
On Wed, Oct 28, 2009 at 5:22 PM, MEM <talofo@...> wrote:
I've been told that stack is the way to go, so I'm trying to understand the
following code:
http://pastebin.com/m5616c88f
I've commented every line so that any of you could see if I'm interpreting
something wrong:


I have two questions about this code, that hopefully someone on the list
could explain:

1)
Why do we need to remove the last array item? (on line 32):
array_pop($urlStack);
On line 20, $url creates an URL path that includes the $cat path.  Once you've completed iteration on all children of $cat, the url path should no longer include $cat path, thus it is removed from $urlStack.
 

2)
Why we print the closed tag of the li element, after the recursive call? (on
line 29)
echo "</li>\n";
Line 29 is closing the li element that was opened on line 23 for $cat.


Thanks a lot in advance,
Márcio
-Lex
 
 
 
 
Thanks a lot. I knew that:
“Line 29 is closing the li element that was opened on line 23 for $cat.”
 
My question intend to be more like:
Why that line to close the li element is *after* the recursive call?
Somehow, it seems that instead of creating something like this:
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
 
We are doing:
<ul>
<li>item1
<li>item2
<li>item3
</li>
</ul>
 
Say you have a tree menu that contains :
$arr = array('item1' => 'Item 1', 'item2' => array('item2a' => 'Item 2a', 'item2b' => 'Item 2b'));
$urlStack = array('category');

When you call the tree() function with the above $arr values, the function acts as follows:
1. First time through the function, the opening ul element is printed
2. First time through the foreach loop sets $cat = 'item1' and $val = 'Item 1'.
3. As this is not an array, the else condition prints <li>Item 1</li>
4. Second time through the foreach loop sets $cat = 'Item 2' and $val = array('item2a' => 'Item 2a', 'item2b' => 'Item 2b').  
5. As this is an array, the if condition prints <li><a href=''>Item</a> and calls the tree function recursively
6. Second time through the tree function, another <ul> element is printed and the two sub items are printed as <li>sub item</li> as they do not contain additional arrays.  Tree function ends by printing the closing </ul> tag.
7. The foreach loop from step 5 continues and prints the closing </li>. Tree function ends by printing the closing </ul> tag.

The output from calling tree($arr, $urlStack) would thus be:
<ul>
<li>Item 1</li>
<li>
<a href="?path=category/Item 2">Item 2</a>
<ul>
<li>Item 2a</li>
<li>Item 2b</li>
</ul>
</li>
</ul>
 
 
 
Perfectly clear. Thanks a lot Lex. :)