Manera limpia de construir un buscador de taxonomía simple de profundidad arbitraria

23

He pasado días tratando de determinar una forma limpia de hacer lo siguiente:

  1. Mostrar una lista de todos los términos de nivel superior en un vocabulario con enlaces a sus términos secundarios
  2. Al hacer clic en un enlace, ser llevado a una lista de los hijos de esos términos.
  3. Ad infinitum hasta el término de nivel más bajo, para el que se mostrará una lista de nodos etiquetados con ese término.

Parece que sería una funcionalidad bastante necesaria, pero no puedo encontrar ninguna solución que pueda manejar una profundidad arbitraria, particularmente si no todos los árboles de términos descienden a la misma profundidad.

Una solución ideal sería una que use Vistas 3, Contextos, EntityFieldQueries o cualquier otra cosa que sea compatible con Drupal 7.

Puedo hacer casi exactamente lo que quiero al hacer una vista simple con tres nodos: relaciones de términos (término, término principal y principal del término principal) y usarlos para filtros contextuales secuenciales. El único problema con esto es que si hay un nodo con una profundidad de poca profundidad, aparece como "no categorizado" y genera un enlace muerto. En lugar de hacerlo, me gustaría que se vincule al siguiente término secundario disponible.

beth
fuente

Respuestas:

23

Descubrí una manera de hacer esto solo con el módulo Vistas. No es perfecto: no genera una buena URL y una ruta de exploración con el linaje de la taxonomía de la manera en que lo haría mi solución para una taxonomía de una sola profundidad.

Navegador de profundidad estática

Para una taxonomía de profundidad estática (donde todos los términos tienen la misma profundidad de términos secundarios), debe hacer lo siguiente:

  1. Crear una vista de nodos
  2. Agregar relación al término de taxonomía (Término)
  3. Agregar relación al término taxonomía padre, accesible a través del término (padre)
  4. Agregar relación al término de taxonomía padre, accesible a través de Padre (Padre Padre)
  5. Repita el paso 4 tantas veces como sea necesario para la profundidad de su taxonomía.
  6. Agregue filtros contextuales para cada uno y asegúrese de que estén en el orden correcto. Configure para mostrar un resumen cuando el filtro no esté en la URL.
  7. Probablemente desee anular la ruta de exploración y el título de cada filtro.
  8. ???
  9. LUCRO

Navegador de profundidad variable

Para una taxonomía de profundidad variable (donde algunos árboles de términos tienen niveles de anidación más profundos que otros), es un poco más complejo:

  1. Agregue un nuevo término de nivel superior (Foo) a su vocabulario y ponga todos los demás términos debajo.
  2. Cree una vista de términos con una página que muestre nombres de términos
  3. Agregar filtro contextual: término de taxonomía: término principal
  4. Cuando el valor predeterminado no está en la URL, proporcione el valor predeterminado
  5. Establezca el valor predeterminado para su nombre de término de nivel superior (Foo)
  6. Especificar criterios de validación
    • Validador: término de taxonomía
    • Criterios: tu nombre de vocabulario
    • Tipo de valor de filtro: nombre de término convertido a ID de término
  7. Haga clic en el botón "+ Agregar" en la parte superior del panel Vistas para agregar un Adjunto a la vista.
  8. Agregar solo a este archivo adjunto (anular) Relación: Término de taxonomía: Contenido con término
  9. Agregar a este archivo adjunto solo (anular) pantalla: campos: títulos de nodo vinculados a nodos, y eliminar (¡de este archivo adjunto solamente!) Pantalla: campos: nombre del término
  10. Agregar a este archivo adjunto solo (anular) filtro contextual: Término de taxonomía: Nombre
  11. Cuando el valor del filtro no esté disponible, proporcione el valor predeterminado: Valor bruto de URL: Componente de ruta: 2 (o más si su ruta de página tiene> 1 componente)
  12. Configuración de archivos adjuntos: Adjunte a: [nombre de la visualización de la página que acaba de hacer]
  13. ???
  14. LUCRO

Capturas de pantalla de la interfaz de usuario de Views para referencia: ingrese la descripción de la imagen aquí

beth
fuente
¡Bien hecho! Votar tanto la pregunta como su respuesta: parece algo bastante común que debe hacer y su solución es mejor que cualquier cosa que encontré al intentar responder inicialmente.
aendrew
8
  1. Crear una vista del tipo Taxonomía
  2. Agregue un filtro contextual del tipo Término de taxonomía: Término principal
  3. Establezca Proporcionar valor predeterminado y manténgalo como fijo. dar la ID de término del término principal principal
  4. Agregar ID de término de taxonomía como campo y excluirlo de la pantalla
  5. Agregue un nombre de término de taxonomía, haga clic en poner este campo como un enlace; indique el enlace como "ruta-usted-configuró-en-vista / [tid]"
    Nota: debe desmarcar "Vincular este campo a su página de término de taxonomía"

Cuando visita la página de vista, verá los hijos del padre principal; según el ejemplo que obtendría:

  • termino 1
  • term2

