获取Zend_Navigation菜单与jQuery的鱼眼镜头到工作(Getting Zend_Na

2019-06-18 04:41发布

我使用Zend_Navigation(甜除了框架,顺便说一句)建立我的菜单后,它应该在的页面(不言自明)呈现。 我先在控制器中设置容器的地方:

// $pages is the array containing all page information
$nav = new Zend_Navigation($pages);
$this->view->navigation($nav);

然后,在布局,它呈现这样的:

echo $this->navigation()->menu();

这完美的作品。 现在:我希望菜单进行不同的呈现了一点。 我建立该页面使用jQuery的鱼眼插件打造苹果般的基座菜单。 然而,这个插件需要一个特定的标记......

实际上,它需要的列表<a>包含元素两者<img>用于图标)和一个<span> (对于工具提示)。 标准菜单视图助手呈现无序列表(逻辑)里面的一切,用'label'作为链接文字参数。

这似乎传递给这些内容'label'参数被渲染之前逃脱,所以插入HTML有不会做我任何好处。 此外,鱼眼一般似乎并没有采取包含在其项目<li>标签,用包裹在整个事情<ul></ul>但只是一个单级列表<a>元素。

我在想编写自定义视图助手的被告席上,这将能够采取插入的护理<img><span>但我有一个非常困难的时间去连接到导航自定义视图助手类。 我只是想不通哪里放置它,并以何种方式,即使我所有自定义类(模型和等)由自动被甜蜜的照顾。 在这个任何想法?

再说,即使我能得到这个视图助手的工作,我还是留下与HTML无序列表 - 我知道我可以失去一个也使用自定义视图助手,但我一直包含主的粉丝名单内的导航菜单,对语义的缘故。

如果有人能帮助我的话,我会非常感激。 如果鱼眼只是并不意味着与合作<ul>的,那简直是太糟糕了......会有在这种情况下完全失去Zend_Navigation一个很好的理由?

Answer 1:

我还没有看到的路要走无论是在制作自定义呈现的条款。 这是我最后尽管这样做:

首先,而不是渲染默认菜单()调用,创建一个局部渲染到:

// menu.phtml is partial, cms is module
$partial = array('menu.phtml', 'cms');
$this->navigation()->menu()->setPartial($partial);
echo $this->navigation()->menu()->render();

然后(从文档),您可以创建一个“自定义”渲染就像这样:

// -- inside menu.phtml
foreach ($this->container as $page) 
{
    // this just prints a "<a>" or "<span>" tag
    // depending on whether the page has a uri
    echo $this->menu()->htmlify($page), PHP_EOL;
}

我最终使我本来什么(一个菜单,子菜单的一个级别),这个脚本:

// -- another menu.phtml
<ul class="navigation">

<?php

$html = array();

foreach ($this->container as $page) 
{
    $html[] = "<li>";
    $html[] = $this->menu()->htmlify($page) . PHP_EOL;

    if (!empty($page->pages))
    {
        $html[] = "<ul>";
        foreach ($page->pages as $subpage) 
        {
            $html[] = "<li>";
            if ($href = $subpage->getHref()) $html[] = "<a href=\"{$href}\">";
            else $html[] = "<span>";
            $html[] = "<img src=\"/ui/cms/img/icons/edit.png\" alt=\"\"/>";
            $html[] = $subpage->getLabel();
            if ($href) $html[] = "</a>";
            else $html[] = "</span>";            
            $html[] = "</li>";
        }
        $html[] = "</ul>";
    }

    $html[] = "</li>";
}

echo join(PHP_EOL, $html);

?>
</ul>

你可以只更改部分的标记,并添加您的图像/图标那里。



Answer 2:

对不起,在原来职位的格式问题

要添加自定义的助手做到以下几点,你的引导:

protected function _initNavigation()
{
    $this->bootstrap('view');           // make sure we have a view
    $view = $this->getResource('view');     // get the view resource
    $config = new Zend_Config_Xml(APPLICATION_ROOT . '/config/navigation.xml','nav');
    $container = new Zend_Navigation($config);
    $view->navigation($container);

    // Tell Zend were it can find your custom helpers and what
    // the prefix is going to be.

   $view->addHelperPath(
          APPLICATION_ROOT . '/library/MyApp/View/Helper/Navigation',
          'MyApp_View_Helper_'
          );

}

接下来,创建自定义视图助手,并把它放在“addHelperPath”路径。 根据你想做什么,你需要至少实现自己htmlify功能。 看看的Zend /搜索/帮助/导航/ Menu.php作为一个例子。

class MyApp_View_Helper_MyMenu extends Zend_View_Helper_Navigation_Menu
{
    public function myMenu(Zend_Navigation_Container $container = null)
    {
        if (null !== $container) {
            $this->setContainer($container);
        }
        return $this;
    }

    protected function htmlify(Zend_Navigation_Page $page ) 
    {
        ...
    }
}

接下来,在您的PHTML脚本:

   <?php echo $this->navigation()->myMenu()->setMaxDepth(0); ?>

要不就

   <?php echo $this->navigation()->myMenu(); ?>

现在,如果你想自己的自定义属性添加到生成的HTML你可以将它们添加到您的导航INI或XML文件。 例如:

<home>
  <label>Home</label>
  <uri>/</uri>
  <img>
      <src>/images/MyIcon.gif</src>
  <img>
</home>

自定义XML标签<img>将被存储为导航页面的属性,并且可以取这样的:

foreach ($iterator as $page) {

    ...

    $properties = new Zend_Config($page->GetCustomProperties());
    $myPicture = $properties->img->src;

    ...
}

希望这可以帮助。 彼得



文章来源: Getting Zend_Navigation menu to work with jQuery's Fisheye