Des tags dans Pluxml
ti_pierre
Member
Bonjour à tous,
Après un bon retard, il est temps de vous dire comment nous avons fait.
Précautions avant usage :
Suite à la mise en place de ce système sur mon blog, j'ai constaté un très fort ralentissement du temps de chargement des pages.
Principe de fonctionnement :
J'ai demandé à Stephane qui est l'auteur de ce plugin de me faire un txt explicatif, je vous fait donc part de ce qu'il ma envoyé :
- Créer un dossier " plugins " à la racine de votre blog.
- Créer un dossier " tags " dans le dossier " plugins " crée précédement.
- Mettez le fichier tags.php dans le dossier tags crée à l'étape précédente.
Vous n'avez plus qu'à modifier les fichiers situé dans le dossier " themes/defaut "
- Ouvrir header.php :
Après :
Après :
Remplacer :
- Ouvrir sidebar.php :
Après :
Après un bon retard, il est temps de vous dire comment nous avons fait.
Précautions avant usage :
Suite à la mise en place de ce système sur mon blog, j'ai constaté un très fort ralentissement du temps de chargement des pages.
Principe de fonctionnement :
J'ai demandé à Stephane qui est l'auteur de ce plugin de me faire un txt explicatif, je vous fait donc part de ce qu'il ma envoyé :
Installation de la bête :Stéphane a écrit:Le principe de l'utilisation des tags est simple. Elle consiste à écrire dans le chapo ou le contenu d'un article, une liste de mots clés séparés par des virgules, entourés des balises [tags] et [/tags]
Exemple: [tags]tag-1, tag-2, tag-3[/tags]
1) Interagir avec le contenu d'un article à partir du thème
La boucle de lecture sur les articles dans le fichier home.php de notre theme se présente de cette façon
<?php while($plxShow->plxMotor->plxRecord_arts->loop()): # On boucle sur les articles ?>
.....
<?php endwhile; # Fin de la boucle sur les articles ?>
Si l'on veut intéragir avec le contenu de l'article en cours de lecture dans la boucle while, on va y ajouter l'appel de la fonction getArtTags() de notre classe plxtags tout de suite après le while:
<?php while($plxShow->plxMotor->plxRecord_arts->loop()): # On boucle sur les articles ?>
<?php $plxTags->getArtTags() # récuperation des tags ?>
...
<?php endwhile; # Fin de la boucle sur les articles ?>
Si l'on regarde le code de la fonction getArtTags
function getArtTags() {
# obligatoire pour avoir accès aux articles
global $plxShow;
# on récupere le contenu de l'article
$art = $plxShow->plxMotor->plxRecord_arts->result[$plxShow->plxMotor->plxRecord_arts->i];
# on recherche les balises tags et leur contenu
if (preg_match('#\[tags\]([^\]]*)\[\/tags\]#i', $art, $capture)) {
$this->tags = $this->_parseTags($capture[1]);
$art = str_replace($capture[0],'',$art);
}
if (preg_match('#\[tags\]([^\]]*)\[\/tags\]#i', $art, $capture)) {
$this->tags = $this->_parseTags($capture[1]);
$art = str_replace($capture[0],'',$art);
}
# on mémorise les modifications faites sur le contenu de l'article
$plxShow->plxMotor->plxRecord_arts->result[$plxShow->plxMotor->plxRecord_arts->i] = $art;
}
On récupere donc tout le contenu de l'article dans le tableau $art.
Le contenu du chapo est stocké dans $art alors le contenu de l'article est dans $chapo
Il suffit ensuite d'extraire le contenu des balises [tags] si elles existent grace à une expression régulière:
preg_match('#\[tags\]([^\]]*)\[\/tags\]#i', $art, $capture)
ou
preg_match('#\[tags\]([^\]]*)\[\/tags\]#i', $art, $capture)
De cette façon si on reprend notre exemple du début
$capture[0] = [tags]tag-1, tag-2, tag-3[/tags]
$capture[1] = tag-1, tag-2, tag-3
On mémorise la liste des tags dans la variable $this->tags et isolant de $capture[1] chaque mot clé afin de créer des liens cliquables:
$this->tags = $this->_parseTags($capture[1]);
function _parseTags($tags_line) {
$return = '';
if ($tags = explode(',', $tags_line)) {
foreach ($tags as $tag) {
$return[] = '<a href="./?tag/'.urlencode(trim($tag)).'">'.trim($tag).'</a>';
}
$return = implode(', ', $return);
}
return $return;
}
Nous voyons ici que les liens sur les tags seront de la forme:
http://monsite.org?tag/tag-1
http://monsite.org?tag/tag-2
http://monsite.org?tag/tag-3
Il faut également supprimer de l'article les balises [tags] pour qu'elles ne soient pas affichées lors de l'appel des fonctions $plxShow->artChapo() ou $plxShow->artContent().
$art = str_replace($capture[0],'',$art);
Il ne reste plus qu'à mémoriser les modifications faites sur le contenu de l'article dans la variables global $plxShow (variable utilisée dans les thèmes)
$plxShow->plxMotor->plxRecord_arts->result[$plxShow->plxMotor->plxRecord_arts->i] = $art;
2) Affichage des tags
Pour afficher les tags, on va utiliser une autre fonction de la classe plxtags: tagArtList()
Voici comment l'appeler:
<?php while($plxShow->plxMotor->plxRecord_arts->loop()): # On boucle sur les articles ?>
<?php $plxTags->getArtTags() # récuperation des tags ?>
<?php $plxTags->tagArtList() # affichage de la liste des tags sous forme de lien ?>
...
<?php endwhile; # Fin de la boucle sur les articles ?>
La fonction tagArtList() ne fait qu'afficher notre variable de class $this->tags qui elle même contient la liste des tous les tags de l'article sous forme de liens cliquables.
3) Liste des tous les articles appartenant à un tag
Nous avons vu que les liens des tags est de la forme
http://monsite.org?tag/tag-1
Dans le fichier header.php apres la ligne
<?php if(!defined('PLX_ROOT')) exit; ?>
Nous devons inclure l'appel du fichier de notre classe plxTags
<?php include(PLX_ROOT."plugins/tags.php");
A la fin du fichier tags.php, une instance de la classe plxtags est créée
$plxTags = new plxTags();
Le constructeur de la classe est alors appelé. C'est ici que nous allons regarder si dans notre url, le mot tag apparait pour savoir si nous devons rechercher tous les articles contenant le tag passé en paramètre dans l'url
function plxTags() {
if(preg_match('/^tag\/(.+)$/',urldecode($_SERVER),$capture)) {
$this->mode = 'tag';
$this->urltag = $capture[1];
$this->_search();
}
}
On fixe le mode d'affichage à 'tag' au lieu de 'home'
Le tag sélectionne est contenu dans la variable $capture[1]
La fonction _search() va chercher tous les articles contenant le tag sélectionné. Basiquement, la recherche des articles consiste à aller lire tous les fichiers xml des articles et de regarder si dans le chapo ou le contenu il y a les balises tags. Si une balise tags existe on teste si le tag de l'url est présent. Si oui on mémorise l'article (il sera pris en compte et affiché dans les boucles de lecture while des thème), sinon on passe au suivant. On se limite au nombre d'articles à afficher par page.
4) Pagination et Liste de tous les tags
Deux autres fonctionnalités sont à prendre en compte dans cette gestion des tags:
- la pagination (voir fonction pagination() de plxtags): Lorsque nous avons une url du type http://monsite.org?tag/tag-1 et que nous pagination, il faut garder le paramètre tag dans url. Si le mot tag est présent on reconstruit une url en gardant ?tag/tag-1 et en rajoutant le numéro de page visualiser. Sinon on appelle la fonction de base de pagination de la classe plxShow.
Autre fonctionnalité intéressante est de lister tous les tags des articles dans la sidebar pour obtenir une sorte de glossaire. C'est la fonction tagsList() de plxTags qui a cette tâche.
- Créer un dossier " plugins " à la racine de votre blog.
- Créer un dossier " tags " dans le dossier " plugins " crée précédement.
- Mettez le fichier tags.php dans le dossier tags crée à l'étape précédente.
Vous n'avez plus qu'à modifier les fichiers situé dans le dossier " themes/defaut "
- Ouvrir header.php :
Après :
<?php if(!defined('PLX_ROOT')) exit; ?>
Ajouter :
<?php include(PLX_ROOT.'plugins/tags/tags.php') ?>
- Ouvrir home.php :Après :
<?php while($plxShow->plxMotor->plxRecord_arts->loop()): # On boucle sur les articles ?>
Ajouter :
<?php $plxTags->getArtTags() ?>
et mettre :
<p>Tags: <?php $plxTags->tagArtList() ?></p>
Là ou vous désirea afficher les articles.Remplacer :
<p id="pagination"><?php $plxShow->pagination(); ?></p>
Par :
<p id="pagination"><?php $plxTags->pagination(); ?></p>
Effectuer la même opération pour categorie.php et article.php ( sauf pour la pagination dans article.php bien sur ).- Ouvrir sidebar.php :
Après :
<div id="sidebar">
Ajouter :
<h2>Mots Clés</h2>
<div id="tags">
<ul><?php $plxTags->tagsList() ?></ul>
</div>
Sauf erreur de ma part, le tour est joué, bon test à vous tous, et n'hésitez pas à retourner les bogues rencontrés. Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Vais relire ça à tête reposée... pour un dimanche soir, c'est un peu chaud !
à plus,
Gzyg
Ce qui rend certainement le texte un peu indigeste pour certain
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
J'ai mis en place les tags sur mon site (http://louisroche.net/blog si vous voulez voir ce que ca peut donner) et globalement ca fonctionne bien.
Cependant deux petits problemes :
- je ne peux pas faire s'afficher le liste des tags sur la page d'un article. J'ai juste le "Tags :" sans les tags de l'article.
- le code a placer dans le chapô ([tags]tag1, tag2[/tags] apparait au début de l'article.
En tout cas merci pour le travail
Vérifie que tu as mis le code nécessaire dans le fichier article.php de ton thème de la même façon que pour home.php
Au passage: excellent le thème de ton site. je le trouve très beau !
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Merci pour le theme. D'ailleurs j'ai fais quelques corrections, il faudrait que je fasse remonter.
edit : en fait c'est bon, c'est que pour mon theme le <?php $plxTags->getArtTags() ?> ne s'insere pas exactement au même endroit.
Beau travail !
Je me demande aussi si la gestion des tags par un fichier qui fait les associations tags->{articles concernés} ne sert pas plus simple à mettre en place (je parle en terme de modifications sur un pluxml de base).
Eh non je n'ai pas eu l'occasion, je dois faire une étude complète sur différents serveur gratuit ou non afin de bien comparer.
Cela viens bientôt dans un blog ... ( surprise ^^ )
Ce que j'ai constaté et qui est certains, c'est que le temps sur mon nombre d'article à été très largement augmenté, bref, au lieu de tapoter dans le vent je fais une étude plus poussée et mieux étayée que celle-ci, et je pourrais donner un compte-rendu vraiment complet.
A bientôt.
je voulais faire le test avec l'extension mais le fichier à télécharger me renvoie une erreur quand j'essaie de la décompresser.
voici l'erreur :
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
ou bien est-ce du au décompresseur ubuntu et le fichier va bien ?
meric pour votre retour !
mes sites principaux : fonds d'écran gratuits - longue traîne - référencer votre site - brocante en ligne -
J'aurais bien voulu essayer le système des tags, seulement le plugin n'est plus disponible sur ton site. Est-ce que tu pourrais le re-uploader, s'il te plait?