Ok, here is my code that now works, anyone please feel free to use:
<?php
class TreeMenuHelper extends Helper
{
var $helpers = array('Html');
function generate($data, $class='menu')
{
$output = '<ul class="' . $class . '">';
foreach ($data as $key=>$value) :
$output .= '<li>';
$output .=
$this->Html->link($value['Menu']['name'],$value['Menu']['url']);
if (isset($value['children']) &&
count($value['children']))
{
$output .= $this->generate($value['children']);
}
$output .= '</li>';
endforeach;
$output .= '</ul>';
return $output;
}
}
?>
On 5/4/07, Tane Piper <[EMAIL PROTECTED]> wrote:
> 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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---