2011-10-26 133 views
2

我正在實施供稿生成器,以便與我們網站的Google Product Search一起使用。由於Zend合併了一個feed編寫器類,我決定和Atom一起提供feed格式。將名稱空間添加到Zend_Feed_Writer_Feed

我已經做了一些工作,構建了一個真正的產品數據將被注入的裸機Atom feed,但我碰到了一個相當嚴重的障礙。

Google希望Feed文件成爲RSS或Atom的自定義版本,併爲Google產品搜索使用的標籤附加了一個名稱空間。例如,<feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0">。我一直在試圖弄清楚如何附加額外的命名空間並將其用於生成提要,但Zend關於此問題的文檔充其量只是含糊不清,提到了有關擴展的一些內容,而沒有深入細節。

我也在向zend_feed註冊命名空間的文檔中找到提及,所以我嘗試Zend_Feed::registerNamespace ('g', 'http://base.google.com/ns/1.0')來附加所需的命名空間,但是這看起來沒有做任何事情。

那麼如何將額外的名稱空間添加到zend提要?它是否需要繼承zend_feed_writer_feed?有沒有允許這種插件系統?或者我只需要以某種方式註冊名稱空間?

+0

這似乎是那麼Zend_Feed無關與Zend_Feed_Writer,這可以解釋爲什麼registerNamespace沒有工作 – GordonM

+0

看看我的回答 – Michelangelo

回答

3

從使用Zend_Feed_Atom擴展和補充:

class Gordons_Feed_Atom extends Zend_Feed_Atom { 
    protected function _mapFeedHeaders($array) { 
     $feed = parent::_mapFeedHeaders($array); 
     $feed->setAttribute('xmlns:g', '"http://base.google.com/ns/1.0'); 
     return $feed; 
    } 
} 

更新:

你將不得不重寫_mapFeedEntries功能,然後添加條目的人則補充說:

$cond = $this->_element->createElement('g:condition'); 
    $cond->appendChild($this->_element->createCDATASection($dataentry->gcondition)); 
    $entry->appendChild($cond); 

你可以隨時這樣做:

protected function _mapFeedEntries(DOMElement $root, $array) 
{ 
    parent::_mapFeedEntries($root, $array); 
    foreach($array as $dataentry) { 
     //Add you're custom ones 
     $cond = $this->_element->createElement('g:condition'); 
     $cond->appendChild($this->_element->createCDATASection($dataentry->gcondition)); 
     $entry->appendChild($cond); 
    } 
} 

該功能將確保您獲得標準的,然後你是自定義的。

+0

好吧,看起來像肯定的一個很好的開始,但我怎麼然後設置Google專用標籤,還是將Google專用名稱空間添加到標準原子標籤? – GordonM

+1

這應該在標準標籤中輸出您的名稱空間,如下所示: 我不太明白,您需要什麼,您可以更新嗎? – Ashley

+0

Google Merchant Feed需要一些額外的功能從他們的克標籤:命名空間來與標準原子標籤被混合在例如,和。<克:可用性>一旦我有附接到進料我還需要能夠添加這些標籤的命名空間。進給我如何去這樣做 – GordonM

1

谷歌商家供稿XML的Atom 1.0

我已經解決了我的Zend框架谷歌產品的問題。我認爲是重寫主要類,但是我發現了我在項目中使用的更好的解決方案。

首先你需要一個Zend項目:P,那麼你需要創建一個新的進紙延伸在你的/庫/ MyProject的文件夾中創建一些文件夾,像這樣的:

library/Myproject/Feed/ 
└── Writer 
    └── Extension 
     └── Google 
      ├── Entry.php 
      ├── Feed.php 
      └── Renderer 
       ├── Entry.php 
       └── Feed.php 

,那麼你必須創建自己的延期。我在自己的項目中創建了自己的擴展程序Google http://code.google.com/p/shineisp/source/browse/#svn%2Ftrunk%2Flibrary%2FShineisp%2FFeed%2FWriter%2FExtension%2FGoogle%253Fstate%253Dclosed

您可以隨意使用我的代碼!

. 
. 
. 
. 
<entry> 
    <title><![CDATA[Hosting Base]]></title> 
    <summary><![CDATA[this is the summary.]]></summary> 
    <updated>2012-04-23T13:09:55+02:00</updated> 
    <link rel="alternate" type="text/html" href="http://www.mysite.com/hosting.html"/> 
    <g:id>hosting-base</g:id> 
    <g:availability/> 
    <g:google_product_category/> 
    <g:image_link>http://www.mysite.com/media/products/854_web-hosting-base.gif</g:image_link> 
    <g:price>10.89</g:price> 
    <g:condition>new</g:condition> 
</entry> 
. 
. 
. 
. 
相關問題