Foros del Web » Programando para Internet » PHP » Zend »

Navigation y comportamiento raro

Estas en el tema de Navigation y comportamiento raro en el foro de Zend en Foros del Web. Buenas, Llevo toda la mañana liado con esto y no doy con que puede ser. Estoy preparando para gestionar los menús con Zend_Navigation (1.11), carga ...
  #1 (permalink)  
Antiguo 04/11/2011, 07:07
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 10 meses
Puntos: 261
Navigation y comportamiento raro

Buenas,

Llevo toda la mañana liado con esto y no doy con que puede ser.

Estoy preparando para gestionar los menús con Zend_Navigation (1.11), carga todo bien menos la url, que carga bien solo en el nivel en el que te encuentras.

Por ejemplo con un menú básico:
Código XML:
Ver original
  1. <configdata>
  2.     <nav>
  3.         <add1>
  4.             <label>Label1</label>
  5.             <module>module</module>
  6.             <route>module</route>
  7.         </add1>
  8.        
  9.         <add2>
  10.             <label>Label2</label>
  11.             <module>module2</module>
  12.             <controller>controller2</controller>
  13.             <route>controller</route>
  14.         </add2>
  15.        
  16.         <add3>
  17.             <label>Label3</label>
  18.             <module>module3</module>
  19.             <controller>controller3</controller>
  20.             <action>action3</action>
  21.             <route>action</route>
  22.         </add3>
  23.     </nav>
  24. <configdata>
Si nos encontramos en el primer nivel, solo el module, carga las url del menú de la siguiente forma:
La url contiene la variable para el lenguaje, que es la que da problemas.
Código:
Label1 ( /es/module/ )
Label2 ( /%3Alang/module/controller )
Label3 ( /%3Alang/module/controller/action )
Si nos encontramos en el Label2 corrigiendo la url nos queda así:
Código:
Label1 ( /%3Alang/module/ )
Label2 ( /es/module/controller )
Label3 ( /%3Alang/module/controller/action )
Y lo mismo si entramos en el action, Label3:
Código:
Label1 ( /%3Alang/module/ )
Label2 ( /%3Alang/module/controller )
Label3 ( /es/module/controller/action )
El caso es que los router, y demás funciona todo correcto, solo encuentro esto con los menú que genera Zend_Navigation, y los enlaces que apuntan fuera del nivel en el que te encuentras.

Os a pasado algo similar o tenéis alguna idea de que puede ser?

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #2 (permalink)  
Antiguo 04/11/2011, 07:34
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 2 meses
Puntos: 845
Respuesta: Navigation y comportamiento raro

Convengamos que Zend_Navigation lejos esta de ser la panacea, es mas, es el componente que mas ganas de matar al devel te da, ahora en cuanto a tu problema, cual es exactamente ?, que en vez de agregar el lang(es|en) te lo esta cambiando por %3Alang(%3A = :) ?

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 04/11/2011, 07:53
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 10 meses
Puntos: 261
Respuesta: Navigation y comportamiento raro

Cita:
Iniciado por masterpuppet Ver Mensaje
Convengamos que Zend_Navigation lejos esta de ser la panacea, es mas, es el componente que mas ganas de matar al devel te da,


Cita:
Iniciado por masterpuppet Ver Mensaje
...ahora en cuanto a tu problema, cual es exactamente ?, que en vez de agregar el lang(es|en) te lo esta cambiando por %3Alang(%3A = :) ?

Saludos.
Hola masterpuppet,

Exactamente, pero solo me los cambia en los enlaces que apuntan fuera del nivel en el que estás.

Estaba curioseando, y por la manera que se presenta parecía que podía facilitarme la gestión de los menús.

Un saludo,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #4 (permalink)  
Antiguo 04/11/2011, 08:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Navigation y comportamiento raro

¿Podrías poner tus routes? Al parecer el problema puede venir de ahí...

Saludos.
  #5 (permalink)  
Antiguo 04/11/2011, 09:20
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 10 meses
Puntos: 261
Respuesta: Navigation y comportamiento raro

Cita:
Iniciado por GatorV Ver Mensaje
¿Podrías poner tus routes? Al parecer el problema puede venir de ahí...
Hola GatorV, dejo los routers

