我目前正在使用Zend Framework 1.12创建项目管理系统,我遇到了Zend_Navigation::Sitemap()
方法的问题。
我有一个名为SitemapController
的控制器,里面有indexAction()
,用于禁用布局。然后,我的/views/scripts/sitemap/index.phtml
脚本呈现站点地图。
问题是:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"/>
这是我在/sitemap
URI中获得的全部内容。即使我的navigation.xml
已填满。
这是我的所有代码:
index.phtml
<?php
$this->navigation()->sitemap()->setFormatOutput(true)
->setUseSchemaValidation(false)
->setUseXmlDeclaration(true)
->setUseSitemapValidators(true);
echo $this->navigation()->sitemap()->render($this->navigation);
?>
SitemapController.php
<?php
class SitemapController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
}
public function indexAction()
{
$this->view->layout()->disableLayout();
}
}
bootstrap.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);
}
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>
有人可以告诉我为什么它不会像现在这样呈现站点地图吗?
答案 0 :(得分:4)
有没有办法在Zend_Navigation中更改编码?
我建议您在构建菜单树时检查编码,或者从navigation.xml中检查编码。
注意默认使用的UTF-8编码
默认情况下,Zend Framework使用UTF-8作为其默认编码,并且特定于这种情况,Zend \ View也可以。可以使用setEncoding()方法(或编码实例化参数)在视图对象本身上以不同方式设置字符编码。但是,由于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();
}
答案 1 :(得分:1)
根据@SaulMartínez的回答,我编写了生成站点地图的代码。它不使用任何XML文件,但可以从数据库填充链接。这是链接: