Tema: Zend y SEO
Ver Mensaje Individual
  #20 (permalink)  
Antiguo 10/06/2011, 06:26
antoniojim
 
Fecha de Ingreso: marzo-2005
Ubicación: Málaga
Mensajes: 115
Antigüedad: 19 años, 8 meses
Puntos: 0
Respuesta: Zend y SEO

Hola otra vez, he rehecho el plugin y lo he aunado todo en uno.

Resulta que he tenido que hacer un $_SERVER['REQUEST_URI'] porque no he encontrado ninguna manera den zend de recoger la url en el startup.

Aún así, algo no estoy haciendo con el router porque no me funcionan como yo quiero, a ver si me podeís echar una mano.

Aquí os dejo el código del plugin:
Código PHP:
 class Zend_My_Controller_Plugin_Language extends Zend_Controller_Plugin_Abstract

      
{
          
          protected 
$_request;
          protected 
$_locale;
          protected 
$_translate;
          protected 
$_router;
          
          public function 
routeStartup(Zend_Controller_Request_Abstract $request) {
              
$this->_request=$request;
              
              
$this->initLocale();
              
$this->initTranslate();
              
$this->initRouter();
          }
          
          protected function 
initLocale() {
                
// Primero, miro en la url si hay un idioma escogido o no
                // como es el primero, me tengo que asegurar que no sea un 
                // modulo o un controller o un action 
                // para eso utilizo isLocale para ver si lo que cojo es un
                // idioma o no, si no lo es, cojo como idioma predefenido 'es'
                
$uri_parts explode('/'$_SERVER['REQUEST_URI']);
                
$locale = (Zend_Locale::isLocale($uri_parts[1]))
                        ? 
$uri_parts[1]
                        : 
'es'//idioma por defecto 'es'
                
                //segundo, establezco el locale que haya cogido de la 
                //dirección y hago un paramentro lang para tenerlo en el request
                //y registro el locale
                
                
$this->_locale = new Zend_Locale($locale);
                
$this->_request->setParam('lang'$this->_locale->toString());

                
                
Zend_Registry::set('Zend_Locale'$this->_locale);
                
Zend_Registry::set('lang',$this->_locale->toString());
                echo 
$this->_locale->toString();
          }
          protected function 
initTranslate() {
              
/*Ahora inicializo mi translate, tanto las palabras que quiero 
               * a través de gettext como los seo con los archivos ini
              */
              
$this->_translate= new Zend_Translate(
                                    
'gettext',
                                    
APPLICATION_PATH.'/configs/languages/es_ES.mo',
                                    
'es'); //inicializo el translate y añado español
              
$this->_translate->addTranslation(
                                    
APPLICATION_PATH.'/configs/languages/en_GB.mo',
                                    
'en'); //añado el inglés.
              /* añado los archivos ini para el seo, para eso genero una 
               * variable nueva de translate con otro adaptador y luego la
               * añado
              */
              
$translateSeoES=new Zend_Translate(
                                    
'ini',
                                    
APPLICATION_PATH.'/configs/languages/seo_es_ES.ini',
                                    
'es'); //para el español
              
$translateSeoEN=new Zend_Translate(
                                    
'ini',
                                    
APPLICATION_PATH.'/configs/languages/seo_en_GB.ini',
                                    
'en'); //para el inglés
              
$this->_translate->addTranslation(array("content"=>$translateSeoES,"locale"=>"es"));
              
$this->_translate->addTranslation(array("content"=>$translateSeoEN,"locale"=>"en"));
              
              
              if (!
$this->_translate->isAvailable($this->_locale->toString())) {
                    throw new 
Zend_Translate_Exception('Translation for locale '
                    
$this->_locale->toString() . ' does not exist.');
              }
              
              
//establezo el locale para la traduccion
              
$this->_translate->setLocale($this->_locale->toString());
              
//registro el translate
              
Zend_Registry::set('Zend_Translate',$this->_translate);
              
          }
          protected function 
initRouter() {
               
$this->_router Zend_Controller_Front::getInstance()->getRouter();
               
             
            
/*
             * La manera de trabajar va a ser que las páginas de información
             * van a ir en el controller index, cada uno con su vista, así que 
             * he hecho estos routers para que no aparezca el nombre del 
             * controlador, sólo la acción
             */
        
Zend_Controller_Router_Route::setDefaultTranslator($this->_translate);
        
        
$route = new Zend_Controller_Router_Route(
                        
':@controller/:@action/*',
                        array(
                            
'lang' => 'es',
                            
'controller' => 'index',
                            
'action' => 'index'
                        
)
        );
        
$this->_router->addRoute('language'$route);
        
$route->assemble(array("controller"=>"index","action"=>"action"));
        
$route->assemble(array("controller"=>"index","action"=>"action"));
        
        
$route = new Zend_Controller_Router_Route(
                        
':lang/:@controller/:@action/*',
                        array(
                            
'lang'=>'en',
                            
'controller' => 'index',
                            
'action' => 'index'
                        
)
        );
        
$this->_router->addRoute('localized'$route);
        
$route->assemble(array("controller"=>"index","action"=>"action"));
        
$route->assemble(array("controller"=>"index","action"=>"action"));
        
               
          }
      }