Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Pages : 1
Bonjour à tous,
voilà, je me fais un petit plugin perso pour gérer des sortes de galeries.
J'ai suivi la doc (du mieux que j'ai pu, j'ai vraiment du mal c'est pas facile pour un néophyte) et j'ai réussi à faire mes pages index.php?ma-super-page-de-tpl et tout ce qui va avec sans souci.
Le hic c'est que je voudrais pouvoir me passer des paramètres de certaines balises et que je n'y arrive pas.
Je m'explique :
si je suis par exemple dans index.php?ma-super-page-de-tpl/hello-world
J'aimerais que <tpl:Entries><tpl:Entries> retourne le billet hello-world, comme c'est le cas avec index.php?post/hello-world
(Comme si j'avais mis <tpl:Entries id="hello-world"><tpl:Entries>)
J'ai trouvé comment récupérer "hello-world" dans mon url avec mon plugin, mais je ne sais pas comment passer ce hello-world comme un argument de la page pour gérer <tpl:Entries>...
J'ai essayé de créer un contexte, ou d'écrire $GLOBALS['_ctx']->post_id = 'hello-world' mais évidemment ça ne marche pas...
Bref, je suis très clairement perdu et j'aimerais votre aide pour m'expliquer comment je peux assigner cet argument à ma page...
Merci d'avance !
Hors ligne
Si tu as suivi la doc, ton plugin doit comprendre un répertoire default-templates dans lequel se trouve le fichier ma-super-page.html.
C'est dans ce fichier que tu peux utiliser <tpl:Entries url="hello-world"><tpl:Entries> ;)
Hors ligne
C'est exactement ce que j'ai fait, sauf que je voudrais que mon "hello-world" soit dynamique.
Si j'ai index.php?ma-super-page/coucou je voudrais obtenir <tpl:Entries url="coucou"><tpl:Entries>.
Mais je ne peux pas écrire <tpl:Entries url="{{tpl:monUrl}}"><tpl:Entries> (avec une nouvelle classe monUrl qui récupère les valeurs de l'url via mon plugin).
En fait je voudrais pouvoir avoir le même comportement que dans post.html où <tpl:Entries> n'est pas indiqué dans le template. Comment fait cette page pour passer "en arrière plan" la valeur du post ?
Hors ligne
C'est exactement ce que j'ai fait, sauf que je voudrais que mon "hello-world" soit dynamique.
Alors il te faut créer une balise de template dans le fichier _public.php de ton plugin qui renverra l'url voulue.
$core->tpl->addValue('MyValue',array('MyTpl','MyValue'));
class MyTpl
{
public static function MyValue()
{
$res =
'<?php
$my_url = (ici le traitement pour trouver l'url);
echo $my_url;
?>';
return $res;
}
}
et dans ma-super-page.html tu appelles le behavior
{{tpl:MyValue}}
c'est plus clair ?
Hors ligne
Je m'explique mal...
En fait j'ai réussi à le créer ce {{tpl}}
Je sais récupérer l'url, travailler avec, bref je sais tout faire (façon de parler), mais je ne sais pas comment agir pour avoir le même comportement que dans post.html.
Il y a deux types de comportements si je veux afficher mon billet :
Sur home.html j'afficherais mon billet comme ça :
<tpl:Entries url="hello-world">{{tpl:EntryContent}}<tpl:Entries>
avec l'obligation de mettre les balises et de spécifier de quel billet je parle
Sur post.html (avec index.php?post/hello-world) je me passe des balises donc je peux faire ça :
{{tpl:EntryContent}}
et là ça marche impec
Comment fait post.html pour se passer de ces balises <tpl:Entries> et considérer que {{tpl:EntryContent}} pointe vers le billet hello-world ?
C'est ce que je voudrais faire dans index.php?ma-super-page-de-tpl/hello-world, où il me suffirait de mettre {{tpl:EntryContent}}
Dernière modification par Izb (2014-04-09 11:00:02)
Hors ligne
Est-ce que ton embryon de plugin est public ? Est-ce qu'on peut voir le code que tu as déjà écrit quelque part ?
Ce sera plus concret et sûrement plus facile pour t'aider.
p.s: si tu as des idées pour améliorer la documentation sur la création de plugin, c'est un wiki et ton aide est la bienvenue.
Je préfère être atteint de parkinson plutôt qu'alzheimer : je prefère renverser un peu de ma bière plutôt qu'oublier de la boire !
Présentez vos photos simplement avec Phyxo !
Hors ligne
Je développe en local, mais voilà les différents fichiers du plugin :
_prepend.php : http://paste2.org/WpbHyLJ1
_public.php : http://paste2.org/N3MKPM6K
(faites pas gaffe à la fonction membreListe dans _public.php je teste des trucs pour récupérer des infos d'une autre partie qui n'a rien à voir avec dc)
Donc en gros j'ai 4 pages :
association.html (qui fait tout ce que je veux)
association-projets.html (qui récupère de manière un peu dégueu des infos qui n'ont rien à voir avec DC)
association-membres.html (qui liste tous les utilisateurs admins du site)*
association-membre.html (qui se focalise sur un des utilisateurs du blog)
* j'utilise en parallèle le plugin authorMode que j'ai très légèrement modifié pour afficher <tpl:Authors admin="1"></tpl:Authors> et donc afficher les utilisateurs admins uniquement
Donc je n'ai aucun souci sur association-membres.html ou je place <tpl:Authors admin="1"></tpl:Authors> et je m'amuse a afficher les infos
Mon problème c'est que dans association-membre.html (sans le s) je veux me focaliser sur un unique utilisateur comme si j'avais mis <tpl:Authors id="Moi"></tpl:Authors>
Donc en gros, je voudrais que cette page fasse comme author.html (ou post.html, c'est le même fonctionnement) :
- j'ai récupéré le nom de l'utilisateur dans l'url grâce à $_ctx->membreToShow = __($membre[1][0]); (dans _prepend.php)
- je voudrais qu'en affichant {{tpl:AuthorCommonName}} j'ai le nom de $_ctx->membreToShow
Au début de mon topic je parlais de post.html parce que c'était plus simple que de parler du plugin authorMode. Comme author.html, post.html arrive a indiquer a {{tpl:EntryContent}} qu'il faut afficher le contenu du billet indiqué dans l'url ? Sachant que je sais récupérer les valeurs de l'url (elles sont au chaud dans $_ctx->membreToShow ) qu'est-ce que je dois faire ensuite ?
En tout cas merci de votre aide !
Dernière modification par Izb (2014-04-09 11:56:53)
Hors ligne
C'est un peu plus clair mais il doit me manquer soit de la lucidité (pourtant ce n'est plus l'heure de la sieste) ou des infos car je ne vois pas.
Je préfère être atteint de parkinson plutôt qu'alzheimer : je prefère renverser un peu de ma bière plutôt qu'oublier de la boire !
Présentez vos photos simplement avec Phyxo !
Hors ligne
Et si dans l'exemple donné en #4 tu définis
$my_url = $_ctx->membreToShow
dans ton _public.php, ça ne renvoie pas le nom du membre ?
Hors ligne
Je n'ai aucun souci pour récupérer $_ctx->membreToShow d'après mon url.
Si je créé un behavior {{tpl:MyValue}} qui dépend de $_ctx->membreToShow j'affiche le nom de mon membre sans souci, mais ce n'est pas ce que je veux faire.
Je veux qu'en appelant {{tpl:AuthorCommonName}} (ou {{tpl:EntryContent}} peu importe) tout seul ça me renvoie quelque chose.
Actuellement {{tpl:AuthorCommonName}} ne fonctionne que entre <tpl:Authors id="id-de-l-user">{{tpl:AuthorCommonName}}</tpl:Authors>.
Si je le place tout seul dans ma page association-membre.html il ne renvoie rien ce qui est normal. C'est le même comportement pour : {{tpl:EntryContent}} qui en marche qu'entre <tpl:Entries></tpl:Entries> MAIS AUSSI dans post.html
Il y a donc un moyen de se passer des balises <tpl> j'en suis sûr vu que post.html et author.html le font.
C'est ce comportement que je veux imiter.
Hors ligne
Regardez pour les templates suivants :
_home.html :
{{tpl:EntryContent}} -> ne renvoie rien
<tpl:Entries id="mon-billet">{{tpl:EntryContent}}</tpl:Entries> -> renvoie le contenu de mon billet
_post.html (avec index.php?post/mon-billet)
{{tpl:EntryContent}} -> renvoie le contenu de mon billet
<tpl:Entries id="mon-billet">{{tpl:EntryContent}}</tpl:Entries> -> renvoie le contenu de mon billet
Comment fait _post.html pour spécifier à {{tpl:EntryContent}} qu'il s'agit de l'entrée "mon-billet" ?
Sachant que je sais déjà comment il récupère l'identifiant du billet d'après l'url.
Dernière modification par Izb (2014-04-09 16:03:02)
Hors ligne
Il ne manquerait pas l'indication d'un "type" quand tu écris <tpl:Entries url=""> ?
Hors ligne
Comment fait _post.html pour spécifier à {{tpl:EntryContent}} qu'il s'agit de l'entrée "mon-billet" ?
C'est parce que $_ctx->posts est défini dans ce contexte, le contenu du billet est dans $_ctx->posts->post_content_xhtml.
Dans ton cas, c'est $_ctx->membreToShow qui est défini dans le contexte de association-membre.html
Enfin, je crois :P
Hors ligne
Bon, je crois que je viens de comprendre...
En fait je suis obligé de recréer des behaviors spécifiques à mon plugin pour afficher ce que fait déjà {{tpl:AuthorCommonName}} ou {{tpl:EntryContent}} non ?
Mon erreur ne viendrait-elle pas du fait que je veux appeler des behaviors qui n'ont rien à voir avec mon plugin ?
Il faudrait que je recréé un behavior genre {{tpl:monPluginAuthorCommonName}} qui serait une copie de {{tpl:AuthorCommonName}} mais sur lequel je pourrais faire intervenir $_ctx->membreToShow.
Si je voulais faire un plugin qui affiche le contenu d'un billet avec des spécifications particulières, je serai obligé de faire un autre behavior que {{tpl:EntryContent}} non ?
Désolé pour ces confusions mais je suis vraiment en pleine découverte du bouzin et je rame.
La doc est bien faite mais c'est une doc, pas un tuto donc c'est pas évident si on sait pas ce que l'on cherche...
Hors ligne
En fait je suis obligé de recréer des behaviors spécifiques à mon plugin pour afficher ce que fait déjà {{tpl:AuthorCommonName}} ou {{tpl:EntryContent}} non ?
Oui, c'est ce que je te suggérais en #4. Pour appeler les behaviors d'un autre plugin, je ne sais pas faire...
Hors ligne
Ok, donc si ce n'est pas possible je vais faire comme ça alors.
Merci à vous 3 d'avoir essayé de démêler ce sac de nœuds :-)
Si un admin passe dans le coin il peut mettre la discussion en résolu (je peux pas faire je crois).
Dernière modification par Izb (2014-04-09 16:42:08)
Hors ligne
Si un admin passe dans le coin il peut mettre la discussion en résolu (je peux pas faire je crois).
En fait, ça se fait pas trop sur ce forum :)
Hors ligne
(je peux pas faire je crois).
Je crois que si, en éditant le premier message. Mais c'est vrai qu'on le pratique peu ici.
Hors ligne
Bon, je m'en suis sorti en créant un bloc <tpl:Membres></tpl:Membres> qui renvoie la même chose que <tpl:Authors id="Jean-Marc"></tpl:Authors> en ayant au préalable récupéré les valeurs de l'url.
Du coup tous les behaviors hérités du plugin authorMode fonctionnent nickel dans cette balise \o/
J'ai mis du temps mais j'ai compris grâce à vous !
Re-merci !
Hors ligne
Merci à toi, j'ai aussi appris quelque chose ;)
Et Multi-Prises est un bien joli blog.
Hors ligne
Et Multi-Prises est un bien joli blog.
Merci :-)
C'est du DC évidemment mais la partie /asso c'est un truc à part que j'avais codé à la main.
Je travaille justement pour que Dotclear gère tout le site via un gros plugin.
Si tout se passe bien la semaine prochaine la nouvelle version sera en ligne.
Hors ligne
Bonsoir
Philippe a écrit :
Et Multi-Prises est un bien joli blog.
Bien d'accord avec toi Philippe
moi aussi je le trouve très chouette avec assez mais pas trop
et des articles très intéressants
Bravo Thomas Izb
Je suis un peu hors sujet mais tant pis
j'ai été touché par ce site et je le dis
en plus il est construit avec Dotclear
et on peut en faire des belles choses avec dotclear
j'en suis convaincu MERCI DOTCLEAR!
Cordialement
AlainV
Débutant mais déjà fan de Dotclear 2
Blog pour ma fille née à Shanghai http://zoeliehua.free.fr/blog/
Ma zone de Test sur DC http://www.zoeliehua.fr/dctest/ que je commence à alimenter
et celle sur Free.fr http://mic.toes.free.fr/
Hors ligne
Pages : 1
Vous n'êtes pas identifié(e).