2010-04-27 17 views
8

Me pregunto si alguien tiene algún buen consejo/experiencia con respecto a la configuración de meta títulos dinámicos en Symfony.Títulos de página dinámicos en Symfony 1.4

Actualmente, la solución yo sepa sería utilizar el código siguiente para establecer un título individidually en cada acción:

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

porque yo también necesito títulos traducidos, podría llamar al ayudante en i18n la acción para incluirlos en los XLIFF extraídos. No se necesitan elementos especiales de SEO, solo un título limpio.

Sin embargo, lo anterior requiere que modifique cada acción por separado. View.yml no es adecuado, ya que con frecuencia tengo varias acciones/plantillas por módulo.

¿Alguien está consciente de un mejor enfoque en Symfony o esta es la forma correcta/única de hacerlo?

Gracias.

Respuesta

5

Creo que escribir títulos por separado en cada acción es correcto. Pero si usted quiere añadir un poco prefijo global se puede usar algo como esto en el diseño:

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

También es probable que pueda manipular a un título por cada módulo utilizando el método() en las acciones métodos preExecute.

+2

Utilizando el método de métodos preExecute no es una buena manera de hacerlo ya que se unirá a la lógica del título a la contra Troller Realmente debería estar en la vista porque es parte de la capa de presentación, no del controlador. – phidah

25

Debe usar slots.

En su etiqueta de diseño <head>:

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

Y en una plantilla de acción:

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

personalmente me gusta usar los archivos yml, que separa a 'configuración' del código

Para tratar con títulos dinámicos hago lo siguiente:

en aplicaciones/f rontend/config/app.yml

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

en apps/frontend/config/view.yml

default: 
    metas: 
    title: %APP_TITLE_DEFAULT% 

Si es necesario tener datos de las acciones puestas en el título, crear el archivo lib/myActions .class.php con el siguiente contenido:

<?php 

class myActions extends sfActions 
{ 

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

} 

?> 

(nota: modifique esto como desee, por ejemplo poner el título predeterminado al frente)

A continuación, cambie su action.class.php para extender myActions en lugar de sfActions

class memberActions extends myActions 

y siempre que tenga que cambiar el título, simplemente llame a esto en su acción

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

y obtendrá el siguiente título (si se utiliza la misma configuración como hice más arriba):

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