Hmm, that seems rather much for what I'm doing, and anyway for the JS I use in my menu, it needs to be a tested unordered list. This is what I have so far:
<?php class TreeMenuHelper extends Helper { var $helpers = array('Html'); function generate($data) { //print_r($data); $output = '<ul>'; foreach ($data as $key=>$value) : $output .= '<li>'; $output .= $this->Html->link($value['Menu']['name'],$value['Menu']['url']); if (isset($value['children'])) { $this->generate($value['children']); } $output .= '</li>'; endforeach; $output .= '</ul>'; return $output; } } ?> Now it does seem to do the first level of my menu, but it isn't rendering any of the children. But when I print_r($val['Children']) the values are set, so I don't know why it's not calling back to the function to render the child level. Anyone? Tane On 5/4/07, majna <[EMAIL PROTECTED]> wrote: > > u can make recursive function in helper. > Maybe U need only recursive call implement to your code: > if (isset($item['children']) && is_array($item['children']) && > count($item['children'])) > { > $out .= $this->menu($id_selector, $htmlAttributes=null, $_sublevel+1, > $item['children']); > } > > menu array should be "findAllThreaded" format > > /** > * Generate menu with ul li markup > * @access public > * @since 9/21/2006 18:37:17 > * @author Majna, Tomo and Agnezija > * @param string $id_selector a key used for selection elements from > specific menu position. eg. main_menu, footer > * @param array $htmlAttributes html atributes for menu > * @param integer $_sublevel private sublevel counter, > * @param array $recursive_data private menu data send to recursive > call, > * @return string > **/ > function menu($id_selector = null, $htmlAttributes = null, > $_sublevel=0, $recursive_data=null) > { > if (empty($recursive_data)) > { > if ( > isset($this->view->viewVars['menusArray'][$id_selector]) && ! > empty($this->view->viewVars['menusArray'][$id_selector]) ) > { > $data = > $this->view->viewVars['menusArray'][$id_selector]; > } > } > else > { > $data = $recursive_data; > } > > if (empty($data)) > { > return ''; > } > else > { > $extraTabIndent = ''; > $out="\n\r\t\t\t\t\t"; > > for ($i=0; $i < $_sublevel; $i++) > { > $extraTabIndent.= "\t\t"; > } > > $i=0; > $out.= $extraTabIndent.'<ul'.$this->html- > >_parseAttributes($htmlAttributes) . '>'; > > foreach ($data as $item) > { > if ($item['MenuType']['id_selector'] > == $id_selector) > { > $active = ($this->here == > $item['Menu']['url'])? ' > class="active"':''; > $out .= > "\n\r\t\t\t\t\t\t".$extraTabIndent.'<li'.$active.'>'; > $out .= > $this->html->link($item['Menu']['name'],$item['Menu'] > ['url'], null, false, false); > > if > (isset($item['children']) && is_array($item['children']) && > count($item['children'])) > { > $out .= > $this->menu($id_selector, $htmlAttributes=null, > $_sublevel+1, $item['children']); > } > $out .= '</li>'; > } > } > $out .= "\n\r\t\t\t\t\t".$extraTabIndent.'</ul><!-- '. > $id_selector .' -->'; > > if ($_sublevel > 0) > { > $out.="\n\r\t\t\t\t".$extraTabIndent; > } > else > { > $out.="\n\r\n\r"; > } > > return $this->output($out); > } > } > > On May 4, 5:38 pm, "Tane Piper" <[EMAIL PROTECTED]> > wrote: > > Hi folks, > > > > I've pasted some code here: http://bin.cakephp.org/view/1509962324 > > > > What I am looking to do is instead of hard-coding the 3 levels of menu > > that I produce from my findAllThreaded method in the controller, I > > would like to be able to produce "infinite" levels of menus from the > > data returned in as little code as possible, and possibly move it into > > a helper as I would also like to do the same with select lists (for > > when setting menus, I 'd like to easily be able to select the parent. > > > > Any help on this would be much appreciated. > > > > Tane > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Cake PHP" group. To post to this group, send email to cake-php@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/cake-php?hl=en -~----------~----~----~----~------~----~------~--~---