Rev 343 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// Encodage : UTF-8// +-------------------------------------------------------------------------------------------------------------------+/*** Sitemap** Description : classe permettant de réaliser un fichier Sitemap pour eFlore*//Auteur original :* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @copyright Tela-Botanica 1999-2008* @link http://www.tela-botanica.org/wikini/eflore* @licence GPL v3 & CeCILL v2* @version $Id: Sitemap.class.php 1873 2009-03-31 10:07:24Z Jean-Pascal MILCENT $*/// +-------------------------------------------------------------------------------------------------------------------+/*** Classe crééant un Sitemap*/class Robot extends ScriptCommande {private $lastmod = '2008-04-28';private $changefreq = 'monthly';public function executer() {$cmd = $this->getParam('a');switch ($cmd) {case 'creer' :$this->creerSiteMap();break;default :trigger_error('Erreur : la commande "'.$cmd.'" n\'existe pas!'."\n", E_USER_ERROR);}}private function creerSiteMap() {// +-----------------------------------------------------------------------------------------------------------+// Initialisation des paramêtres variables$url_site = 'http://www.tela-botanica.org/';$url_eflore = $url_site.'eflore/%s/nt/%s/%s';$projets = array( array('id' => 25, 'code' => 'BDNFF', 'url' => $url_eflore, 'taxon_max' => 50000, 'onglets' => '*'),array('id' => 29, 'code' => 'BDNFM', 'url' => $url_eflore, 'taxon_max' => 50000, 'onglets' => 'synthese,synonymie,vernaculaire,chorologie,biblio,information,illustration,wiki'),array('id' => 38, 'code' => 'BDNBE', 'url' => $url_eflore, 'taxon_max' => 50000, 'onglets' => 'synthese,synonymie,chorologie,biblio,information,illustration,wiki'),array('id' => 45, 'code' => 'BDAFN', 'url' => $url_eflore, 'taxon_max' => 500000, 'onglets' => 'synthese,synonymie,chorologie,biblio,information,illustration,wiki'));$onglets = array( 'synthese' => '0.9','synonymie' => '0.6','vernaculaire' => '0.8','chorologie' => '0.7','biblio' => '0.8','information' => '0.2','illustration' => '0.9','wiki' => '0.3','cel' => '0.5');$xmlstr_sitemap = '<?xml version="1.0" encoding="UTF-8"?>'."\n".'<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '.'xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 '.'http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" '.'xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n".'</urlset>'."\n";$xmlstr_sitemapindex = '<?xml version="1.0" encoding="UTF-8"?>'."\n".'<sitemapindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '.'xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 '.'http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd" '.'xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n".'</sitemapindex>'."\n";// +-----------------------------------------------------------------------------------------------------------+// Initialisation des variables$UrlSet = null;$SiteMapIndex = null;$cpt_url = 1;$cpt_fichier = 1;$Taxon = new EfloreTaxon(true);// +-----------------------------------------------------------------------------------------------------------+// Lancement du traitementforeach ($projets as $projet) {// Gestion des onglets affichables pour le projet courrantif ($projet['onglets'] != '*') {$projet['onglets'] = array_flip(explode(',', $projet['onglets']));}// +-------------------------------------------------------------------------------------------------------+echo "Création des URLs des taxons pour le projet {$projet['code']} : ";$i = 1;$taxons = $Taxon->consulterTaxon($projet['id']);foreach ($taxons as $taxon) {// Seul les taxons du projet sont indexés, on exclue les taxons virtuelsif ($taxon['et']['id']['taxon'] < $projet['taxon_max']) {foreach ($onglets as $onglet => $priorite) {// Vérification que l'onglet est autorisé pour ce projetif ($projet['onglets'] == '*' || isset($projet['onglets'][$onglet])) {// Affichage en console et en cas de test...echo str_repeat(chr(8), ( strlen( $i ) + 1 ))."\t".$i++;// Création du fichier XML si nécessaireif (is_null($UrlSet)) {$UrlSet = new SimpleXMLElement($xmlstr_sitemap);}// Ajout de l'url$Url = $UrlSet->addChild('url');$Url->addChild('loc', sprintf($projet['url'], $projet['code'], $taxon['et']['id']['taxon'], $onglet));$Url->addChild('lastmod', $this->lastmod);$Url->addChild('changefreq', $this->changefreq);$Url->addChild('priority', $priorite);// Vérification écriture du fichier ou pasif ($cpt_url == 1) {$estimation = strlen($UrlSet->asXml());}if (49999 == $cpt_url++ || ($estimation * $cpt_url) > 20000000 || $i == (int)$this->getParam('t')) {$contenu = $UrlSet->asXml();$cpt_url = 1;$UrlSet = null;// Création du fichier Sitemap compressé$fichier_nom = 'sitemap'.$cpt_fichier++.'.xml';$compression = false;if (!is_numeric($this->getParam('t'))) {$compression = true;$fichier_nom .= '.gz';}$fichier = $this->getIni('log_chemin').$fichier_nom;$this->creerFichier($fichier, $contenu, $compression);// Création du XML d'index des Sitemap si nécessaireif (is_null($SiteMapIndex)) {$SiteMapIndex = new SimpleXMLElement($xmlstr_sitemapindex);}// Ajout du fichier Sitemap à l'index$SiteMap = $SiteMapIndex->addChild('sitemap');$SiteMap->addChild('loc', $url_site.$fichier_nom);$SiteMap->addChild('lastmod', date('c', time()));}if ($i == (int)$this->getParam('t')) {break;}}}}// En cas de test...if ($i == (int)$this->getParam('t')) {break;}}echo "\n";// Création du fichier d'index des Sitemapif (is_object($SiteMapIndex)) {$index_contenu = $SiteMapIndex->asXml();$index_fichier_nom = 'sitemap_index.xml';$index_fichier = $this->getIni('log_chemin').$index_fichier_nom;$this->creerFichier($index_fichier, $index_contenu);}}}}?>