Vous n'êtes pas identifié(e).
13 février 2024 Sortie de Dotclear 2.29
Je bute sur cette question :
Récupérer le résultat d'un tpl:tag dans une variable PHP.
Autre question connexe :
Comment passer des arguments non pas en dur mais sous forme de variable.
Exemple :
$select = "1"
<tpl:entryIf selected=".$select.">
Je sais que cette syntaxe n'est pas bonne, mais je n'en ai pas trouvé de correcte.
On pourrait aussi passer comme arguments des tags utilisateurs ou système.
Comme ceci :
<tpl;entries category={{tpl:categoryID}}>
Cet exemple est farfelu mais il illustre ce que je souhaite faire.
J'ai fait beaucoup de recherches infructueuses, y compris sur ce forum.
Je pense que mes questions sont triviales pour un connaisseur Dotclear.
Merci d'avance.
Hors ligne
Hors ligne
Ton site "We love..." est très réussi...
Merci pour ta réponse. Elle ne répond malheureusement pas à mes questions. J'avais du reste déjà lu ces pages.
La formulation de ma question est ambigüe mais je n'y peux rien : c'est la terminologie de Dotclear qui prête à confusion.
En effet, dans le langage courant du monde internet, un tag est un mot clé, et dans la page que tu me recommandes il y a un argument 'tag' pour la balise Entries.
Je voulais parler de l'autre signification de tag dans Dotclear, celle qui désigne une fonction native ou utilisateur telle que {{tpl:EntryId}} ou {{tpl:EntryCategory}}.
Par ailleurs, personne n'évoque cette possibilité - ou impossibilité - de mixter du PHP et du Dotclear.
J'espère que c'est le bon endroit pour poser la question...
Hors ligne
Merci du compliment ^^ pour WLD.
Je suis loin d'être un sorcier (les developpeurs de core et autres plugins) de Dotclear mais il me semble que tes questions ont déjà leur réponses dans la documentation. Peux-tu être concret avec des exemples avec le contexte qui l'accompagne ? Cela me permettra (ou à un(e) autre) de ne pas être vage dans ma/sa réponse.
Hors ligne
Le problème que j'ai essayé de résoudre est le suivant :
j'ai créé une balise <tpl:EntryIdIsNotIf> avec 2 arguments (id1, id2) pour exécuter conditionnellement un bloc HTML.
- id1 est l'EntryId du billet courant (je le connais par la formule : $id_courant = context::global_filter($_ctx->posts->post_id,0,0,0,0,0,'EntryID'); ou par {{tpl:EntryId}})
- id2 est l'EntryId d'un article de référence (qui est déjà affiché sur ma page et que je ne veux pas ré-afficher). Je l'ai stocké dans une variable $id_ref grâce à la formule précédente au moment où il s'affiche.
Le problème est de passer les paramètres à ma balise :
<tpl:EntryIdIsNotIf id1="<?php echo $id_courant; ?>" id2="<?php echo $id_ref; ?>">
Evidemment, cette écriture n'est pas admise. J'en ai essayé beaucoup d'autres sans succès.
Mais peut-être est-ce tout simplement impossible ?
J'ai réalisé une manip similaire sur wordpress pour un autre blog sans difficultés.
Hors ligne
As-tu essayé d'écrire ta propre balise template ? En t'inspirant des balises définies par Dotclear, tu arriveras peut-être à tes fins.
- les règles du forum : http://forum.dotclear.net/viewtopic.php?id=39494
- la galaxie de Dotclear 2 : http://fr.dotclear.org/documentation/2.0/links
Hors ligne
Je suis curieuse (et je me pose des questions sur l'approche), c'est destiné à quoi tout ça ?
La documentation : http://doc.dotclear.net/2.0/fulltoc
Le module de recherche du forum : http://www.dotclear.net/forum/search.php ?
Hors ligne
Par ailleurs, personne n'évoque cette possibilité - ou impossibilité - de mixter du PHP et du Dotclear.
Il n'est pas possible de mixer PHP et langage template dotclear, ou plutôt c'est possible, dans certaines limites, mais désactivé par défaut et fortement déconseillé pour des raisons de sécurité. Il faut voir ça comme un niveau d'abstraction, type MVC.
Autoriser le PHP dans les templates passe par le positionnement de tpl_allow_php à 1 dans about:config, mais même en l'autorisant, tu n'arriveras pas à tes fins, dans la mesure ou le code php (écrit proprepemt, ie <?php echo "Hello World"; ?>) sera copié tel quel dans le template compilé.
Dans l'approche doclear, si code php spécifique il y a, cela passe par la déclaration de balises via le _public.php du thème ou du plugin.
Pour répondre à ton problème particulier, je verrais la déclaration de 2 balises : la première, par exemple : {{tpl:StoreCurrentEntryId}} génère le code qui va stocker dans une variable temporaire l'ID du billet courant. Il ne restera plus qu'à ajouter le code qui va bien dans le code généré par ton tpl:EntryIdIsNotIf.
Dyslexics have more fnu!
Hors ligne
@ Dsls
Merci pour ta réponse très claire sur la prise en charge de PHP par Dotclear (qui est moins permissif que WordPress sur ce point).
Je sais maintenant qu'il faut abandonner l'idée de passer des variables comme arguments de template.
Je tenterai donc de créer des variables par template (je suppose qu'elles doivent être déclarées -statiques - au sein de la classe qui contient les balises).
@ Kozlika
Si tu vas voir le site http://collectif-francazal.org/, tu comprendras :
Je l'ai réalisé à partir du thème Zeitung.
J'ai une page d'accueil sur laquelle j'affiche le dernier éditorial puis les 4 derniers billets "selected".
De plus, je viens de créer un blog classique associé (je n'ai pas utilisé la technique du multiblog car je ne voulais pas casser les références google sur mes articles anciens repris dans le blog).
Le problème que je voulais résoudre : éviter d'afficher l'article Editorial dans le blog (donc éviter d'afficher l'article qui a l'Id de l'éditorial).
Autre but poursuivi, qui passe par la résolution de ce problème : sur le blog, le premier article de la page est complétement développé alors que les articles suivants ne présentent que l'excerpt (chapeau). Je voudrais que cela soit réservé à la première page (pour montrer in extenso le dernier article publié) et sur les autres pages je ne voudrais voir que les chapeaux.
Je ne ferme pas cette discussion car vous aurez peut-être des réactions à cette dernière réponse, et puis, si je parviens à un résultat, je le communiquerai. Mais ce n'est pas pour tout de suite car le temps me manque.
Bien cordialement
Hors ligne
Il me semble qu'il n'est pas nécessaire de créer des balises et que tu as tout le matériel nécessaire dans ce qui existe déjà. Comment est déterminé l'article en édito ? C'est le "selected" le plus récent ?
Ce que tu veux faire est très éloigné de ça ? http://kozlika.free.fr/
(Pas compris non plus en quoi le référencement Google de ton ancien blog empêche l'utilisation du multiblog ?)
La documentation : http://doc.dotclear.net/2.0/fulltoc
Le module de recherche du forum : http://www.dotclear.net/forum/search.php ?
Hors ligne
Merci Kozlika de t'intéresser à mon problème.
L'article en Edito est de dernier article de la catégorie Editorial.
Je n'utilise pas selected car ce serait le dernier selected. Or un édito peut être moins récent que le dernier selected.
La question du multiblog est aujourd'hui résolue.
J'ai fait un test de multiblog : j'avais fait migrer un article déjà référencé par Google dans le nouveau blog et lorsque je cliquais sur la référence Google, je tombais sur l'erreur "page introuvable". J'ai vu depuis qu'il y avait des parades (par .htacces ou plugin),
Une autre - mauvaise - raison qui m'a fait écarter le multiblog, c'est la recherche qui dans mon cas doit être étendue au site et au blog (pages et billets confondus). Je crois que pour cela aussi il y a un plugin...
J'ai beaucoup galéré pour arriver à cette dualité Site-Blog (avec deux homepages). J'utilise le behavior urlHandlerBeforeGetData pour arriver à mes fins. J'ai lu depuis qu'il y aurait une solution plus simple...
Voilà...
Hors ligne
Peut-être que le plugin muppet pourrait t'aider dans la construction de ton site ? (autres informations)
Hors ligne
Oui, Osku, ton plugin muppet pourrait apporter une solution, en créant un post-type particulier pour le dernier l'Edito.
Mais il faudrait pouvoir le remettre dans le circuit, lorsqu'il est remplacé par un nouvel édito. On peut toujours modifier le post-type dans la base de données mais ce n'est pas propre. Mais cet aspect-là est peut-être réglé par les options d'intégration (à suivre...)
Hors ligne
Vous n'êtes pas identifié(e).