Nouvelle version du plugin Table des matières
Vu le nombre croissant des billets sur les blogs, certains commencent à éprouver des difficultés à obtenir une table des matières complète chez certains hébergeurs qui limitent la mémoire disponible pour les scripts PHP. J’ai donc mis en place un mode qui limite autant que faire se peut l’empreinte mémoire maximum du plugin. Ce mode est accessible en utilisant la fonction displayTocLowMemory()
à la place de la fonction displayToc()
dans le fichier template.php
de votre thème[1].
Pour vous donner une idée des gains et des pertes du mode économe, j’ai effectué quelques mesures sur une base de 1200 billets (soit environ 1 billet par jour pendant 4 ans) et j’obtiens une empreinte mémoire pour la table des matières[2] égale à :
- 8 Mo en mode standard, donc impossible sur un hébergement ne donnant pas au moins 16 Mo de mémoire aux scripts PHP
- 0,8 Mo en mode économe, soit 10 fois moins, pour un temps d’exécution 1,9 fois supérieur dû au nombre supérieur de requêtes SQL effectuées dans la base de données
D’autre part, toujours pour la même raison, j’ai rajouté la possibilité de paginer les listes de billets en fonction du regroupement demandé (mois, auteurs, catégories, initiales de titre et mot-clés). Notez que si cette option est activée, elle provoquera l’affichage du menu en première page, même si l’option est désactivée dans le fichier de configuration. De plus cette option bénéficie automatiquement du mode mémoire limité décrit ci-dessus. Cette option permet d’obtenir une gestion à peu près équivalente au mode Archives de Dotclear 2.
Cette option est disponible dans le bloc intitulé Options de présentation
sur la page d’administration du plugin.
Changements
- Mise en place d’un mode économe en mémoire au détriment d’une légère augmentation du temps de traitement et du nombre de requêtes effectuées dans la base de données.
- Mise en place d’une pagination des listes de billets par groupe.
La documentation associée à ce plugin se trouve dans ce billet. Si vous avez des remarques ou des demandes, faites-les ici.
Notes
[1] Vous pouvez également utiliser le 4ème paramètre de la fonction displayToc()
qui permet de spécifier le mode voulu (true
pour le mode économe, false
pour le mode standard). Par défaut le plugin fonctionne dans le mode standard.
[2] Cette valeur ne tient pas compte du la mémoire utilisée par le module MySQL.
1 De Agaagla -
coucou Franck
j'étais là parce que j'avais un souci avec une table des matières inexistante, puis j'ai vérifié un petit truc et ça marche donc... puisque je suis là, je te remercie pour ce chouette plugin bien pratique !!!
2 De Franck -
coucou Agaagla, j'adore ceussent qui s'auto-répondent tout seuls, ça me fait beaucoup moins de soucis ;-)
3 De Agaagla -
et si tu ajoutes à ceux qui se manifestent ceux qui s'auto-répondent tout seuls dans leur coin sans forcément t'en faire part, ça fait beaucoup de satisfaits...
(il est beau mon broc de gleg hein ? encore un peu en chantier mais bientôt ce sera un vrai grog de blec du tonnerre de Zeus !)
4 De Franck -
Ce que j'aime bien avec ce plugin c'est que souvent, une fois installé, l'URL utilisée se termine par toc/toc, comme lorsqu'on frappe avant d'entrer ;-)
5 De Agaagla -
oui ;-) et d'ailleurs, pourquoi ce joli nom de toc ?
quant à moi j'y entends au moins autant toctoc, bruit produit par l'ongle de l'indez sur la boîte cranienne au niveau de la tempe, geste signifiant ils sont fous ces blogueurs...
6 De Franck -
toc ? simplement pour Table Of Contents, tables de matières en français ;-)
7 De Agaagla -
suis-je bête alors...
8 De Sophie -
Bonsoir,
Tout d'abord un grand bravo pour votre plugin et pour votre disponibilité !
J'ai cherché un peu partout, ici et ailleurs, mais je n'ai pas trouvé de réponse à ma question...
Je ne vois pas quel code appellerait directement la table des matières (sans la template)
Je pensais me servir de la table des matières comme menu (à défaut d'un plugin de sous-catégories), et aimerais donc faire quelque chose du genre <?php include (la table des matières); ?> dans la sidebar.
Pouvez-vous m'éclairer ?
Merci :-)
9 De Franck -
Et bien il suffit d'utiliser la fonction d'affichage, celle-là même qui doit être placée (normalement) dans le fichier
template.php
, c'est à dire :<?php dcToc::displayToc(); ?>
ou<?php dcToc::displayTocLowMemory(); ?>
si on souhaite la version moins gourmande en mémoire (mais plus lente).Dans le cas où il serait nécessaire de préciser le fichier de configuration à utiliser, il faut alors préciser le nom de ce fichier (qui normalement se trouve dans
share/toc
) en premier paramètre. Exemple avec un fichier nomméindex.ini
:<?php dcToc::displayToc('index'); ?>
.10 De Franck -
Il y a un peu plus de documentation dans ce billet et le détail des paramètres de la fonction d'affichage
displayToc()
est disponible sur cette page.11 De Agaagla -
coucou Franck
bonne idée de pouvoir désactiver l'affichage du titre de cette TOC !
(dans la série je m'auto-réponds et je t'en fais profiter ;-)
une utilisatrice satisfaite ! je reviendrai !
12 De ced -
Y aurait-il un problème de compatibilité ? Toc fonctionnait très bien jusqu'au jour où j'ai dû (simultanément, d'où un diagnostic difficile) changer d'hébergement et passer de DC 1.2.7.1 à DC 1.2.8
À l'installation, j'ai maintenant une page blanche... rien ne se passe. L'ancien hébergement proposait php4xx, le nouvel hébergement propose php5xx.
13 De Franck -
Si c'est une page complètement blanche, cela peut vouloir dire que la mémoire accordée pour l'exécution d'un script PHP n'est pas assez élevée pour produire la table des matières (elle peut être relativement gourmande). Il faudrait tenter l'utilisation du mode économe (voir les détails plus haut dans ce billet), pour vérifier s'il s'agit de cela.
14 De karpediem -
Bonjour Franck, Tout d'abord, super ton plugin !!! J'utilise dcToc::homeURL('toc'); pour afficher ma table des matières, mais idéalement, je souhaiterai personnaliser un peu l'affichage des pages connexes... Je pense que ça doit se passer dans la fonction _getRelatedList, mais là j'ai un peu de mal car mes compétences php sont assez réduites (pour ne pas dire presque nulles ;o))). Je souhaiterai juste avoir une liste avec des <h3> pour chacun des items des pages connexes. Est-ce que quelqu'un pourrait m'aider à mettre en place cette configuration ? Merci à tous et à bientôt
15 De Franck -
Comme je le signalais dans un commentaire précédent, on peut modifier la façon dont chacun des éléments est affiché. La fonction
displayToc()
permet de définir des formats de remplacement à utiliser à la place des standards. Dans ce cas, il faudra probablement s'intéresser à ceux ci :toc_related
,toc_related_list
etetoc_related_item
.Toutes les infos sont dans ce billet et le détail des formats se trouve sur cette page.
16 De karpediem -
Trop TOP !!! C'est génial ! Ton code est super propre, super clair car même moi qui ne suis pas une super experte en php je m'en suis sortie et j'ai réussi à faire ce que je voulais. J'ai même ajouté un title sur les liens ;o)) Encore un grand MERCI à toi pour ce plugin et pour ta réponse hyper rapide !!