Ya de vuelta de las vacaciones me voy a animar a explicar cómo he implementado los meta tags de Dejandomarcas.com
Hay que tener en cuenta el idioma seleccionado por el cliente mientras navega por la web, por tanto, he creado un par de funciones en el archivo app_controller.php para controlar este hecho:
Archivo app/app_controller.php
<?php
// Metodo publico para cambiar el lenguaje de la aplicacion
public function switchLanguage() {
// Compruebo si la variable de sesion de lenguaje esta definida
if (isset($this->params['named']['lang'])) {
// Guardo la variable
$this->Session->write('lang', $this->params['named']['lang']);
} elseif ($this->Session->check('lang')) {
// Default en castellano
$this->Session->write('lang', $this->Session->read('lang'));
} else {
// Default en castellano
$this->Session->write('lang', 'spa');
}
// Switch de idiomas
if ($this->Session->read('lang') == 'eng') {
// Ingles
Configure::write('Config.language', 'eng');
} else {
// Castellano
Configure::write('Config.language', 'spa');
}
}
// Metodo publico para obtener los metatags de una seccion activa
public function getMetas() {
// Compruebo el language de la sesion
switch ($this->Session->read('lang')) {
// Traduccion al castellano
case "spa":
// Compruebo por donde estoy navegando
switch ($this->params['controller']) {
case "home":
$title = __('Portfolio web', true);
$description = __('Ultimos trabajos añadidos al portfolio web de Javier Garcia', true);
$keywords = __('diseño grafico, desarrollo web, web, php, cakephp, portfolio, desarrollo web sevilla, programacion web sevilla', true);
break;
case "pages":
$title = __('Programador php, Desarrollador web, Diseñador en Sevilla', true);
$description = __('PHP, CakePHP, Drupal, OOP, XML, HTML, CSS, Javascript, JQuery, Ajax, MySQL, Oracle, Photoshop, Flash', true);
$keywords = __('diseño grafico, desarrollo web, web, php, cakephp, portfolio, desarrollo web sevilla, programacion web sevilla', true);
break;
case "contact":
$title = __('Formulario de contacto', true);
$description = __('Contacta conmigo rellenando el siguiente formulario', true);
$keywords = __('diseño grafico, desarrollo web, web, php, cakephp, portfolio, desarrollo web sevilla, programacion web sevilla', true);
break;
}
break;
// Traduccion al ingles
case "eng":
// Compruebo por donde estoy navegando
switch ($this->params['controller']) {
case "home":
$title = __('Portfolio web', true);
$description = __('Latest works added to my portfolio', true);
$keywords = __('diseño grafico, desarrollo web, web, php, cakephp, portfolio, desarrollo web sevilla, programacion web sevilla', true);
break;
case "pages":
$title = __('Web programmer, web developer in Seville', true);
$description = __('PHP, CakePHP, Drupal, OOP, XML, HTML, CSS, Javascript, JQuery, Ajax, MySQL, Oracle, Photoshop, Flash', true);
$keywords = __('diseño grafico, desarrollo web, web, php, cakephp, portfolio, desarrollo web sevilla, programacion web sevilla', true);
break;
case "contact":
$title = __('Contact me', true);
$description = __('Contact me filling the following form', true);
$keywords = __('diseño grafico, desarrollo web, web, php, cakephp, portfolio, desarrollo web sevilla, programacion web sevilla', true);
break;
}
break;
// Salida por defecto
default:
// Compruebo por donde estoy navegando
switch ($this->params['controller']) {
case "home":
$title = __('Portfolio web', true);
$description = __('Ultimos trabajos añadidos al portfolio web de Javier Garcia', true);
$keywords = __('diseño grafico, desarrollo web, web, php, cakephp, portfolio, desarrollo web sevilla, programacion web sevilla', true);
break;
case "pages":
$title = __('Programador php, Desarrollador web, Diseñador en Sevilla', true);
$description = __('PHP, CakePHP, Drupal, OOP, XML, HTML, CSS, Javascript, JQuery, Ajax, MySQL, Oracle, Photoshop, Flash', true);
$keywords = __('diseño grafico, desarrollo web, web, php, cakephp, portfolio, desarrollo web sevilla, programacion web sevilla', true);
break;
case "contact":
$title = __('Formulario de contacto', true);
$description = __('Contacta conmigo rellenando el siguiente formulario', true);
$keywords = __('diseño grafico, desarrollo web, web, php, cakephp, portfolio, desarrollo web sevilla, programacion web sevilla', true);
break;
}
break;
}
// Seteo las variables para la vista
$this->set('title', $title);
$this->set('description', $description);
$this->set('keywords', $keywords);
}
?>
¿Cómo funciona todo esto?
Si os habéis fijado, el switch de idiomas lo hago mediante un par de citas literarias (me pareció una idea curiosa de hacerlo en lugar de poner las típicas banderas). Al hacer click sobre la frase What’s done is done’ – W. Shakespeare llamo a la función switchLanguage(), la cual me evalúa qué idioma está definido en la sesión y lo cambia en consecuencia. En este momento, llamo también a getMetas(), que me cambiará los meta tags en consonancia con el idioma seleccionado.
Para cargar los valores por defecto tan solo deberemos incluir las dos funciones dentro de la sentencia beforeFilter().
Espero que os ayude en vuestros pinitos con CakePHP y que os sea de utilidad.