链接到帖子中的解决方案不会影响导航,因为 Zend_Navigation_Page_Mvc 使用 Zend_Controller_Action_Helper_Url 而不是 Zend_View_Helper_Url。您必须覆盖 Zend_Controller_Action_Helper_Url::url(),然后将您的助手添加到助手代理以影响 Zend_Navigation。
在我的实现中,我使用“_fragment”选项/参数来帮助防止名称冲突:
require_once('Zend/Controller/Action/Helper/Url.php');
class My_Controller_Action_Helper_Url extends Zend_Controller_Action_Helper_Url
{
public function url(array $urlOptions = array(), $name = null, $reset = false, $encode = true)
{
$fragment = '';
if(isset($urlOptions['_fragment'])) {
$fragment = '#' . $urlOptions['_fragment'];
unset($urlOptions['_fragment']);
}
return parent::url($urlOptions, $name, $reset, $encode) . $fragment;
}
}
然后,在我用来配置 Zend_Navigation 的 XML 文件中,我创建了一个 _fragment 参数:
<page>
<id>pageId</id>
<label>Page Label</label>
<module>foo</module>
<params>
<_fragment>bar</_fragment>
</params>
<route>default</route>
</page>