Rev 880 | 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 traitement
foreach ($projets as $projet) {
// Gestion des onglets affichables pour le projet courrant
if ($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 virtuels
if ($taxon['et']['id']['taxon'] < $projet['taxon_max']) {
foreach ($onglets as $onglet => $priorite) {
// Vérification que l'onglet est autorisé pour ce projet
if ($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écessaire
if (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 pas
if ($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écessaire
if (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 Sitemap
if (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);
}
}
}
}
?>