2010-04-27 11 views
8

Zastanawiam się, czy ktoś ma jakąś dobrą radę/doświadczenie dotyczące ustawiania dynamicznych tytułów meta w Symfony?Dynamiczne tytuły stron w Symfony 1.4

Obecnie rozwiązanie Jestem świadomy byłoby użyć następującego kodu, aby ustawić tytuł individidually w każdej akcji:

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

Bo też trzeba przetłumaczonych tytułów, mogę zadzwonić do pomocnika w i18n akcja, aby włączyć je do wyodrębnionych plików XLIFF. Żadnych specjalnych rzeczy SEO, tylko czysty tytuł.

Powyższe czynności wymagają jednak osobnego dostosowania każdej czynności. View.yml nie jest odpowiedni, ponieważ często mam wiele akcji/szablonów na moduł.

Czy ktoś jest świadomy lepszego podejścia w Symfony, czy jest to rzeczywiście właściwy/jedyny sposób, aby przejść?

Dziękuję.

Odpowiedz

5

Myślę, że pisanie oddzielnych tytułów w każdej akcji jest OK. Ale jeśli chcesz dodać trochę globalnego prefiksu można użyć coś takiego w układzie:

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

Również prawdopodobnie można manipulować za tytuł modułu używając PreExecute() metoda w działaniach.

+2

Stosując metodę PreExecute nie jest dobry sposób to zrobić, ponieważ będzie wiązać logikę tytuł do con troller. Powinien być naprawdę w widoku, ponieważ jest częścią warstwy prezentacji, a nie kontrolerem. – phidah

25

Powinieneś użyć slots.

w układzie <head> tagu:

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

A w szablonie Działanie:

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

ja osobiście jak przy użyciu yml plików, to oddziela 'konfiguracji' z kodu

Aby radzić sobie z dynamicznymi tytułami Wykonuję następujące czynności:

w aplikacjach/f rontend/config/app.yml

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

w apps/frontend/config/view.yml

default: 
    metas: 
    title: %APP_TITLE_DEFAULT% 

Jeśli trzeba mieć dane z działań postawione w tytule, należy utworzyć plik lib/myActions .class.php o następującej treści:

<?php 

class myActions extends sfActions 
{ 

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

} 

?> 

(Uwaga: zmień to, co chcesz, np. umieścić domyślny tytuł z przodu)

Następnie zmień klasę action.class.php przedłużyć myActions zamiast sfActions

class memberActions extends myActions 

i kiedy trzeba zmienić tytuł, po prostu zadzwoń to w swoim działaniu

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

a otrzymasz następujące tytuł (jeśli przy użyciu tego samego config jako zrobiłem powyżej):

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