Изображение Sitemap с Zend_Navigation - PullRequest
0 голосов
/ 23 ноября 2010

Я генерирую файл Sitemap с помощью 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));

Кто-нибудь знает, возможно ли то, что я хочу? я не могу найти что-либо в документах или в Интернете ...

Спасибо за ваше время, Dominik

1 Ответ

0 голосов
/ 23 ноября 2010

Итак, сначала вам нужно расширить 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()
            ));
    }
}

Добавить этот класс в библиотеку / 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

А затем в библиотеку / 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);
}

...