2010-04-27 21 views
8

Mi chiedo se qualcuno ha qualche buon consiglio/esperienza riguardo l'impostazione di meta titoli dinamici in Symfony?Titoli di pagine dinamiche in Symfony 1.4

Attualmente, la soluzione io sappia sarebbe quella di utilizzare il seguente codice per impostare un titolo individidually in ogni azione:

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

Perché ho anche bisogno di titoli tradotti, ho potuto chiamare l'helper i18n in l'azione per farli includere negli XLIFF estratti. Non è necessaria alcuna roba SEO speciale, solo un titolo pulito.

Tuttavia, quanto sopra richiede che io modifichi ogni singola azione separatamente. View.yml non è adatto in quanto ho spesso più azioni/modelli per modulo.

Qualcuno è a conoscenza di un approccio migliore in Symfony o questa è davvero la giusta/unica strada da percorrere?

Grazie.

risposta

5

Penso che scrivere titoli separati in ogni azione sia OK. Ma se si desidera aggiungere un po 'prefisso globale si può usare qualcosa di simile nel layout:

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

anche probabilmente si può manipolare un titolo per modulo utilizzando il metodo() in azioni preExecute.

+2

Utilizzando il metodo preExecute non è un bel modo di farlo dal momento che legherà la logica titolo per l'aria troller. Dovrebbe essere nella vista perché è parte del livello di presentazione, non del controller. – phidah

25

È necessario utilizzare slots.

nel layout <head> tag:

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

E in un modello di azione:

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

Personalmente, come utilizzando i file YML, separa 'configurazione' dal codice

Per trattare i titoli dinamici che faccio io:

in app/f rontend/config/app.yml

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

in apps/frontend/config/view.yml

default: 
    metas: 
    title: %APP_TITLE_DEFAULT% 

Se avete bisogno di avere i dati dalle vostre azioni messe in titolo, creare il file lib/myActions .class.php con il seguente contenuto:

<?php 

class myActions extends sfActions 
{ 

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

} 

?> 

(nota: modificare a piacere, ad es. inserire il titolo predefinito nella parte anteriore)

Quindi modificare action.class.php per estendere myActions invece di sfActions

class memberActions extends myActions 

e ogni volta che è necessario modificare il titolo, basta chiamare questo nella vostra azione

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

e si otterrà il seguente titolo (se si utilizza la stessa configurazione come l'ho fatto in precedenza):

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