Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend_导航_页面_Mvc和片段标识符_Php_Zend Framework_Zend Navigation_Zend Framework Mvc - Fatal编程技术网

Php Zend_导航_页面_Mvc和片段标识符

Php Zend_导航_页面_Mvc和片段标识符,php,zend-framework,zend-navigation,zend-framework-mvc,Php,Zend Framework,Zend Navigation,Zend Framework Mvc,我在我的网站上使用Zend_导航。大多数项目是Zend\u Navigation\u Page\u Mvc,而不是Zend\u Navigation\u Page\u Uri。我知道我可以很容易地在Zend\u Navigation\u Page\u Uri项中添加一个,但这不是我想要的优雅解决方案。上有几个解决方案,但它们扩展了URL帮助器,并且不影响导航 我已经使用了一个子类Zend\u View\u Helper\u Navigation\u菜单来呈现菜单。也许有一种方法可以通过htmli

我在我的网站上使用
Zend_导航
。大多数项目是
Zend\u Navigation\u Page\u Mvc
,而不是
Zend\u Navigation\u Page\u Uri
。我知道我可以很容易地在
Zend\u Navigation\u Page\u Uri
项中添加一个,但这不是我想要的优雅解决方案。上有几个解决方案,但它们扩展了URL帮助器,并且不影响导航


我已经使用了一个子类
Zend\u View\u Helper\u Navigation\u菜单
来呈现菜单。也许有一种方法可以通过
htmlify()
函数来实现这一点?

我最终向传递到
Zend\u Navigation
中的页面数组添加了一个名为
fragment
的属性,然后在我的子类
Zend\u View\u Helper\u Navigation\u菜单::htmlify()
中检查它。这是我的
htmlify()
代码:

/**
 * Returns an HTML string containing an 'a' element for the given page if
 * the page's href is not empty, and a 'span' element if it is empty
 *
 * Overrides {@link Zend_View_Helper_Navigation_Abstract::htmlify()}.
 *
 * @param  Zend_Navigation_Page $page  page to generate HTML for
 * @return string                      HTML string for the given page
 */
public function htmlify(Zend_Navigation_Page $page)
{
    // get label and title for translating
    $label = $page->getLabel();
    $title = $page->getTitle();

    // translate label and title?
    if ($this->getUseTranslator() && $t = $this->getTranslator()) {
        if (is_string($label) && !empty($label)) {
            $label = $t->translate($label);
        }
        if (is_string($title) && !empty($title)) {
            $title = $t->translate($title);
        }
    }

    // get attribs for element
    $attribs = array(
        'id'     => $page->getId(),
        'title'  => $title,
        'class'  => $page->getClass()
    );

    // does page have a href?
    if ($href = $page->getHref()) {
        $element = 'a';
        $attribs['href'] = $href;
        $attribs['target'] = $page->getTarget();
        // fragment identifier
        if (0 < strlen($fragment = $page->get('fragment'))) {
            $attribs['href'] .= '#' . $fragment;
        }
    } else {
        $element = 'span';
    }

    return '<' . $element . $this->_htmlAttribs($attribs) . '><span>'
         . $this->view->escape($label)
         . '</span></' . $element . '>';
}
/**
*返回包含给定页面的“a”元素的HTML字符串,如果
*页面的href不为空,如果为空,则为“span”元素
*
*重写{@link Zend_View_Helper_Navigation_Abstract::htmlify()}。
*
*@param Zend_Navigation_Page$用于生成HTML的页面
*@返回字符串给定页面的HTML字符串
*/
公共功能htmlify(Zend_导航_页面$Page)
{
//获取用于翻译的标签和标题
$label=$page->getLabel();
$title=$page->getTitle();
//翻译标签和标题?
如果($this->getUseTranslator()&&&$t=$this->getTranslator()){
如果(是字符串($label)&&!空($label)){
$label=$t->translate($label);
}
如果(是字符串($title)&&!空($title)){
$title=$t->translate($title);
}
}
//获取元素的属性
$attribs=数组(
'id'=>$page->getId(),
“title”=>$title,
'class'=>$page->getClass()
);
//页面是否有a href?
如果($href=$page->getHref()){
$element='a';
$attribs['href']=$href;
$attribs['target']=$page->getTarget();
//片段标识符
如果(0get('fragment')){
$attribs['href'].='#'.$fragment;
}
}否则{
$element='span';
}
返回“”
.$this->view->escape($label)
. '';
}
中的解决方案不会影响导航,因为Zend\u navigation\u Page\u Mvc使用Zend\u Controller\u Action\u Helper\u Url而不是Zend\u View\u Helper\u Url。您必须重写Zend_控制器\u操作\u助手\u Url::Url(),然后它才能影响Zend_导航

在我的实现中,我使用“_fragment”选项/param来帮助防止名称冲突:

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_导航的XML文件中,我创建了一个_片段参数:

<page>
    <id>pageId</id>
    <label>Page Label</label>
    <module>foo</module>
    <params>
        <_fragment>bar</_fragment>
    </params>
    <route>default</route>
</page>

页面ID
页面标签
福
酒吧
违约

“但这不是我正在寻找的优雅解决方案”-问题出在哪里?@jakenoble-我想在
Zend_Navigation_Page_Mvc
页面上使用片段标识符您想在
Zend_Navigation_Page_Mvc
页面上使用片段标识符吗?