2010-11-23 45 views
0

Je générer un plan Sitemap à l'aide Zend_Navigation et je voulais ajouter des images à ce plan du site, maintenant je suis pas idée comment obtenir ce fait, j'utiliser le code suivant (travail) pour générer le plan du siteimage Plan du site avec 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); 

la sortie est la suivante:

<?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> 
     .... 

J'ai besoin de la sortie suivante dans la partie Url

<image:image> 
    <image:loc>http://example.com/image.jpg</image:loc> 
</image:image> 

j'ai essayé de définir simplement

$newSite->image = URI 

mais il n'a pas fonctionné aussi j'ai essayé d'ajouter attribut personnalisé via

$newSite->__set('image', array('loc' => URI)); 

Est-ce que quelqu'un sait si ce que je veux est même possible? Je ne peux pas trouver quoi que ce soit dans la documentation ou web ...

Merci pour votre temps, Dominik

Répondre

0

Oki donc d'abord ce que vous devez faire est de prolonger Zend_Navigation_Page_Uri et vous ajoutez l'image var êtes à elle SMTH comme ci-dessous :

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() 
      )); 
    } 
} 

Ajouter cette classe à la bibliothèque/Mylib/NavPageUriImage.php.

Pour utilisable, vous devez faire enregistrer l'espace de noms (j'aime enregistrer mes espaces de noms d'amorçage, mais il peut être fait à partir App.ini aussi) afin de vous classe de bootstrap ajoutez ce qui suit:

function _initNamespace() 
    { 
     $autoloader = Zend_Loader_Autoloader::getInstance(); 
     $autoloader->registerNamespace('Mylib_'); 
    } 

Puis, en vous contrôleur vous pouvez maintenant utiliser:

$newSite = new Mylib_NavPageUriImage(); 
$newSite->uri = 'http://' . $_SERVER['HTTP_HOST'] . $item->getSpeakingUrl(); 
$newSite->lastmod = $item->getUpdatedAt(); 
$newSite->changefreq = 'weekly'; 
$newSite->image = 'some image'; 

EST pAS VOICI rECOMMANDÉ, vOUS aVEZ BESOIN dE PROLONGER vOUS ETES HELPER PROPRE dE NAVIGATION ET QUE l'UTILISATION (je n'ai pas le temps de jouer avec lui maintenant) ALLSO AJOUTEZ VOUS EST PROPRE imageValidator

Et puis dans la bibliothèque/zend/view/aide/navigation/sitemap.php ajouter les lignes suivantes (sous l'élément de priorité add instruction if, se termine le mien à 443 donc j'ajouté ceci à 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); 
}