0

我目前正在使用 Zend Framework 1.12 创建一个项目管理系统,但我遇到了该Zend_Navigation::Sitemap()方法的问题。

我在其中有一个名为的控制器SitemapControllerindexAction()它禁用了布局。然后,我的/views/scripts/sitemap/index.phtml脚本渲染站点地图。

问题是:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"/>

这就是我在/sitemapURI 中得到的全部内容。即使我navigation.xml的被填满。

这是我的所有代码:

索引.phtml

<?php
$this->navigation()->sitemap()->setFormatOutput(true)
                              ->setUseSchemaValidation(false)
                              ->setUseXmlDeclaration(true)
                              ->setUseSitemapValidators(true);
echo $this->navigation()->sitemap()->render($this->navigation);
?>

站点地图控制器.php

<?php
class SitemapController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {
        $this->view->layout()->disableLayout();
    }
}

引导程序.php

/**
* @return Zend_Navigation
*/
protected function _initNavigation()
{
    $view = $this->bootstrap('layout')->getResource('layout')->getView();
    $config = new Zend_Config_Xml(APPLICATION_PATH.'/configs/navigation.xml', 'nav');
    $navigation = new Zend_Navigation($config);
    $view->navigation($navigation);
}

导航.xml

<?xml version="1.0" encoding="UTF-8"?>
<configdata>
    <nav>
        <home>
            <label>Tableau de Bord</label>
            <controller>index</controller>
            <action>index</action>
        </home>
        <project>
            <label>Projets</label>
            <controller>project</controller>
            <action>index</action>
        </project>
        <tasks>
            <label>Tâches</label>
            <controller>tasks</controller>
            <action>index</action>
        </tasks>
        <messages>
            <label>Messages</label>
            <controller>messages</controller>
            <action>index</action>
        </messages>
    </nav>
</configdata>

有人能告诉我为什么它没有按预期呈现站点地图吗?

4

2 回答 2

4

有没有办法改变 Zend_Navigation 中的编码?

我建议您在构建菜单树或从您的 navigation.xml 中检查编码。

来自 Zend_Navigation 文档

注意 默认使用 UTF-8 编码

默认情况下,Zend Framework 使用 UTF-8 作为其默认编码,并且,针对这种情况,Zend\View 也是如此。可以使用 setEncoding() 方法(或 encoding 实例化参数)在视图对象本身上设置不同的字符编码。然而,由于 Zend\View\Interface 没有为编码定义访问器,如果您使用 Dojo 视图助手的自定义视图实现,您可能没有 getEncoding() 方法,这是视图助手内部使用的方法用于确定要编码的字符集。

如果您不想在这种情况下使用 UTF-8,则需要在自定义视图实现中实现 getEncoding() 方法。

我在处理 ISO-8859-1 和 JSON 时有时会发生这种情况,它只是削减了输出,我觉得这可能与您的语言有关。

更新

这是我在我的代码中使用的sitemapAction

/**
 * Shows the site map.
 *
 * @return string
 */
public function sitemapAction()
{
    $this->view->layout()->disableLayout();
    $config = new Zend_Config_Xml(APPLICATION_PATH . DS . 'configs' . DS . 'navigation.xml', 'mainnav');
    $container = new Zend_Navigation($config);
    $this->view->navigation($container);
    $this->_helper->viewRenderer->setNoRender(true);
    $response = $this->getResponse();
    $response->setHeader('Content-Type', 'text/xml');
    echo $this->view->navigation()->sitemap();
}
于 2012-10-17T05:13:21.267 回答
1

基于@Saul Martínez 的回答,我编写了代码来生成站点地图。它不使用任何 XML 文件,但可以从数据库中填充链接。链接在这里:

Zend_Navigation 用数组覆盖?

于 2013-04-17T07:04:24.477 回答