Comment fonctionne le système de template
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
vous avez dit de nous baser sur le module "news" et "articles" pour voir comment sont fait les modules PHPBoost.
Aujourd'hui ma question est relativement simple, comment le module news gère le template du formulaire d'ajout ?
Car au niveau du module news on a juste ceci :
Code PHP :
private function init() { $this->lang = LangLoader::get('common', 'news'); }
Alors que pour article on a ceci :
Code PHP :
private function init() { $this->lang = LangLoader::get('common', 'articles'); $this->tpl = new FileTemplate('articles/ArticlesFormController.tpl'); $this->tpl->add_lang($this->lang); }
Du coup je vois bien que le module artciles envoie le tout à "ArticlesFormController.tpl", mais pour le module news il envoie à qui/quoi ?
Cordialement, janus57
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Code PHP :
$tpl = new StringTemplate('# INCLUDE FORM #'); $tpl->add_lang($this->lang);
On créer un objet StringTemplate qui en fait est un tpl sous forme de caractère. Ça permet d'éviter de créer des fichiers tpls pour mettre pas grand chose dedans.
Ensuite on ajoutes les variables de langue au tpl pour pouvoir éventuellement les utiliser.
Le contenu du tpl c'est un INCLUDE, qui en fait est un include d'une autre instance tpl. Plus loin tu as :
Code PHP :
$tpl->put('FORM', $this->form->display());
Ici justement tu créer une variable tpl FORM et sa valeur (qui est renvoyé par la fonction display de HTMLForm) est un objet Template.
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
donc en faite dans le module news, on peu littéralement dire que le template s’auto-crée sans faire appel au moindre .tpl
Du coup on peu utiliser cette technique pour tout les template qui ne nécessite pas de condition d'affichage ?
Et donc si ma logique est bonne on utiliserait un .tpl si à la place de redirigé vers la news créer, on afficherais un message de succès pour dire que la news a bien été crée ?
Par contre du coup j'ai une autre question, dans "ArticlesFormController.tpl", en bas du fichier en peu voir :
Code TPL :
# INCLUDE MSG # # INCLUDE FORM #
Je dirais que # INCLUDE FORM # viens de ce bout de PHP (dans "ArticlesFormController.class.php") :
Code PHP :
$this->tpl->put('FORM', $this->form->display());
Car contrairement au module news, il n'y a pas d'appel à la class "StringTemplate" :
Code PHP :
public function execute(HTTPRequestCustom $request) { $this->init(); $this->check_authorizations(); $this->build_form($request); if ($this->submit_button->has_been_submited() && $this->form->validate()) { $this->save(); $this->redirect(); } $this->tpl->put('FORM', $this->form->display()); return $this->build_response($this->tpl); } private function init() { $this->lang = LangLoader::get('common', 'articles'); $this->tpl = new FileTemplate('articles/ArticlesFormController.tpl'); $this->tpl->add_lang($this->lang); }
Mais du coup, ou est-ce que "# INCLUDE MSG #" est passé au TPL ?
Car la seule occurrence (qui semble correspondre) que je trouve c'est dans "AdminArticlesConfigController.class.php"
Tu coup est-ce que j'ai bien plus ou moins compris le principe ou alors je suis totalement à côté de la plaque ?
Est-ce qu'une notion de MVC m'échappe (je connais pratiquement rien de la notion de MVC, mis à part que l'on sépare le code qui "travail" du code qui "affiche").
Cordialement, janus57
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Citation :
Du coup on peu utiliser cette technique pour tout les template qui ne nécessite pas de condition d'affichage ?
Tu peux utiliser cette solution comme tu veux, si tu as envie de créer un StringTemplate au lieu d'un tpl tu peux. Sauf que tu ne pourras pas personnaliser le tpl en fonction du thème par exemple.
Citation :
Et donc si ma logique est bonne on utiliserait un .tpl si à la place de redirigé vers la news créer, on afficherais un message de succès pour dire que la news a bien été crée ?
Tu peux très bien utiliser un StringTemplate pour ce cas également.
Caché :
Par contre du coup j'ai une autre question, dans "ArticlesFormController.tpl", ...
Là par contre c'est une erreur de notre part, il n'y a pas plus de MSG, je vais supprimer ça
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
ReidLos :
Tu peux très bien utiliser un StringTemplate pour ce cas également.
Citation :
Et donc si ma logique est bonne on utiliserait un .tpl si à la place de redirigé vers la news créer, on afficherais un message de succès pour dire que la news a bien été crée ?
Tu peux très bien utiliser un StringTemplate pour ce cas également.
Bonjour,
possible d'avoir un exemple juste pour voir le principe ?
Citation :
Tu peux utiliser cette solution comme tu veux, si tu as envie de créer un StringTemplate au lieu d'un tpl tu peux. Sauf que tu ne pourras pas personnaliser le tpl en fonction du thème par exemple.
Mais sachant que le formulaire est généré via "# INCLUDE FORM #", et que si dans le TPL il n'y a que ou pratiquement que le formulaire, que ce soit avec ou sans .tpl la personnalisation en fonction du thème sera de toute façons (très) limité non ?
Comme pour "ArticlesFormController.tpl" par exemple, ici y a l'utilisation d'un .tpl à cause du javascript je pense, javascript d'ailleurs qui sert à rajouter le bouton qui permet de rajouter des [page] facilement.
Cordialement, janus57
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Code PHP :
$tpl = new StringTemplate('# INCLUDE MSG #'); $tpl->put('MSG', MessageHelper::display('Mon message de succès', MessageHelper::SUCCESS, 5));
Le 5 permet de définir le time out en seconde.
Ce code affichera juste le message de succès et il disparaîtra au bout de 5 secondes.
Citation :
Mais sachant que le formulaire est généré via "# INCLUDE FORM #", et que si dans le TPL il n'y a que ou pratiquement que le formulaire, que ce soit avec ou sans .tpl la personnalisation en fonction du thème sera de toute façons (très) limité non ?
Comme pour "ArticlesFormController.tpl" par exemple, ici y a l'utilisation d'un .tpl à cause du javascript je pense, javascript d'ailleurs qui sert à rajouter le bouton qui permet de rajouter des [page] facilement.
Comme pour "ArticlesFormController.tpl" par exemple, ici y a l'utilisation d'un .tpl à cause du javascript je pense, javascript d'ailleurs qui sert à rajouter le bouton qui permet de rajouter des [page] facilement.
Exactement
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
juste une dernière chose, le controller qui gère dans le module articles+news les cases "sources" (Cf : http://i.imgur.com/5jhvBYi.png), n'est pas intégré de base je suppose ?
Et du coup est-ce que ces cases "sources" sont rétro-compatible avec la V4.0
Cordialement, janus57
Édité par janus57 Le 16/12/2014 à 14h15
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement

Si tu inclus le fichier ArticlesFormFieldSelectSources.class.php et son tpl ailleurs, tu pourras l'inclure dans d'autres modules sur une 4.0 ou 4.1
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
y aura besoin de renommer des variables tpl/php ou sa passera sans problème ?
Car j'ai vu que c'est un couple controller avec un tpl qui a du javascript, et que que le JS c'est pas trop mon truc (je bidouille, mais sans plus).
Cordialement, janus57
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie