2010-04-27 9 views
8

Ich frage mich, ob jemand einen guten Rat/Erfahrung in Bezug auf dynamische Meta-Titel in Symfony hat?Dynamische Seitentitel in Symfony 1.4

Derzeit ist die Lösung, die ich bewusst bin, wäre es, den folgenden Code zu verwenden, um einen Titel individidually in jeder Aktion zu setzen:

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

Weil ich auch übersetzt Titel brauchen, könnte ich die i18n Helfer rufen in die Aktion, um sie in die extrahierten XLIFFs aufzunehmen. Keine speziellen SEO Sachen, nur ein sauberer Titel.

Jedoch erfordert das oben genannte, dass ich jede einzelne Handlung einzeln zwicke. View.yml ist nicht geeignet, da ich häufig mehrere Aktionen/Vorlagen pro Modul habe.

Kennt jemand einen besseren Ansatz in Symfony oder ist das wirklich der richtige/einzige Weg?

Vielen Dank.

Antwort

5

Ich denke, separate Titel in jeder Aktion zu schreiben ist in Ordnung. Aber wenn Sie einige globale Präfix hinzufügen möchten, können Sie so etwas wie dies in Layout verwenden:

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

Auch können Sie wahrscheinlich einen Titel pro Modul manipulieren mit PreExecute() -Methode in Aktionen.

+2

die PreExecute Methode ist keine schöne Art und Weise, es zu tun, da er den Titel Logik an die con binden Troller. Es sollte wirklich in der Ansicht sein, da es Teil der Präsentationsschicht ist, nicht der Controller. – phidah

25

Sie sollten slots verwenden.

In Ihrem Layout <head> tag:

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

Und in einer Aktionsvorlage:

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

Ich persönlich mag die yml Dateien verwenden, es trennt 'Konfiguration' von Code

zu Deal mit dynamischen Titeln mache ich folgendes:

in apps/f rontend/config/app.yml

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

in apps/frontend/config/view.yml

default: 
    metas: 
    title: %APP_TITLE_DEFAULT% 

Wenn Sie Daten aus Ihren Aktionen setzen in den Titel haben müssen, Datei lib/myActions erstellen .class.php mit folgendem Inhalt:

<?php 

class myActions extends sfActions 
{ 

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

} 

?> 

(Hinweis: ändern Sie dies, wie Sie möchten, z Standardtitel an der Vorderseite setzen)

Dann ändern Sie Ihre action.class.php erweitern myActions statt sfActions

class memberActions extends myActions 

und wann immer Sie den Titel ändern müssen, rufen Sie diese in Ihrer Aktion

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

und Sie werden die folgenden Titel (wenn die gleiche config als ich habe oben):

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