2011-10-26 3 views
2

Google 사이트 도구에서 피드 생성기를 구현하기 위해 노력하고 있습니다. Zend는 피드 작성자 클래스를 통합하므로 피드 형식으로 Atom을 사용하기로 결정했습니다.Zend_Feed_Writer_Feed에 네임 스페이스 추가

실제 제품 데이터를 주입하는 베어 본 Atom 피드를 구축하는 작업을 해봤지만 상당히 심각한 문제가 발생했습니다.

Google은 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가 registerNamespace는 확실히 좋은 시작처럼 보인다 내 대답 좋아 – GordonM

+0

모습을 작동하지 않은 이유를 설명 할 수 Zend_Feed_Writer와는 아무 상관이없는 것으로 보인다,하지만 어떻게 내가 그 다음 설정합니까 Google 특정 태그를 추가하거나 표준 atom 태그에 Google 특정 네임 스페이스를 추가 할 수 있습니까? – 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

에서 – GordonM

+1

표준 태그에 네임 스페이스를 출력해야합니다. . 이해할 수 없지만 필요한 항목을 업데이트 할 수 있습니까? – Ashley

+0

Google Merchant 피드에 추가로 필요합니다. 태그를 표준 atom 태그와 섞을 g : 네임 스페이스 (예 : , )로 바꿉니다. 피드에 네임 스페이스가 추가되면 해당 태그를 추가 할 수 있어야합니다 – GordonM

1

Google 판매자 피드 XML 아톰 1.0

내 젠드 프레임 워크 구글 제품의 문제를 해결했다. 내가 생각하기에 메인 클래스를 오버라이드했지만 내 프로젝트에서 사용한 더 나은 솔루션을 발견했다. 모든

먼저 당신은 젠드 프로젝트가 필요합니다 : 당신이 당신의 자신을 만들 필요가 다음

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

: P는 다음이처럼/도서관/MyProject 폴더의 일부 폴더를 만드는 새로운 피드 확장을 작성해야 신장. 내 프로젝트에서 직접 내 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> 
. 
. 
. 
. 
관련 문제