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

[SOLUCIONADO] KnpMenuBundle junto a JMSI18nRoutingBundle

Estas en el tema de KnpMenuBundle junto a JMSI18nRoutingBundle en el foro de Symfony en Foros del Web. Hola, Estoy usando JMSI18nRoutingBundle para el tema de la internacionalización del sitio junto con KnpMenuBundle . El problema es que no se cómo crear los ...
  #1 (permalink)  
Antiguo 10/06/2015, 11:02
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
KnpMenuBundle junto a JMSI18nRoutingBundle

Hola,

Estoy usando JMSI18nRoutingBundle para el tema de la internacionalización del sitio junto con KnpMenuBundle. El problema es que no se cómo crear los links de los idiomas para que lleven a la misma página que se está viendo pero en el idioma seleccionado.

Código PHP:
<?php

/*
*DEJO SÓLO LA IMPLEMENTACIÓN DE LA PARTE EN CUESTIÓN
*/
namespace MusicaGenericoBundleMenu;

use 
KnpMenuFactoryInterface;

class 
MenuBuilder
{
    private 
$container;
        
    public function 
__construct($container)
    {
        
$this->container $container;
    }
    
    public function 
createPrincipalMenu(FactoryInterface $factory)
    {
        
    }
    
    private function 
createDropdown(KnpMenuMenuItem $menu$nombre)
    {
       
    }
    
    private function 
cargarAnos(KnpMenuMenuItem $drop_down)
    {
        
    }
    
    private function 
cargarLetras(KnpMenuMenuItem $drop_down)
    {
        
    }
    
    private function 
cargarIdiomas(KnpMenuMenuItem $menu)
    {
        
$menu->addChild('ES', array('route' => 'homepage'));//De momento si consigo crear la ruta a la home del idioma estaré contento ;)
        
$menu->addChild('FR', array('route' => 'homepage''_locale' => 'fr'));//Esto no funciona
        
$menu->addChild('EN', array('route' => 'homepage'));
    }
}
La documentación del uso de JMSI18nRoutingBundle es bastante escasa.

Gracias.
  #2 (permalink)  
Antiguo 11/06/2015, 07:54
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: KnpMenuBundle junto a JMSI18nRoutingBundle

Posiblemente esto te pueda ayudar: http://symfony.com/doc/master/bundle...ndle/i18n.html
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 12/06/2015, 00:44
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: KnpMenuBundle junto a JMSI18nRoutingBundle

Ya, pero esto es traducir los menús. Yo lo que quiero es crear los links a las páginas de los idiomas. Para ir a la misma página que se está viendo pero en otro idioma.
  #4 (permalink)  
Antiguo 12/06/2015, 08:25
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: KnpMenuBundle junto a JMSI18nRoutingBundle

No debes de tener problemas se supone que usando path te debe de dar la url ya traducida ya que toma el request actual. si quieres que la liga tenga el de un lenguaje especifico puedes hacer
Código HTML:
Ver original
  1. <a href="{{ path("homepage", {"_locale": "de"}) }}">Deutsch</a>
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 12/06/2015, 09:24
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: KnpMenuBundle junto a JMSI18nRoutingBundle

Cita:
Iniciado por hhs Ver Mensaje
Código HTML:
Ver original
  1. <a href="{{ path("homepage", {"_locale": "de"}) }}">Deutsch</a>
Pero esto es en TWIG, yo quiero generar la ruta en el MenuBuilder.....
  #6 (permalink)  
Antiguo 12/06/2015, 11:06
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: KnpMenuBundle junto a JMSI18nRoutingBundle

El detalle es que generar las url debe de ser transparente para ti. Cuando tu haces esto:
Código PHP:
Ver original
  1. $menu->addChild('ES', array('route' => 'homepage'));
Ya debe de generarte la url traducida si no lo esta haciendo es posible que no hayas ejecutado el translation:extrac
La opción que intentas de pasar el locale no te puedo asegurar si funciona requiere revisar el código.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 20/06/2015, 02:33
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: KnpMenuBundle junto a JMSI18nRoutingBundle

Por fin he encontrado un hueco para darle un repaso a esto. Ya lo he conseguido.

Injecto el objeto request en el MenuBuilder y junto con el container que ya tenía injectado podemos hacer la jugada.

Código PHP:
private function cargarIdiomas(KnpMenuMenuItem $menu)
    {
        
$router $this->container->get('router');
        
$route $this->request->get('_route');
        
$locale $this->request->get('_locale');
        
$arrayParametros $this->request->attributes->all();
        
$arrayParametros $arrayParametros['_route_params'];
        
        if(
$locale != "es"){ 
            
$arrayParametros['_locale'] = "es";
            
$menu->addChild('ES', array('uri' => $router->generate($route$arrayParametros))); 
        }
        if(
$locale != "fr"){ 
            
$arrayParametros['_locale'] = "fr";
            
$menu->addChild('FR', array('uri' => $router->generate($route$arrayParametros))); 
        }
        if(
$locale != "en"){ 
            
$arrayParametros['_locale'] = "en";
            
$menu->addChild('EN', array('uri' => $router->generate($route$arrayParametros))); 
        }
    }
    
    public function 
setRequest(RequestStack $request_stack)
    {
        
$this->request $request_stack->getCurrentRequest();
    } 
service.yml
Código:
generico.menu_builder:
        class: %class.generico.menubuilder%
        arguments:
            - "@service_container"
        calls:
            - [setRequest, [@request_stack]]

Etiquetas: junto
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 23:19.