Código PHP:
Ver original
  1. //bootstrap
  2. protected function _initRoutes()
  3. {
  4.     $frontController = Zend_Controller_Front::getInstance();
  5.     $router = $frontController->getRouter();
  6.     $router->removeDefaultRoutes();
  7.  
  8.     $lang = '([a-zA-Z]{2})';
  9.     $module = '(?:(\w+))';
  10.     $controller = '(?:(\w+))';
  11.     $action = '(?:(\w+))';
  12.     $param = '(?:(\w+))';
  13.  
  14.     //Route index
  15.     $router->addRoute(
  16.             'default', new Zend_Controller_Router_Route_Regex(
  17.                     'es/auth/secure/login/' . $param,
  18.                     array(
  19.                         'lang'       => 'es',
  20.                         'module'     => 'auth',
  21.                         'controller' => 'secure',
  22.                         'action'     => 'login'
  23.                     ),
  24.                     array(
  25.                         1 => 'lang',
  26.                         2 => 'module',
  27.                         3 => 'controlelr',
  28.                         4 => 'action'
  29.                     ),
  30.                     '%s/%s/%s/%s/')
  31.     );
  32.  
  33.     //Route index
  34.     $router->addRoute(
  35.             'ind', new Zend_Controller_Router_Route_Regex(
  36.                     '(.*)',
  37.                     array(
  38.                         'lang'       => ':lang',
  39.                         'module'     => 'default',
  40.                         'controller' => 'index',
  41.                         'action'     => 'index'
  42.                     ),
  43.                     array(1 => 'lang'),
  44.                     '/')
  45.     );
  46.  
  47.     //Route lang
  48.     $router->addRoute(
  49.             'lan', new Zend_Controller_Router_Route_Regex(
  50.                     $lang,
  51.                     array(
  52.                         'lang'       => ':lang',
  53.                         'module'     => 'default',
  54.                         'controller' => 'index',
  55.                         'action'     => 'index'
  56.                     ),
  57.                     array(
  58.                         1 => 'lang'
  59.                     ),
  60.                     '%s/')
  61.     );
  62.  
  63.     //Route lang/module
  64.     $router->addRoute(
  65.             'lanmod', new Zend_Controller_Router_Route_Regex(
  66.                     $lang . '/' . $module,
  67.                     array(
  68.                         'lang'       => ':lang',
  69.                         'module'     => ':module',
  70.                         'controller' => 'index',
  71.                         'action'     => 'index'
  72.                     ),
  73.                     array(
  74.                         1 => 'lang',
  75.                         2 => 'module'
  76.                     ),
  77.                     '%s/%s/')
  78.     );
  79.  
  80.     //Route lang/module/controller
  81.     $router->addRoute(
  82.             'lanmodcon', new Zend_Controller_Router_Route_Regex(
  83.                     $lang . '/' . $module . '/' . $controller,
  84.                     array(
  85.                         'lang' => ':lang',
  86.                         'module' => ':module',
  87.                         'controller' => ':controller',
  88.                         'action' => 'index'
  89.                     ),
  90.                     array(
  91.                         1 => 'lang',
  92.                         2 => 'module',
  93.                         3 => 'controller'
  94.                     ),
  95.                     '%s/%s/%s/')
  96.     );
  97.  
  98.     //Route lang/module/controller/action
  99.     $router->addRoute(
  100.             'lanmodconact', new Zend_Controller_Router_Route_Regex(
  101.                     $lang . '/' . $module . '/' . $controller . '/' . $action,
  102.                     array(
  103.                         'lang' => ':lang',
  104.                         'module' => ':module',
  105.                         'controller' => ':controller',
  106.                         'action' => ':action'
  107.                     ),
  108.                     array(
  109.                         1 => 'lang',
  110.                         2 => 'module',
  111.                         3 => 'controller',
  112.                         4 => 'action'
  113.                     ),
  114.                     '%s/%s/%s/%s/')
  115.     );
  116.  
  117.     //Route lang/module/controller/action/param1
  118.     $router->addRoute(
  119.             'p1', new Zend_Controller_Router_Route_Regex(
  120.                     $lang . '/' . $module . '/' . $controller . '/' . $action . '/' . $param,
  121.                     array(
  122.                         'lang'      => ':lang',
  123.                         'module'    => ':module',
  124.                         'controller' => ':controller',
  125.                         'action'    => ':action',
  126.                         'param1'        => ':param1'
  127.                     ),
  128.                     array(
  129.                         1 => 'lang',
  130.                         2 => 'module',
  131.                         3 => 'controller',
  132.                         4 => 'action',
  133.                         5 => 'param1'
  134.                     ),
  135.                     '%s/%s/%s/%s/%s')
  136.     );
  137.  
  138.     //Route lang/module/controller/action/param1/param2
  139.     $router->addRoute(
  140.             'p1p2', new Zend_Controller_Router_Route_Regex(
  141.                     $lang . '/' . $module . '/' . $controller . '/' . $action . '/' . $param . '/' . $param,
  142.                     array(
  143.                         'lang' => ':lang',
  144.                         'module' => ':module',
  145.                         'controller' => ':controller',
  146.                         'action' => ':action',
  147.                         'param1' => ':param1',
  148.                         'param2' => ':param2'
  149.                     ),
  150.                     array(
  151.                         1 => 'lang',
  152.                         2 => 'module',
  153.                         3 => 'controller',
  154.                         4 => 'action',
  155.                         5 => 'param1',
  156.                         6 => 'param2'
  157.                     ),
  158.                     '%s/%s/%s/%s/%s/%s')
  159.     );
  160.  
  161.     //Route lang/module/controller/action/param1/param2/param3
  162.     $router->addRoute(
  163.             'p1p2p3', new Zend_Controller_Router_Route_Regex(
  164.                     $lang . '/' . $module . '/' . $controller . '/' . $action . '/' . $param . '/' . $param . '/' . $param,
  165.                     array(
  166.                         'lang'      => ':lang',
  167.                         'module'    => ':module',
  168.                         'controller' => ':controller',
  169.                         'action'    => ':action',
  170.                         'param1'    => ':param1',
  171.                         'param2'    => ':param2',
  172.                         'param3'    => ':param3'
  173.                     ),
  174.                     array(
  175.                         1 => 'lang',
  176.                         2 => 'module',
  177.                         3 => 'controller',
  178.                         4 => 'action',
  179.                         5 => 'param1',
  180.                         6 => 'param2',
  181.                         7 => 'param3'
  182.                     ),
  183.                     '%s/%s/%s/%s/%s/%s/%s')
  184.     );
  185. }
Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #6 (permalink)  
Antiguo 04/11/2011, 09:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Navigation y comportamiento raro

