Hay veces que no necesitamos por algún motivo modificar los argumentos que por defecto nos proporcionan las views en función de los nodos, taxonomías, contenidos (fields) o cualquier otro módulo que nos los pueda proporcionar como pueda ser el módulo multilenguaje.

Si no has trabajado con argumentos en Drupal, te aconsejo visitar este post y almenos debes tener conocimientos básicos de PHP

Lo que voy a explicar aquí es un caso muy particular y sencillo. Simplemente en su día quería poder cambiar el filtro del idioma de una vista en función del idioma seleccionado por el usuario.

Para ello vamos a partir de que tenemos un Drupal 6, configurado en distintos idiomas y que en la negociación del idioma (como queremos que trabaje con el idioma en la url) le tenemos puesto como Prefijo de ruta con regreso a idioma. (p.e. http://www.dominio.com/admin/settings/language/configure)

Quedaría algo asi en la ruta http://www.dominios.com/es/content

A parte de esto tendremos instalado en módulo Views.

Muchas veces es habitual que tengamos publicado contenido en distintos idiomas, es decir traducido y  que visualizamos a través de una página generada por las Views (por lo menos yo lo hago así).

Ahora bien, ¿qué pasa si tu cambias de un idioma a otro directamente mientras navegas?, pues que simplemente te traduce el interface al idioma pero no vuelve a filtrar por el idioma en cuestión , para esto le tenemos que pasar el parametro que le diga que idioma.

Como hago yo esto.

Pues muy fácil,  en los argumentos que le paso a la página, añadimos el argumento Node trasnlation: Idioma

arg1

Después en su configuración:

Action to take if argument is not present >  Provide default argument > PHP Code

Y en la caja de  PHP argument code le añadimos en siguiente código

$elc=explode("/",$_SERVER['REQUEST_URI']);
$args[0]= $elc[1];
return $args[0];

Esto evalua la URI en la que se solicita la vista, es decir cuando pinchamos en el menu y mostramos la página que genera la vista y estrae eñ 2º argumento en este caso el idioma (/es), por que recordamos que gracias al modulo Translate nos lo mostraba en en la url.

Quedaría algo así. (click para ampliar)

arg2

Pero bueno, ¿y si  queremos añadirle un título personalizado para cada idioma?. Aquí viene mi truco del almendruco, que seguramente haya una manera mejor, pero esta para mi es válida :) .

Añadir un titulo personalizado

Simplemente le añadimos un parametro más de tipo Global: Null

arg3

Y en la configuración del argumento le añadimos %2 en el Título para que así muestre lo que devuelve el segundo argumento en la URI (es decir, este mismo Global:null).

Ahora bien del mismo modo le añadimos este código al PHP argument code del mismo modo que con el primer argumento.

$elc=explode("/",$_SERVER['REQUEST_URI']);
switch ($elc[1]) {
case "es": $args[2]="Boletines informativos"; break;
case "en": $args[2]="Newsletteres"; break;
}
return $args[2];

Aqui podemos establecer de forma manual que queremos que salga en cada uno de los idiomas,  podemos añadir tantos case queramos o tantos idiomas queramos. Acordaros siempre de configurar el código del idioma (http://www.dominio.com/admin/settings/language/edit/en).

Con lo que esto quedaría de la siguiente manera (click para ampliar):

arg4

Es una forma casera de pasar argumentos en función de la url que cuando se tiene muy definida la estructura que se va a llevar con los contenidos, resulta muy útil.