Hello*
Il y a le plugin [extension by nicolas] Cumulus Tags Cloud, qui, une fois activé, modifie le template de la page des tags en ajoutant un affichage.
Si je fais un plugin qui modifie aussi la page tags, comment peut-on intégrer l'ensemble de ces modifs ?
J'ai potentiellement les deux options:
- Ajouter un affichage comme pwgCumulus
- Modifier l'affichage des tags par défaut (ailleurs que dans les variables possibles).
Comment peut-on gérer ces modifications cumulées, dans le cas où il n'y a pas d'interférences?
*: oui, je sais on est sur le forum FR :-)
Hors ligne
Il y a aussi [extension by mistic100] Colored Tags qui modifie l'affichage des tags...
Jette un oeil sur ce plugin, il est compatible avec Cumulus.
Hors ligne
P@t a écrit:
Il y a aussi [extension by mistic100] Colored Tags qui modifie l'affichage des tags...
Jette un oeil sur ce plugin, il est compatible avec Cumulus.
Oui mais je pense que l'approche n'est pas la bonne. D'ailleurs le plugin cumulus est très lié au template utilisé. Je ne modifie pas dynamiquement le template mais je charge celui qui est dans le répertoire du plugin que j'ai créé à partir d'une révision donné du template de yoga.
Je sais que les templates ne sont pas modifiés tous les quatre matins mais on doit pouvoir trouvé une meilleure méthode et avoir un couplage lâche entre plugin et template de base.
Cela rejoint un peu la discussion initiée par flop25 même si je ne suis pas sûr d'avoir bien compris ce qu'il voulait faire exactement.
Je n'ai pas d'idée comme ça, à froid. Il faut essayer de voir comment gère les autres projets. Ce qu'on veut faire porte un nom : extension de template.
Hors ligne
Merci Nicolas, tu as compris.
Il faut pouvoir modifier le template associé à une page sans pour autant modifier le fichier.
Ce qu'on pouvait faire en 1.7 et qu'on ne peut plus en Smarty. J'ai vu que Smarty proposait des plugins. Je vais aller voir à quoi ça correspond.
P@t: typet@gs, j'ai vu, mais 1. il ne modifie que le contenu des tags, et 2. il a juste un if en plus si c'est Cumulus qui est actif.
A+
Hors ligne
Les filtres de pré-compilation ont l'air d'aller dans la bonne direction. Je vais jeter un coup d'oeil.
Hors ligne
A tester en vrai:
- Définir dans $template une variable $override
celle-ci contient un tableau [ poids => fonction ]
Avant de parser son template, on déclare ces fonctions dans l'ordre des poids.
On parse le template et ça devrait être bon
Pas le courage ce soir, p-ê ce week-end.
Hors ligne
mathiasm a écrit:
Les filtres de pré-compilation ont l'air d'aller dans la bonne direction. Je vais jeter un coup d'oeil.
J'avais raté ca!
Ca m'a l'air excellent!
Hors ligne
Bizarre, je n'arrive pas à faire fonctionner les filtres de pré-compilation...
D'ailleurs, dans la classe template, il y a deux filtres enregistrés (prefilter_white_space et prefilter_language) qui n'ont pas l'air de fonctionner du tout!
En gros, quand on déclare un filtre, il n'a pas l'air d'etre pris en compte...
Dernière modification par P@t (2009-09-24 02:49:44)
Hors ligne
P@t a écrit:
Bizarre, je n'arrive pas à faire fonctionner les filtres de pré-compilation...
D'ailleurs, dans la classe template, il y a deux filtres enregistrés (prefilter_white_space et prefilter_language) qui n'ont pas l'air de fonctionner du tout!
En gros, quand on déclare un filtre, il n'a pas l'air d'etre pris en compte...
Au début des versions RC de Piwigo 2.
j'ai cherché comment mettre en œuvre les filtres (Pre/Post), j'avais ouvert un fil sur ce sujet..Relvice m'avait donné des informations...... je cherche encore!
Si une personne trouve, je suis preneur de la solution
Hors ligne
P@t a écrit:
Bizarre, je n'arrive pas à faire fonctionner les filtres de pré-compilation...
D'ailleurs, dans la classe template, il y a deux filtres enregistrés (prefilter_white_space et prefilter_language) qui n'ont pas l'air de fonctionner du tout!
En gros, quand on déclare un filtre, il n'a pas l'air d'etre pris en compte...
Dans template.class.php, ligne 422 juste avant le return $source:
$source = str_replace('</head>','</head><h3>PREFILTER</h3>', $source);
et ça marche, à condition de purger la compil dudit template.
Je vais donc essayer avec un autre pre-filter (et en même temps, de passer un $smarty->clear_compiled_tpl($handle.'.tpl') pour voir si ça marche.
Hors ligne
Bon, alors
je charge ce soir le template.class.php modifié.
La fonction load_external_filters charge dans la fonction parse tous les préfiltres, par ordre de poids croissant.
On utilise la fonction set_external_filter avec le poids affecté et le nom d'une fonction.
La fonction appelée doit être de la forme
function test_filter($source, &$smarty)
Ensuite, explication par l'exemple:
Pour un plugin:
1. Nettoyage
Comme on va modifier les templates, il faut nettoyer les templates modifiés du cache
Pour tags.tpl: $template->smarty->clear_compiled_tpl('tags.tpl');
Attention, si on modifie plusieurs tpl (picture_nav/tpl et picture.tpl, par ex.), il faut purger les 2.
Cette purge est à effectuer à l'install ET à la désinstall (pour regénérer des templates conformes).
2. Cible
Dans main.inc.php:
if (script_basename() == 'tags')
pour être sur de n'appliquer les modifs que sur la bonne page
et un event_handler de ladite page pour que les .tpl soient chargés:
add_event_handler('loc_begin_page_header', 'my_plugin_function_for_tags', 60);
la fonction de définition du préfiltre:
function my_plugin_function_for_tags() { global $template; $template->set_external_filter(60,'test_filter'); }
et enfin la fonction de màj elle-même
function test_filter($source, &$smarty) { $orig = '{if $display_mode == \'cloud\'}'; $my_data = '<a>new link in head</a> if $display_mode == \'cloud\'}'; $source = str_replace($orig,$my_data, $source); return $source; }
Hors ligne