No veo las rutas que declaras arriba (module, controller, action), y como comentario, las rutas que usas creo que lo que quieres es solo declarar la variable de lang antes, lo puedes hacer así:
Código PHP:
Ver original
  1. $router->removeDefaultRoutes();
  2.     $router->addRoute(
  3.             'default',
  4.             new Zend_Controller_Router_Route(
  5.                   ':lang/:module/:controller/:action/*',
  6.                   array(
  7.                          'module' => 'default',
  8.                          'controller' => 'index',
  9.                          'action' => 'index'
  10.                   )
  11.              )
  12.     );
  13.     $router->setGlobalParam('lang', 'en');

Así no tienes que específicar diferentes versiones con los parámetros y todos mantienen la misma estructura /lang/module/controller/action/var1/param1/etc

En tu navigation puedes dejar las rutas como default, y solamente si quieres cambiar el idioma, alteras el valor de setGlobalParam.

Saludos.
  #7 (permalink)  
Antiguo 04/11/2011, 09:34
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 2 meses
Puntos: 845
Respuesta: Navigation y comportamiento raro

Otra opción para el application.ini

Código INI:
Ver original
  1. ;; Router
  2. resources.router.routes.plain.type = Zend_Controller_Router_Route_Module
  3. resources.router.routes.plain.abstract = On    
  4. resources.router.routes.plain.defaults.module = "default"
  5.  
  6. resources.router.routes.lang.type = Zend_Controller_Router_Route
  7. resources.router.routes.lang.route = ":lang"
  8. resources.router.routes.lang.reqs.lang = "^(es|en|de)$"
  9. resources.router.routes.lang.defaults.lang = "es"
  10.  
  11. resources.router.routes.default.type = Zend_Controller_Router_Route_Chain
  12. resources.router.routes.default.chain = "lang, plain"

Y el error es porque asignas a lang :lang luego cuando hace el encoding transforma los ":" a "%3A"

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 04/11/2011, 09:46
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 10 meses
Puntos: 261
Respuesta: Navigation y comportamiento raro

Lo pruebo y os cuento.

Gracias por la ayuda.

Un saludo,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #9 (permalink)  
Antiguo 04/11/2011, 10:23
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 10 meses
Puntos: 261
Respuesta: Navigation y comportamiento raro

Pues todo arreglado.

Ahora lo muestra correctamente, pero me deja fijo el idioma por default en los enlaces del navigation.

Como se pueden pasar el request al navigation para que tome los datos del lang?

Se puede hacer un set con Zend_Registry?... seguro que es más fácil y me estoy complicando.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #10 (permalink)  
Antiguo 04/11/2011, 10:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Navigation y comportamiento raro

Lo que yo hago es con un plugin, cambio el valor de setGlobalParam dependiendo del lang que viene en el request.

Esto lo hago en el preDispatch del plugin.

Saludos.
  #11 (permalink)  
Antiguo 04/11/2011, 10:40
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 10 meses
Puntos: 261
Respuesta: Navigation y comportamiento raro

Ahora si, lo he incluido en el mismo plugin que se encarga de gestionar los lang.

Muchas gracias por la ayuda, y por los aportes.

Buen fin de semana.

Un saludo,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight

Etiquetas: comportamiento, navigation, raro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:34.