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 🙂