Dotclear

Vous n'êtes pas identifié(e).

Annonce

13 février 2024 Sortie de Dotclear 2.29

#1 2014-04-08 18:54:16

Izb
Membre
Lieu : Lorient
Inscription : 2011-06-05
Site Web

Je manque d'arguments :-)

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

#2 2014-04-09 06:19:59

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Je manque d'arguments :-)

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

#3 2014-04-09 07:03:56

Izb
Membre
Lieu : Lorient
Inscription : 2011-06-05
Site Web

Re : Je manque d'arguments :-)

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

#4 2014-04-09 10:10:09

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Je manque d'arguments :-)

Izb a écrit :

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

#5 2014-04-09 10:58:48

Izb
Membre
Lieu : Lorient
Inscription : 2011-06-05
Site Web

Re : Je manque d'arguments :-)

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

#6 2014-04-09 11:06:54

nikrou
Membre
Inscription : 2007-10-02
Site Web

Re : Je manque d'arguments :-)

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

#7 2014-04-09 11:54:26

Izb
Membre
Lieu : Lorient
Inscription : 2011-06-05
Site Web

Re : Je manque d'arguments :-)

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

#8 2014-04-09 14:34:19

nikrou
Membre
Inscription : 2007-10-02
Site Web

Re : Je manque d'arguments :-)

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

#9 2014-04-09 14:59:47

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Je manque d'arguments :-)

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

#10 2014-04-09 15:56:42

Izb
Membre
Lieu : Lorient
Inscription : 2011-06-05
Site Web

Re : Je manque d'arguments :-)

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

#11 2014-04-09 16:02:35

Izb
Membre
Lieu : Lorient
Inscription : 2011-06-05
Site Web

Re : Je manque d'arguments :-)

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

#12 2014-04-09 16:09:53

Jean-Michel
Modérateur à ailes d'ange
Lieu : Paris
Inscription : 2006-08-22
Site Web

Re : Je manque d'arguments :-)

Il ne manquerait pas l'indication d'un "type" quand tu écris <tpl:Entries url=""> ?

Hors ligne

#13 2014-04-09 16:16:09

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Je manque d'arguments :-)

Izb a écrit :

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

#14 2014-04-09 16:17:57

Izb
Membre
Lieu : Lorient
Inscription : 2011-06-05
Site Web

Re : Je manque d'arguments :-)

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

#15 2014-04-09 16:28:31

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Je manque d'arguments :-)

Izb a écrit :

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

#16 2014-04-09 16:40:53

Izb
Membre
Lieu : Lorient
Inscription : 2011-06-05
Site Web

Re : Je manque d'arguments :-)

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

#17 2014-04-09 16:43:19

Jean-Michel
Modérateur à ailes d'ange
Lieu : Paris
Inscription : 2006-08-22
Site Web

Re : Je manque d'arguments :-)

Izb a écrit :

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

#18 2014-04-09 16:45:05

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Je manque d'arguments :-)

Izb a écrit :

(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

#19 2014-04-10 16:58:25

Izb
Membre
Lieu : Lorient
Inscription : 2011-06-05
Site Web

Re : Je manque d'arguments :-)

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

#20 2014-04-10 17:17:07

Philippe
Stagiaire
Lieu : Toulon
Inscription : 2004-06-13
Site Web

Re : Je manque d'arguments :-)

Merci à toi, j'ai aussi appris quelque chose ;)

Et Multi-Prises est un bien joli blog.

Hors ligne

#21 2014-04-10 21:37:17

Izb
Membre
Lieu : Lorient
Inscription : 2011-06-05
Site Web

Re : Je manque d'arguments :-)

Philippe a écrit :

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

#22 2014-04-11 23:16:44

AlainV
Membre
Lieu : Tourrettes
Inscription : 2008-04-11
Site Web

Re : Je manque d'arguments :-)

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

Vous n'êtes pas identifié(e).

Pied de page des forums

Sites map