PluXml.org

Blog ou CMS à l'Xml

Régénérer la liste des tags à partir des articles(Edit)

Pour régénérer le fichier tags.xml :

1. créer une page statique

2. copier le code ci-dessous dans la page statique

3. sauvegarde

Pour PluXml 5.0+

<?php
# Régénérer tag.xml : permet de recréer la liste des tags à partir des articles. 
# révision 1.0 par Amaury

if(!defined('PLX_ROOT')) exit;

global $plxShow;

class art2taglist extends plxMotor
{
	public function __construct($plxMotor) {
		$this->plxMotor = $plxMotor;

	}

        function getArtDate($filename) {
               $artInfos = $this->artInfoFromFilename($filename);
               return $artInfos['artDate'];
        }
}

$art2taglist = new art2taglist($plxMotor);

$plxGlob_arts = plxGlob::getInstance(PLX_ROOT.$plxShow->plxMotor->aConf['racine_articles']);
$aFiles = $plxGlob_arts->query('/[0-9]{4}.[0-9]{3}.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/','art','rsort',0,false,'before');


$xml = "<?xml version='1.0' encoding='".PLX_CHARSET."'?>\n";

$xml .= "<document>\n";

if(is_array($aFiles)) { # On a des fichiers
    while(list($k,$v) = each($aFiles)) { # On parcourt tous les fichiers
        $temp = $plxShow->plxMotor->parseArticle(PLX_ROOT.$plxShow->plxMotor->aConf['racine_articles'].$v);
         if( intval(sizeof($plx_arts[$temp['categorie']])) < $artsByCategory OR $artsByCategory == 0) {
			$plx_arts[$temp['categorie']][] = $temp;
	}


    }
    if($plx_arts) { # On a des articles
		echo "<ul>";
                # On boucle sur nos articles
		foreach ($plx_arts as $k => $v) {
			$cat_num = $k;
		
			# On boucle sur les articles de la catégories
			while(list($null, $art) = each($v)) {
				$art_num = $art['numero'];
				$art_url = plxUtils::strCheck(($art['url']));
				$art_title = plxUtils::strCheck(($art['title']));

				$art_date = $art2taglist->getArtDate($art['filename']);

                                $art_tags = $art['tags'];
				echo '<li><a href="'.$plxShow->plxMotor->aConf['racine'].'?article'.$art_num.'/'.$art_url.'">'.$art_title. '</a> : ' . $art_tags . '</li>';
                                $xml .= "<article number='" . $art_num . "' date='" . $art_date . "' active='1'><![CDATA[" . $art_tags . "]]></article>\n";
			}
			echo "</ul>";
        }

    }
}

$xml .= "</document>\n";
plxUtils::write($xml, PLX_ROOT.$plxShow->plxMotor->aConf['tags']);             

echo "Fichier tags.xml mis à jour.";

?>

En version 5.3.1 (et probablement pour les autres aussi), il faut corriger deux lignes :

- remplacer la ligne 25 par :

$aFiles = $plxGlob_arts->query('/[0-9]{4}.*.[a-z0-9-]+.xml$/','art','rsort',0,false,'before');

pour prendre en compte les articles qui sont dans plusieurs catégories (et dont le nom contient des ",")

- remplacer l'avant dernière ligne par :

plxUtils::write($xml, 'data/tags.xml');

Le fichier généré est donc écrit dans le répertoire data et est à déplacer dans le répertoire data/configuration.