我使用 Zend_Navigation 生成站点地图,我想向此站点地图添加图像,现在我不知道如何完成此操作,我使用以下(工作)代码来生成站点地图
foreach($sitemapItems as $item)
{
$newSite = new Zend_Navigation_Page_Uri();
$newSite->uri = 'http://' . $_SERVER['HTTP_HOST'] . $item->getSpeakingUrl();
$newSite->lastmod = $item->getUpdatedAt();
$newSite->changefreq = 'weekly';
$this->_navigation->addPage($newSite);
}
$this->view->navigation($this->_navigation);
$this->view->navigation()->sitemap()->setFormatOutput(true);
输出如下:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://test.dev/pictures/site-28.html</loc>
<lastmod>2010-03-11T17:47:30+01:00</lastmod>
<changefreq>weekly</changefreq>
</url>
....
我需要在 Url 部分中输出以下内容
<image:image>
<image:loc>http://example.com/image.jpg</image:loc>
</image:image>
我试着设置
$newSite->image = URI
但它不起作用,我也尝试通过
添加自定义属性$newSite->__set('image', array('loc' => URI));
有谁知道我想要的是否可能?我在文档或网络中找不到任何内容...
感谢您的宝贵时间, 多米尼克
好吧,首先您需要做的是扩展 Zend_Navigation_Page_Uri 并将您的图像变量添加到其中,如下所示:
class Mylib_NavPageUriImage extends Zend_Navigation_Page_Uri
{
protected $_image = null;
public function setImage($image)
{
if (null !== $image && !is_string($image)) {
require_once 'Zend/Navigation/Exception.php';
throw new Zend_Navigation_Exception(
'Invalid argument: $image must be a string or null');
}
$this->_image = $image;
return $this;
}
public function getImage()
{
return $this->_image;
}
public function toArray()
{
return array_merge(
parent::toArray(),
array(
'image' => $this->getImage()
));
}
}
将该类添加到library/Mylib/NavPageUriImage.php中。
为了使其可用,您需要注册名称空间(我喜欢在引导程序中注册我的名称空间,但也可以从 app.ini 完成),因此在引导程序类中添加以下内容:
function _initNamespace()
{
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace('Mylib_');
}
然后在你的控制器中你现在可以使用:
$newSite = new Mylib_NavPageUriImage();
$newSite->uri = 'http://' . $_SERVER['HTTP_HOST'] . $item->getSpeakingUrl();
$newSite->lastmod = $item->getUpdatedAt();
$newSite->changefreq = 'weekly';
$newSite->image = 'some image';
不推荐以下内容,您需要扩展您自己的导航助手并使用它(我现在没有时间玩它)全部添加您自己的 imageValidator
然后在library/zend/view/helper/navigation/sitemap.php中添加以下行(在添加优先级元素if语句下,我的在443处结束,所以我在444处添加了它):
// add 'image' element if a valid image is set in page
if (isset($page->image)) {
$image = $page->image;
$imgDom = $dom->createElementNS(self::SITEMAP_NS, 'image:image');
$imgDom->appendChild($dom->createElementNS(self::SITEMAP_NS, 'image:loc', $image));
$urlNode->appendChild($imgDom);
}