2010-04-27 10 views
8

Je me demande si quelqu'un a un bon conseil/expérience concernant la définition de méta-titres dynamiques dans Symfony?Titres de pages dynamiques dans Symfony 1.4

Actuellement, la solution que je suis au courant serait d'utiliser le code suivant pour définir un titre individidually dans chaque action:

$this->getResponse()->setTitle('This is a title'); 

Parce que je dois aussi titres traduits, je pourrais appeler l'aide i18n dans l'action pour les inclure dans les fichiers XLIFF extraits. Pas de truc spécial de SEO nécessaire, juste un titre propre.

Cependant, ce qui précède exige que je modifie chaque action séparément. View.yml ne convient pas car j'ai souvent plusieurs actions/templates par module.

Quelqu'un est-il au courant d'une meilleure approche dans Symfony ou est-ce vraiment le bon/seul moyen d'y aller?

Merci.

Répondre

5

Je pense que l'écriture de titres séparés dans chaque action est OK. Mais si vous voulez ajouter un peu de préfixe global, vous pouvez utiliser quelque chose comme ça dans la mise en page:

<title>SITE NAME — <?= $sf_response->getTitle() ?></title> 

Aussi, vous pouvez probablement manipuler un titre par module en utilisant la méthode preExecute() dans les actions.

+2

en utilisant la méthode preExecute n'est pas une bonne façon de le faire car il attacher la logique du titre à la con troller. Il devrait vraiment être dans la vue, car il fait partie de la couche de présentation, pas du contrôleur. – phidah

25

Vous devez utiliser slots.

Dans votre mise en page tag <head>:

<title><?php echo get_slot('page_title', __('Default page title here')) ?></title> 

Et dans un modèle d'action:

<?php slot('page_title', __('Action page title goes here')) ?> 
3

Personnellement, je aime utiliser les fichiers YML, il sépare 'configuration' à partir du code

Pour gérer les titres dynamiques Je fais ce qui suit:

dans apps/f rontend/config/app.yml

all: 
    title_separator: ' - ' 
    title_default: 'TITLE' 

dans les applications/frontend/config/view.yml

default: 
    metas: 
    title: %APP_TITLE_DEFAULT% 

Si vous avez besoin d'avoir des données de vos actions mises dans le titre, de créer un fichier lib/myActions .class.php avec le contenu suivant:

<?php 

class myActions extends sfActions 
{ 

    protected function setTitle($string) 
    { 
     $this->getResponse()->setTitle($string . sfConfig::get('app_title_separator') . sfConfig::get('app_title_default')); 
    } 

} 

?> 

(remarque: modifiez ceci comme vous le souhaitez, ex. mettre le titre par défaut à l'avant)

Puis changez votre action.class.php pour étendre myActions au lieu de sfActions

class memberActions extends myActions 

et chaque fois que vous avez besoin de changer le titre, il suffit d'appeler ceci dans votre action

$this->setTitle('This is how I roll'); 

et vous obtiendrez le titre suivant (si vous utilisez la même configuration que Je l'ai fait ci-dessus):

This is how I roll - TITLE 
1
$i18n = $this->getContext()->getI18N(); 
$this->getResponse()->setTitle('Your title' . ' | ' . $i18n->__('your module name')); 
Questions connexes