|
View:
New views
6 Messages
—
Rating Filter:
Alert me
|
|
|
Help with my first recursion menuHello 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 |
|
|
|
|
|
Re: RE: Help with my first recursion menuHi,
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); > 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 menuFrom: 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 menuHi,
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> > > > $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 menuFrom: 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. :) |
| Free embeddable forum powered by Nabble | Forum Help |