sitemap.xml készítése Zend_Navigation objektummal

Ha egy egyszerűbb nem teljesen dinamikus weboldalunk van amit Zend Framework alapokon fut és az oldal navigációját, nem egy navigation.xml fájlból vagy adatbázisból építjük fel, ebben az esetben is szükségünk lehet, a sitemap-re. A sitemap meglétét a keresők is pozitívan értékelik egy weboldal esetében, még jobb ha ez a sitemap, az aktuális oldaltérképet tartalmazza. Ha vannak olyan speciális oldalaink amit úgy generálunk,  azaz tartalma megszűnhet változhat, az oldal maga megszűnhet vagy létrejöhet akkor ennek a sitemap.xml-nek is változnia kell!

Mit kell ehhez tennünk?

Készítsük el a

SitemapControllert extends Zend_Controller_Action {
public function init() {
}


public function indexAction(){
}
}

és a hozzátartozó nézetet views/scripts/sitemap/index.phtml fájlt.

init() függvényünk tartalma legyen:

$this->_helper->contextSwitch()
->addContext('txt', array('suffix'=>'txt', 'headers'=>array('Content-Type'=>'text/plain')))
->addActionContext('robots','txt')
->addActionContext('sitemap','xml')
->initContext();

Ezzel beállítjuk kontextust, hogy szöveges tartalmat még pedig XML-t generálunk.

indexAction(){} eseményünk tartalma mégpedig legyen az alábbi:

$pages = array(
array(
'label' => 'Home',
'uri' => '/',
));

egy tömbbe gyűjtsük össze az oldalakat és a hozzájuk tartozó URI-ket, azaz a domainnév mentes elérési útvonalakat. Ezt tegyük meg minden statikus oldalra. Ha vannak olyan oldalaink amiket, úgy generálunk és ehhez tudjuk az oldal nevét és URI-jét mondjuk egy adatbázisból lekérdezve, vagy valamilyen logika alapján ez generálva van, akkor a $pages tömbbhöz adjuk hozzá ezen oldalakat is.

Pl így:

for($i = 0; $i < 5; $i++){
unset($page);
$page['label'] = 'Oldal #'.$i.;
$page['uri'] = '/oldal/egyedioldal-'.$i;
array_push($pages,$page);
}

Így a $pages tömbbhöz hozzáadunk még + 5 oldalt (Pl.: Oldal #1 -> /oldal/egyedioldal-1 stb…)
Hozzunk létre egy $container Zend_Navigation objektumot aminek paramétere legyen a $pages tömb azaz az elérhető oldalak listája. Adjuk át ezt a nézetnek a navigation($container) függvény segítségével.

$container = new Zend_Navigation($pages);
$this->view->navigation($container);

Ha elrendezés alapú megjelenítést használunk akkor használjuk a

$this->_helper->layout->disableLayout();

, ami ezt elveti. Végül állítsuk be, hogy xml-t küldünk ki:

$this->getResponse()->setHeader('Content-Type', 'text/xml; charset=utf-8');

A views/scripts/sitemap/index.phtml fájlunk tartalma pedig legyen a következő:
<?php
echo $this->navigation()->sitemap();
?>

ezzel sikeresen legeneráltuk a http://yourdomain.tld/sitemap eseményt, de be kellene állítanunk, hogy a http://yourdomain.tld/sitemap.xml kérésre is megjelenjen a sitemap-ünk. Ezt a következő képen kell megtennünk, egy új útvonalat kell beállítanunk az application/configs/application.ini-ben:

resources.router.routes.sitemap.route = "sitemap.xml"
resources.router.routes.sitemap.defaults.controller = "sitemap"
resources.router.routes.sitemap.defaults.action = "index"
resources.router.routes.sitemap.defaults.format = "xml"

Ha mindent jól csináltunk akkor hogy a http://yourdomain.tld/sitemap.xml kérésre megjelenik a sitemapünk, amit a pl a Google webmestereszközök keresztül eltudunk küldeni a Google-nak és nem kell attól tartanunk, hogy tartalma nem egyezik meg a weboldallal 🙂

Reklámok

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s