Php 如何设置Zend\u View\u Helper\u Navigation\u XXX使用的id前缀

Php 如何设置Zend\u View\u Helper\u Navigation\u XXX使用的id前缀,php,zend-framework,zend-framework-mvc,Php,Zend Framework,Zend Framework Mvc,当我在视图中呈现一个Zend_Nagivation实例时,默认情况下,锚定标记的id被指定为视图帮助器的前缀,后面是破折号,然后是页面的id 第1页的锚id示例(均使用相同的Zend_Nagivation实例): Zend\u查看\u帮助程序\u导航\u菜单=“菜单-1” Zend\u View\u Helper\u Navigation\u Breadcrumbs=“Breadcrumbs-1” My\u View\u Helper\u Navigation\u MyMenu=“MyMenu

当我在视图中呈现一个
Zend_Nagivation
实例时,默认情况下,锚定标记的id被指定为视图帮助器的前缀,后面是破折号,然后是页面的id

第1页的锚id示例(均使用相同的
Zend_Nagivation
实例):

  • Zend\u查看\u帮助程序\u导航\u菜单
    =“菜单-1”
  • Zend\u View\u Helper\u Navigation\u Breadcrumbs
    =“Breadcrumbs-1”
  • My\u View\u Helper\u Navigation\u MyMenu
    =“MyMenu-1”
这在大多数情况下都是完美的,但我想手动设置前缀,但我找不到方法


解决方案

指定前缀可以通过添加以下代码来完成,然后在渲染时调用
setIdPrefix()

class My_View_Helper_Navigation_MyMenu extends Zend_View_Helper_Navigation_Menu
{
    protected $_idPrefix = null;

    /**
     * Set the id prefix to use for _normalizeId()
     *
     * @param string $prefix
     * @return My_View_Helper_Navigation_MyMenu
     */
    public function setIdPrefix($prefix)
    {
        if (is_string($prefix)) {
            $this->_idPrefix = $prefix;
        }

        return $this;
    }

    /**
     * Use the id prefix specified or proxy to the parent
     *
     * @param string $value
     * @return string
     */
    protected function _normalizeId($value)
    {
        if (is_null($this->_idPrefix)) {
            return parent::_normalizeId($value);
        } else {
            return $this->_idPrefix . '-' . $value;
        }
    }
}

罪魁祸首是
Zend\u-View\u-Helper\u-Navigation\u-HelperAbstract::\u-normalizeId()
,除了创建您所需的每个导航视图帮助器的自定义版本之外,我看不到其他解决方案。

罪魁祸首是
Zend\u-View\u-HelperAbstract:\u-HelperAbstract:\u-normalizeId()
我认为除了创建您所需的每个导航视图帮助器的自定义版本之外,没有其他解决方案。

导航是如何配置的?从伊尼?类?在
Zend_Navigation
实例中,我目前有四个,两个是从数据库构建的,两个是从xml文件构建的。无论数据源是什么,它们都会发生这种行为。你知道你可以调用你的助手“Menu”而不是“MyMenu”,在这种情况下,插件加载程序将代替ZF加载你的助手one@Phil-谢谢!我记得在最初编写帮助程序时遇到命名问题。我可能把一个问题错当成了另一个问题。这里是线索:啊,忘了导航助手代理系统。重载这将需要更多的工作。如何配置导航?从伊尼?类?在
Zend_Navigation
实例中,我目前有四个,两个是从数据库构建的,两个是从xml文件构建的。无论数据源是什么,它们都会发生这种行为。你知道你可以调用你的助手“Menu”而不是“MyMenu”,在这种情况下,插件加载程序将代替ZF加载你的助手one@Phil-谢谢!我记得在最初编写帮助程序时遇到命名问题。我可能把一个问题错当成了另一个问题。这里是线索:啊,忘了导航助手代理系统。超载这将需要更多的工作。我现在明白了,菲尔,谢谢!它使用
get_class()
,然后使用类名的最后一部分(下划线分隔)和小写字母作为前缀。您的回答引导我找到了解决方案,因此我接受它。谢谢你,菲尔!我现在明白了,菲尔,谢谢!它使用
get_class()
,然后使用类名的最后一部分(下划线分隔)和小写字母作为前缀。您的回答引导我找到了解决方案,因此我接受它。谢谢你,菲尔!