drupal 7 – ¿Cómo puedo cambiar un enlace de menú de forma dinámica? (D7)

Pregunta:

Estoy intentando cambiar el enlace de un elemento de menú de forma dinámica en función del idioma seleccionado en el selector de idiomas.

Digamos que tengo los siguientes enlaces en mi menú principal:
-Casa
-Acerca de
-Productos

Si el idioma seleccionado es inglés, quiero que el elemento Acerca de se vincule al nodo / 73. Si el idioma seleccionado es holandés, quiero que el elemento Acerca de se vincule al nodo / 74.

¿Es esto posible y cuál es la mejor manera de hacerlo?

Cualquier ayuda es muy apreciada.

EDITAR: Alguna información adicional. Tengo instalados los módulos de internacionalización, traducción de contenido y traducción de entidades. Debido a la jerarquía del menú y una mezcla entre los nodos traducidos de contenido y los nodos traducidos por entidades, no quiero agregar dos enlaces separados al menú, sino tener un enlace y cambiar la ruta dinámicamente en el código.

Respuesta:

Quiere implementar hook_translated_menu_link_alter () .

Este gancho no se llama para todos los elementos del menú. Según la documentación de la API:

Solo se invoca si $ item ['options'] ['alter'] se ha establecido en un valor no vacío (por ejemplo, TRUE). Esta bandera debe establecerse usando hook_menu_link_alter ().

He aquí un ejemplo:

function MODULE_menu_link_alter(&$link) {
  if ($link['link_title'] == 'foo') {
    $link['options']['alter'] = TRUE;
  }
}

function MODULE_translated_menu_link_alter(&$link) {
  if ($link['link_title'] == 'foo') {
    $link['href'] = 'node/5';
  }
}

Algunas notas:

  • es posible que desee filtrar adicionalmente por $ link ['menu_name']
  • MODULE_menu_link_alter () se invoca en el borrado de la caché para todos los elementos del menú declarados a través de hook_menu ().
  • Para los elementos de menú creados a través de la web , solo se invoca al guardar , es decir, para que este código surta efecto, debe editar y guardar los enlaces de menú que desea modificar.

Como referencia, esta técnica es implementada por core en user.module (veruser_menu_link_alter y user_translated_menu_link_alter ) y por el módulo menu_token .

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım