Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Quelle est la bonne practice pour afficher le titre de la page ?
Pour l'instant je fais comme ci-dessous :
[lang=php] // Dans une view <?php $this->headTitle("Titre de ma page"); ?>
[lang=php] // Dans le layout <?php $title = $this->headTitle(); echo ($title[0] !== 'SiteName') ? '<h1>'.$title[0].'</h1>' : ''; ?>
Je trouve ça très moche, je n'ai rien trouvé dans le framework, ai-je mal cherché ?
Merci
Dernière modification par alien7 (29-03-2013 13:11:41)
Hors ligne
Bonsoir,
Je pars du principe que le Head Title et mon ou mes titre(s) ne sont pas forcement les mêmes.
- HeadTitle : Mon Titre Court - Mon Site
- Title : Mon titre long I + un sous titre I + titre II , titre III etc...
Mon Head title se situe dans le Layout alors que les titres seront dans la vue, en dure la plus part du temps ou dépendant d'un objet global a la vue. Un enregistrement data base par exemple, passé en paramètre.
JFV
Dernière modification par jfvole (04-03-2013 19:21:59)
Hors ligne
Un ptit up, j'ai toujours trouvé de solution
Merci
Hors ligne
Salut Alien7 on t'a répondu c'est pour ça que personne n'a sur-enchéri. Ca passe par l'aide de vue headTitle que tu peux prendre soit une chaine en dur ou une variable passée à la vue par le contrôleur comme paramètre. Tu peux aussi définir des séparateurs pour avoir un titre global pour ton application, celui-ci on le met dans le layout et un "sous titre" de page dans la vue.
Grosso modo si tu choisis le séparateur "/" tu auras un titre du genre "Ma page / Mon nom d'application"
Hors ligne
Ce que je voulais c'est mettre justement mon titre dans le layout et non dans les views.
Avoir dans mon layout :
<h1>Mon titre</h1>
D'ou mon 1er post, bon pas grave je vais me débrouiller autrement.
Hors ligne
Je ne comprends pas bien ce que tu veux faire à vrai dire.
HeadTitle c'est un viewHelper pour définir le titre de la page dans le navigateur (dans la balise <head>), pas pour les titres html.
Maintenant si tu veux écrire le même titre que tu as dans ton navigateur, mais dans ta page, bah fais comme tu as déjà fait...
Hors ligne
Bah oui mais c'est juste que c'est moche. Il n'y a aucune méthode dans le framework qui permet de faire ça proprement. Pour moi il y a une erreur de conception.
Dernière modification par alien7 (28-03-2013 14:58:00)
Hors ligne
bah au pire en 5.4...
<h1><?php echo ($this->headTitle()[0] === 'SiteName') ? : $this->headTitle()[0] ; ?></h1>
Sinon "erreur de conception" je comprends encore moins... Tu veux peut-être envoyer une variable au layout à partir de la vue?
Dernière modification par Polzie (28-03-2013 19:17:29)
Hors ligne
Non une méthode genre dans la vue :
[lang=php] $this->setTitle("Titre de la page"); // au lieu de headTitle, setTitle se chargera d'injecter dans le headTitle le titre de la page
On pourrait ainsi par la suite récupérer le titre par une autre méthode
Pour ceux qui ont fait du Drupal -> drupal_set_title().
Enfin bon je sais pas vraiment en fait, je dis ptete des bétises hein.
Dernière modification par alien7 (28-03-2013 19:27:40)
Hors ligne
quand tu dis titre de la page, tu parle d'un titre que tu affiche dans le body ?
( pour l'afficher, par exemple, à coté du logo du site ?)
Dernière modification par aromatix (28-03-2013 22:52:46)
Hors ligne
Oui je parle du titre de la page que j'afficherai dans une balise h1 :
exemple de layout :
[lang=php] <?php $title = $this->headTitle(); echo ($title[0] !== 'whyBook') ? '<h1>'.$title[0].'</h1>' : ''; ?> <div id="content"> <?= $this->content; ?> </div>
là ma balise h1 je voulais le sortir du div content, c'était un choix, c'est tout, bon bah du coup j'ai mis ça à l'intérieur du div content.
Le titre on peut aussi en avoir besoin pour autre chose, par exemple pour twitter ou facebook open graph
Donc au final je pense qu'il faudrait revoir ça dans le framework et non pas bidouiller ou crée des helpers et je ne sais quoi.
Qu'en pensez-vous ?
Dernière modification par alien7 (29-03-2013 09:53:20)
Hors ligne
Là je pense que le problème vient plus de ton utilisation. Typiquement le titre de ton application sera défini dans ton layout (là je parle de l'attribut title) puisqu'il est commun à toute ton application.
Ensuite pour chaque page de ton application tu peux ajouter un sous titre (encore une fois dans le title).
Donc si je résume à cette étape ta vue a connaissance du sous titre puisque tu lui passes soit depuis ton contrôleur, soit tu l'écris directement en dur dans ta vue.
Ensuite si tu veux faire des sous titre pour organiser ta page sous forme de h1 tu vas aussi soit le faire en dur dans ta vue, soit le faire via une variable que tu passes en paramètre à ta vue depuis ton contrôleur.
Donc encore une fois si je résume ta vue a connaissance du sous titre de la page et du titre h1.
A partir de là tu peux récupérer le titre global du site via l'aide de vue headTitle et tu peux créer une arborescence jusqu'à ton h1 (si tu le souhaites).
Enfin l'idée de sortir le h1 de ta vue en le mettant dans le layout n'est pas une bonne idée car le h1 est propre à ta vue et non au layout. C'est sûr que si toute tes vues ont besoin de cet attribut toujours au même endroit c'est chiant de le faire manuellement. Tu peux donc intercepter l'évènement qui se produit juste avant le rendu de la vue pour injecter à ton layout la variable qui est utilisée pour faire ton h1 et à ce moment là tu pourras le sortir du "content"
Hors ligne
je croix qu'il y a plusieurs façons de répondre au besoin:
par exemple en renvoyant un titre à partie de laction comme ceci:
return new VewModel(array( 'subtitle' => 'Mon Sous Titre', ));
et en utilisant la persistance de ton sous-titre entre tes vues
<?php // dans ta vue $this->placeholder('subtitle')->set($this->subtitle) ?>
ensuite tu fait un echo là où tu veut dans ta layout
<?php // dans la layout echo $this->placeholder('subtitle'); ?>
Hors ligne
Ou mieux car pas de registre static, ni de manipulation de container inutile pour ce que tu recherches.
Dans ta vue :
$this->layout()->setVariable("title", "mon titre") // Ou $this->viewmodel()->getRoot()->setVariable("title", "mon titre")
Dans ton layout :
echo $this->title;
Hors ligne
Ok merci
Hors ligne