Google ha desenvolupat una sèrie d'eines per a webmasters que es poden trobar a Google Webmaster Central, una de les quals és el Protocol Sitemaps, per tal que els desenvolupadors puguin publicar la llista de links de la seva web, ja que moltes tenen pàgines dinàmiques que tan sols són accessibles des de formularis, i així es poden donar a conèixer als principals cercadors que ho soporten com Google, MSN i Yahoo!.
El fitxer que s'ha de generar, està en format XML i conté una llista de les URL i algunes característiques com la freqüència d'actualització o una ponderació dins el global de la web. Un cop es té aquest fitxer, es pot donar d'alta als cercadors.
Per generar aquest fitxer de forma dinàmica, en symfony podem crear un nou mòdul que anomenem "sitemap", i que nomès té una acció "index" que genera el fitxer XML:
actions.class.php:
public function executeIndex()
{
$xml = array();
$xml[] = '<?xml version="1.0" encoding="UTF-8"?>';
$xml[] = '<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">';
$url = array(
'http://www.exemple.com/contacte',
'http://www.exemple.com/ajuda');
foreach($url as $item){
$xml[] = ' <url>';
$xml[] = ' <loc>'. $item . '</loc>';
$xml[] = ' <priority>0.5000</priority>';
$xml[] = ' <changefreq>monthly</changefreq>';
$xml[] = ' </url>';
}
foreach(ItemPeer::doSelect(new Criteria()) as $item){
$xml[] = ' <url>';
$xml[] = ' <loc>http://www.exemple.com/item/'. $item->getStrippedTitle() . '</loc>';
$xml[] = ' <priority>0.8000</priority>';
$xml[] = ' <changefreq>weekly</changefreq>';
$xml[] = ' </url>';
}
$xml[] = '</urlset>';
$this->map = implode("\n", $xml);
$response = $this->getResponse()->setContentType('text/xml');
}
indexSuccess.php
<?php decorate_with(false) ?>
<?php echo $map ?>
I als cercadors només cal indicar-los que l'adreça del Sitemap és http://www.exemple.com/sitemap
Comments
petit error en la creació del XML
Ei! he trobat el vostre blog i el trobo interessant... miraré de seguir-lo, malgrat veig q no teniu cap feed.
Sobre el post, a l'acció falta afefir:
$response = $this->getResponse(); $response->setContentType('text/xml'); //per indicar q enviem un XMLi en la 3a linia de l'acció, hi ha un interrogant de més al final de la linia.
Fins la propera,
Joan
Modificat
Gràcies Joan, ja ho hem actualitzat.
També hem afegit el link al feed RSS al peu de pàgina.
Marc
Gracies a vosaltres!!!
Doncs això... gràcies pel feed... us seguiré!!!
joan