- définir l'ordre de chargement des plugins ('twTags' avant pagination). Voir pour cela l'article « dépendances entre plugins »
- Modifier le fichier postcon.php de 'twTags' pour d'une part isoler le tag de l'url, et d'autre part pour ne plus limiter le nombre de billets retournés.
- Modifier le fichier postcon.php de 'pagination' pour prendre en compte le mode 'tag'. En utilisation la fonction nbrow() de l'objet $news on obtient le nombre de billets pour calculer le nombre de page.
Bon ça marche, mais ça pu un peu la bidouille. Cela multiplie le nombre de requettes et lie les différents plugins de façon plus ou moins implicite. Une autre voie est sans doute possible, peut-être en modifiant un peu le script de base.
Commentaires
je comprends pas tout là ?
pinchC'est une question ?
JérômeJ'ai bien mis le plugin twTag avant pagination.
RenoJ'ai remplacé
$news = twPostMeta::getLastNews('tag', $tag_id, dc_nb_post_per_page, 'post_dt DESC', $lang);
par
$news = twPostMeta::getLastNews('tag', $tag_id, 0, 'post_dt DESC', $lang);
"Modifier le fichier postcon.php de 'twTags' pour d'une part isoler le tag de l'url"
là je ne vois pas ce que tu veux dire.
"Modifier le fichier postcon.php de 'pagination' pour prendre en compte le mode 'tag'. En utilisation la fonction nbrow() de l'objet $news on obtient le nombre de billets pour calculer le nombre de page."
là si je comprends bien, il faut ajouter un case 'tag'
du style :
case 'tag' : {
/* Je vois pas quoi mettre là ? */
}
Sinon, ne faut il pas ajouter le mode 'tag' dans le fichier /share/pagination.ini pour les modes à intercepter ?
Merci d'avance si tu as le temps et l'envie de répondre a ces quelques questions :)
Imagine que tu utilises la pagination en mode tags, dans ce cas l'url sera par exemple
Si tu regardes maintenant le fichier postcon.php du plugin twTag, tu trouvera au début (ligne 25 environ) un
.... preg_match('!^tag/(.+)!', $dc_args, $matches)
$tag_id = urldecode($matches[1]);
Donc $tag_id est initialisé avec tout ce qui suit le signe '/'. Dans notre exemple cela donnerai $tag_id = 'dotclear/p2', Cela n'est pas correct. Donc pour corriger cela j'ai rajouté :
if (strpos($tag_id,'/')>0) {
$tag_id = substr($tag_id,0,strpos($tag_id,'/'));
}
Voila pour le premier point.
Ensuite pour le plugin pagination. Il faut en effet rajouter un case 'tag', pour recréer la liste de billets à afficher.
case 'tag' : {
if (isset($news) && $news->nbRow()>0 ) {
$page_nav = new pagenavigator($news->nbRow(),$pagination_url);
$news = twPostMeta::getLastNews('tag', $tag_id, $page_nav->getLimitString(), 'post_dt DESC', $lang);
}
break;
}
C'est pas très optimisé, mais il est difficile de faire mieux sans toucher plus de code des plugins d'origine.
Note que ces manipulations fonctionne si tu as modifier l'ordre de chargement des plugins (twTag détectant le mode tag avant l'exécution de pagination). Dans le cas contraire, tu dois recopier cette détection du mode tag dans le plugin pagination.
Voila j'espère que c'est plus clair.
JérômeJe crois avoir compris les explications qui précèdent excepté le "tu dois recopier cette détection du mode tag dans le plugin pagination". Là je ne comprends pas trop ce qu'il faudrait que je fasse.
1loupDotclear de base comprend plusieurs 'modes' de fonctionnement :'home', 'cat', 'post', 'day', 'month', 'search'. Ces 'modes' sont détermines par le décryptage de l'url.
JérômeCertains plugins (twTag, Galerie,...) rajoutent de nouveaux 'modes' en refaisant le décryptage de l'url dans leur postcon.php respectif. Ainsi twTag analyse en début de son postcon.php l'url utilisée pour savoir si l'on est en mode 'tag'.
Pagination travaille avec ses différents modes en recréant l'objet $news (la liste des billets à afficher). Par défaut seuls les modes de base sont pris en compte(mais cela peut être corrigé comme vu plus haut). De plus le plugin pagination pour travailler remplace le mode déterminé préalablement pour le remplacer par 'pagination'.
Donc deux cas de figure ce présente :
- soit pagination est exécute APRES twTag de façon certaine. Ce dernier ayant analysé l'url détermine le mode 'tag' de façon appropriée. Dans ce cas pagination pourra exploiter le mode 'tag' dans la structure case mise en place plus haut. C'est ce que je propose dans le billet jerome.steaknco.com/index...
- soit nous ne pouvons être certain de l'ordre d'exécution (avec un Dotclear d'origine c'est le cas) et dans ce cas avant d'utiliser la variable $mode dans pagination il faut veiller à décoder correctement le mode 'tag'. Les lignes de codes permettant de le faire se trouvant dans le fichier postcon.php de twTag, le plus simple est de les recopier au début du postcon.php de pagination.
Merci pour ces explications détaillées.
RenoJe vais essayer ma première tentative n'a pas été très concluante mais je l'ai fait de manière assez frontale (copier/coller)
Je vais réessayer en reflechissant un peu ;o)
Je dis aussi merci pour les explications même si je ne m'en sort pas :( donc il y a quelque chose que je fait mal. Dans l'ordre :
1loup-J'ai recopié le case 'tag' juste après le case 'day' et avant le default: break; dans le postcon.php du pagination
-Dans le postcon.php du twtags, j'ai remplacé dc_nb_post_per_page par le chiffre 0 au niveau du $news
-Dans ce même postcon.php du twtags, j'ai rajouté le if (strpos($tag_id,'/')>0) {...} juste après le $tag_id = urldecode($matches[1]);
-Puis, comme je ne comprends pas un traitre mot de ce qu'il faudrait que je fasse avec la méthode "dépendances entre plugins", j'ai copié/collé le code du postcon.php de twtags en début du postcon.php de pagination (après le END LICENSE BLOCK )
et lorsque je demande l'affichage d'un tag (ayant plus de 15 billets), j'obtiens l'intégralité des billets de ce tag sur une seule et unique page. Qu'est-ce que j'ai mal fait ?
Hello,
Ce billet date, mais j'aurais besoin d'info, l'auteur est-il disponible???
Merci d'avance ;)
MatCAvec l'aide de MatC du commentaire précédent, j'ai réussi à obtenir la pagination en mode tag en utilisant la dépendance entre plugin.
Mais ensuite, j'avais un gros problème : 10 plugins qui ne fonctionnaient plus !
(Download manager, Modèles, Tools Manager, UTF-8 converter, Lightbox, Theme Manager, Gravatars, Gallery, Pages Connexes, Tribune Libre)
Si cela peut servir à quelqu'un...
Les symptômes : Leurs icônes étaient absentes quand on est dans "Outils", la description est en anglais et un clic sur le lien qui amène normalement dans le plugin ramène à "Outils".
Après avoir chercher bien longtemps, j'ai vu que les liens pointaient vers /ecrire/tools.php?p=nom du plugin au lieu de p=répertoire du plugin.
Après avoir modifié la fonction getPlugins, les liens pointent donc vers le name contenue dans le desc.xml au lieu du répertoire.
Solution que j'ai trouvé : J'ai modifié tous les desc.xml des plugins qui ne fonctionnaient plus et j'ai indiqué au niveau du "name" le répertoire qui le contient. Avec cette bidouille, cela remarche maintenant ;-)
1loup