Cuando haces clic en term1 obtendrás los hijos. Hasta que alcances el término 1.1.1. No obtendrá ningún resultado si hace clic en term1.1.1 todavía. Para lograr eso, necesitamos crear un bloque de vista más en la vista anterior.

  1. Agregar un bloque
  2. Eliminar el filtro contextual existente y el campo
    Nota: cuando los elimine, asegúrese de seleccionar Esta página (Over Ride) del menú desplegable en la parte superior junto a Por otro lado, los campos y filtros contextuales que creó en la página también desaparecerán .
  3. Agregar un nuevo filtro contextual Término de taxonomía: ID de término
  4. Agregar una relación Término de taxonomía: contenido con término
  5. Agregue el título del contenido y use la relación del menú desplegable en la parte superior.
  6. Guarde la vista y vuelva a la página que creamos (de lo contrario, es importante que no pueda completar el siguiente paso
  7. Agregar un campo en el PIE DE PÁGINA O EN EL Encabezado
  8. Seleccione "Global: área de visualización " de la lista y seleccione el bloque que creamos en la vista desplegable para insertar mientras está allí, marque Heredar filtros contextuales para que podamos pasar el valor de esta vista al bloque también
  9. Marque Mostrar incluso si la vista no tiene resultado para que cuando esta vista no muestre el resultado, el bloque se siga mostrando

Guarde la vista y ya está.

Mohammed Shameem
fuente
Seguí la clara explicación de Mohammed Shameem. Gracias, funciona perfecto !!
Steven
3

Creo que lo que quieres es Vistas Tree , un módulo contrib que usa Vistas para construir un árbol de términos de taxonomía.

(Dame un segundo y escribiré un tutorial rápido sobre cómo usarlo para ver los campos fiscales)

Aparentemente, ese módulo tiene un problema que le impide trabajar con términos de taxonomía. Abucheo.

Dicho esto, encontré el siguiente código que parece hacer lo que quieres (puedes hacer que muestre / oculte elementos a través de un código jQuery bastante rudimentario):

<?php

// The ID of the taxonomy vocabulary for which you'd like to create a nested list
$vid = 10;

$depth = 0;
$num_at_depth = 0;
$tree = taxonomy_get_tree($vid);

print "<ul class=\"menu\">\n<li>";
foreach ($tree as $term) {
  $diffdepth = 0;
  if ($term->depth > $depth) {
    print "\n<ul>\n<li>";
    $depth = $term->depth;
    $num_at_depth = 0;
  }
  if ($term->depth < $depth) {
    $diffdepth = $depth - $term->depth;
    while ($diffdepth > 0) {
      print "</li>\n</ul>\n";
      $diffdepth--;
    }
    $depth = $term->depth;
  }
  if (($term->depth == $depth) && ($num_at_depth > 0)) {
    print "</li>\n<li>";
  }
  print l($term->name, 'taxonomy/term/' . $term->tid);
  $num_at_depth++;
}
print "</li>\n</ul>\n";

Vía " Listas de categorías anidadas con enlaces a páginas ".

aendrew
fuente
He habilitado ese módulo e intenté experimentar con él y tengo dos problemas: 1. Sospecho que solo le da una lista plana, no una experiencia de navegación de páginas múltiples y 2. No puedo hacer que funcione. Un tutorial sería de gran ayuda.
beth
Respuesta actualizada Disculpas, al parecer Views Tree tiene un problema abierto re: el uso de términos de taxonomía. Respuesta alternativa publicada.
aendrew
Eso parece dar una lista anidada simple en lugar de un navegador paginado secuencialmente.
beth
@beth - ¿Sería suficiente si escribiera algo de jQuery que muestra / oculta elementos de esa lista cuando se hace clic en los elementos principales / secundarios?
aendrew
No quiero que sea dependiente de JavaScript.
beth
0

Si solo desea tener un conjunto de páginas dinámicas de exploración de taxonomía, entonces seguiría el siguiente camino, que requiere 3 Vistas + Módulo de visualización de taxonomía que le permite usar Vistas para mostrar el contenido de las taxonomy/term/%páginas:

  1. Términos de nivel superior : enumere los términos cuyo padre es nulo
  2. Términos de nivel medio : enumere los términos cuyo padre NO es nulo. Sin resultado: muestra la Vista # 3
  3. Nodos con términos : enumere los nodos etiquetados con términos.

Como las Vistas 1 y 2 probablemente tendrán un tema similar, podría considerar fusionarlas como pantallas en una Vista, sería más fácil de manejar.

He utilizado con éxito ese enfoque para mi taxonomía. Afortunadamente, era homogéneo en cada nivel: una rama determinada terminaba con hojas (nodos) o ramas (términos), pero no con ambas. Si esto fuera una limitación, pruébelo primero.

Por supuesto, este es un "pseudocódigo". Desea configurar validaciones y filtros, y unos patrones de pathauto bonitos y de aspecto lógico para reflejar la estructura.

Artur
fuente