¿Cómo usar el título del nodo o el alias de ruta en lugar de la identificación del nodo en el filtro contextual de referencia del nodo en las vistas?

8

Tengo el nodo A con una referencia de nodo al nodo B.

En una vista, muestro todos los nodos A que tienen un nodo B en particular referenciado (nid: 123, título: nodo-B-título).

En lugar de usar el nid en el filtro contextual, me gustaría usar el título del nodo. Por ejemplo, en lugar de:

view-name/123

Me gustaria usar

view-name/node-B-title

¿Cómo podría hacer eso?

uwe
fuente

Respuestas:

11

Tuve un problema muy similar y no solo encontré la solución, sino que también aprendí cosas nuevas sobre cómo funciona la vista. Permítanme compartir lo que aprendí y la solución a su problema también.

Cuando crea una vista con uno o más filtros contextuales, la vista debe recibir valores de esos filtros desde algún lugar. Esto puede hacerse por:

  1. Elegir los valores de filtro de contexto de la URL
    • Por lo general, tendrá una vista de página para tales fines, una que tenga la URL del formulario foo/%/baro foo/bar/%para un filtro contextual único O del formulario foo/%/bar/%o foo/bar/%/%para varios filtros
    • En caso de que tenga varios filtros, el valor de la url que aparece primero se asigna al primer filtro, al lado del segundo filtro, etc.
  2. Vistas le permite saber qué hacer si los valores de filtro no están disponibles en la URL . Esto se usa típicamente para vistas de bloque .
    • Puede elegir entre diferentes acciones y luego configurar la opción también. Puede elegir entre diferentes acciones y luego configurar la opción también. asdfj kajsdf
  3. Otra cosa que las vistas le permiten es decir qué hacer con los valores de filtro si se encuentran en la URL como se describe en el punto 1 anterior. Los casos de uso típicos son: hacer títulos dinámicos basados ​​en valores de filtro, validar valores de filtro, etc.
    • ¡Al validar los valores de filtro, también puede cambiar los valores! (Ahí es donde nuestra solución radica por cierto). Esto es muy similar a la forma en que podemos cambiar los valores de $ form en las devoluciones de llamada de validación de formularios de drupal. ingrese la descripción de la imagen aquí

La solución a su problema específico radica en utilizar un código muy similar en las secciones señaladas por las flechas en la imagen de arriba.

Este enlace resultó ser de gran ayuda para mí. Aquí hay un extracto:

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}
Sumeet Pareek
fuente
Esto no funcionó para mí, sino que causó un error ajax en la vista al guardar.
DrCord
1

Esto no funcionará en todas las circunstancias, pero un enfoque para el problema en la pregunta es usar la visualización del nodo real del nodo B (o el tipo de nodo B) y establecer su ruta como lo desee con la ruta o el módulo pathauto. Luego use el bloque de vistas para agregar la relación de contenido y la vista que desea.

Use un filtro contextual en NID y luego ajuste Provide default value > Content ID from URL. Luego agregue el bloque de vistas a su página o conjunto de páginas.

Si su contexto le permite usar un bloque de vistas en el nodo en sí y no una página de vistas, esto hará que sea mucho más fácil obtener la ruta que desea y las vistas que se muestran.

Squarecandy
fuente
1

Edité la respuesta aceptada, pero quería agregar el código real aquí:

Utilice la opción validada de PHP en las opciones de validación en el filtro contextual.

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}
Eric Steinborn
fuente
1

El argumento de vista debe ser la referencia de campo del tipo de contenido, luego seleccione la opción "Proporcionar argumento predeterminado" y marque la opción Nodo Id (algo así).

1) Agregue el argumento "Referencia de campo X" 2) Verifique el nodo de ID desde la url (en el argumento por defecto agregado) 3) En la sección de validación, verifique el tipo de contenido del nodo, y en la sección "Tipo de nodo" seleccione "Id. De nodo

Y ya está hecho. :)

Eleo
fuente
"ID de contenido de URL" solo da el nid. Si quisiera usar una referencia de término, podría usar "criterios de validación" con "nombre de término convertido a ID de término". Para la referencia de nodo no hay una opción similar para traducir el título a nid. Probablemente porque los títulos no son necesariamente únicos.
uwe
Sí es correcto, pero es necesario el argumento debe ser la referencia de campo (nid), intente eso.
Eleo
1) Agregue el argumento "Referencia del campo X" 2) Verifique el nodo de ID desde la url (en el argumento por defecto agregado) 3) En la sección de validación, verifique el tipo de contenido del nodo, y en la sección "Tipo de nodo" seleccione "Node Id"
Eleo
La url real puede tener el nid, y el alias de la ruta podría ser el título del nodo. Esto funciona, ¿no?
SGhosh
0

Antigua pregunta, pero la encontré a través de Google y pensé que compartiría mi solución para cualquier otra persona que la encuentre en el futuro:

Ahora hay un módulo llamado palabra segura que básicamente hace exactamente lo que sugirió Sumeet Pareek: (Automáticamente) crea un campo amigable para URL.

Gerto
fuente
0

Recomendaría el módulo Extended Path Aliases (path_alias_xt) . Soluciona este problema simplemente al instalarse sin configuración, aparentemente es mágico. : D En realidad no, pero el extracto de la página del módulo ensalza cómo lo instalas y soluciona este y otros problemas, pero no explica cómo lo hace el módulo detrás de escena ... O, bueno, siempre podríamos lea el código: D No menciona específicamente la fijación de rutas de vistas, pero lo he usado para hacerlo y funciona perfectamente.

Lista de problemas que resuelve, desde la página del módulo:

  • ¿Alguna vez se ha preguntado por qué, después de definir un alias como about-us para, por ejemplo, node / 123, sus páginas todavía están plagadas de esas pestañas y enlaces feos generados por máquina como / node / 123 / edit, node / 123 / revisiones, etc. .?
  • Del mismo modo para los enlaces / taxonomy / term /% y / user /%: ¿esperaba ver / dries / track pero consiguió / user / 5 / track?
  • ¿Le parece que la barra de direcciones de su navegador también muestra esos números feos en lugar de sus alias?
DrCord
fuente