Etiquetado de la entrada: clase


11
Abr 10

Clase para crear un sitemap XML

Dada la importancia del sitemap para que los motores de búsqueda nos indexen correctamente y como le queremos indicar esta clase nos puede ser muy útil.


<?php
	class sitemap {
		private var $list_url = array();
		public function add_list( $list_urls ) {
			for( $i = 0; $i < count( $list_urls ); $i++ ) {
				$this->add( $list_urls[$i]['loc'], $list_urls[$i]['priority'], $list_urls[$i]['lastmod'], $list_urls[$i]['changefreq'] );
			}
		}
		public function add( $url, $priority = 0.5, $lastmod = date( 'Y-m-d' ), $changefreq = 'monthly' ) {
			$this->list_url[] = array( 'loc' => $url, 'priority' => $priority, 'lastmod' => $lastmod, 'changefreq' => $changefreq );
		}
		public function generate( $file_name = NULL ) {
			$content = '<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
			foreach( $this->list_url as $value ) {
				$content .= '<url><loc>'.htmlspecialchars( utf8_encode( $value['loc'] ) ).'</loc>';
				if( isset( $value['priority'] ) ) $content .= '<priority>'.$value['priority'].'</priority>';
				if( isset( $value['lastmod'] ) ) $content .= '<lastmod>'.$value['lastmod'].'</lastmod>';
				if( isset( $value['changefreq'] ) ) $content .= '<changefreq>'.$value['changefreq'].'</changefreq>';
				$content .= '</url>';
			}
			$content .= '</urlset>';
			if( isset( $file_name ) ) {
				file_put_contents( $file_name, $content );
			}
			return( $content );
		}
	}
?>

Su uso es bastante sencillo, creamos un nuevo objeto denominado sitemap

$smap = new sitemap();

Para ir añadiendo páginas al sitemap:

$smap->add( 'http://www.dominio.com/' );

Si lo añadimos así nos genera el resto de los campos con un valor medio (priority=0.5, changefreq=monthly, lastmod=Fecha de hoy)

Para generar el sitemap:

echo( $smap->generate() );

Esto nos lo muestra. Si lo que queremos es guardarlo en un fichero tendríamos que añadir el nombre del fichero a la función.

Por último hay una función para añadir varias urls a la vez desde un array:

$urls = array(
     array(
          'loc' => 'http://www.dominio.com/',
          'priority' => 0.5,
          'changefreq' => 'monthly'
     ), array(
          'loc' => 'http://www.dominio.com/index.php',
          'priority' => 1,
          'changefreq' => 'weekly'
     ) );
$smap = new sitemap();
$smap->add_list( $urls );
echo( $smap->generate() );