¿Cómo creo un árbol anidado con términos y nodos con Vistas 3?

22

Necesito crear algo similar como esto:

Colores (vocabulario)

  • Rojo (término)
    • Oscuro (término)
      • Nodo 1
      • Nodo 2
    • Luz (plazo)
      • Nodo 3
      • Nodo 4
  • Azul (término)
    • Nodo 5
    • Nodo 6
  • Verde (término)
    • Nodo 7
    • Nodo 8

(Las viñetas son sangrías).
¿Hay alguna manera de hacer esto con Drupal 7 y las vistas 3? Si no, ¿hay otra forma de hacer esto?

iStryker
fuente
Para aclarar, como tal vez entendí mal su pregunta, ¿desea mostrar una estructura como esta en una página?
Maciej Zgadzaj
Sí en solo 1 página
iStryker

Respuestas:

15

Gracias a refino, encontré una buena solución usando los siguientes módulos:

A continuación encontrará la explicación:

  1. Primero cree una nueva Taxonomía (llamémosla "Carpeta")
  2. Luego, cree un nuevo tipo de contenido (llamémoslo "Elemento") con un campo de referencia de término para la taxonomía "Carpeta"
  3. Cree una nueva vista de "Contenido" (llamémosla "Vista de elemento")
  4. Elegir visualización de campo
  5. Agregue un filtro contextual a su campo de referencia de términos
  6. Cree una nueva vista de "Taxonomía" (llamémosla "Árbol de carpetas")
  7. Agregue 2 campos (nombre de término e ID de término). El segundo campo puede excluirse de la pantalla.
  8. En relación: agregue un "término padre"
  9. Agregue un tercer campo (ID de término) y asígnelo a su relación principal. Este campo se puede excluir de la visualización
  10. Elija Formato "Árbol (modelo de adyacencia)" y seleccione en los parámetros: Lista ordenada + Campo principal (su primer tid), Campo principal (su tid asignado a la relación principal). Ahora debería tener un bonito árbol con todos sus términos anidados
  11. Agregue un 4to campo "Global: Vista" (esto viene con Vista de campo de vistas) y elija su "Vista de elemento", muestre Agregar maestro [tid] en el campo de texto Argumentos

Espero que esto ayude

Aclamaciones

Editar por iStryker : Esto es lo que obtuve. Lo único que cambié fue hacer que Element View sea una vista de tabla y eliminé las clases predeterminadas (fila y tira).

Imagen del producto final por iStryker

Fred
fuente
Una gran ayuda de este comentario. Solo una pequeña nota: es posible que desee cambiar el nombre de los campos (títulos administrativos) porque en los menús desplegables de configuración de VT, ambos campos "ID de término" serán indistinguibles.
Artur
Esta respuesta me consiguió un 90% allí. Necesitaba eliminar las clases predeterminadas en cada campo; Eliminar clases de tabla en la vista 'Vista de elementos'; Tema un poco
iStryker
Agregué un paso para reducir los duplicados en la vista de Contenido. Además, el campo "Argumentos" en Global: Vista ahora está etiquetado como "Filtros contextuales" y el token a usar es "[! Tid]".
máquinas
¿Es posible hacer esto pero con grupos orgánicos en lugar de taxonomía?
IamOnStage
14

Creé tres vistas en Drupal 7.8 y Vistas 3 + Campo de vistas, anidando una vista en otra usando Incluir vista, y obtuve ese resultado (adjunto). ingrese la descripción de la imagen aquí

Paso a paso cómo hacerlo:

  1. Cree vocabulario "Colores" y complételo con etiquetas.

  2. Crear una nueva vista de nodos de taxonomía Colores: lo llamo "Nodos de colores"

2.1 Formato de tabla, Configuración: Campo de agrupación: Término de taxonomía: Nombre

2.2 Filtros contextuales avanzados: Término de taxonomía: Término padre

2.3 Relaciones avanzadas: término de taxonomía: contenido con color

2.4 Establecer campos: Término de taxonomía: ID de término, Término de taxonomía: Nombre, (field_color) Contenido: Título

2.5 Criterios de filtro: Término de taxonomía: Vocabulario (= Colores)

2.6 Si lo desea, también puede establecer "Excluir de la pantalla" para ID de término, término de taxonomía: nombre

2.7 Establecer ruta: / nodos de colores /%

2.8 Comportamiento de no establecer resultados: Global: área de visualización (volveremos a esto más adelante) 2.9 guardar

3.Cree una nueva vista de los colores de los nodos de taxonomía: lo llamo "Nodos de colores 2"

3.1 Formato de tabla, configuración: campo de agrupación: ninguno

3.2 Filtros contextuales avanzados: Término de taxonomía: ID de término

3.3 Relaciones avanzadas: término de taxonomía: contenido con color

3.4 Establecer campos: Término de taxonomía: ID de término, Término de taxonomía: Nombre, (field_color) Contenido: Título

3.5 Criterios de filtro: Término de taxonomía: Vocabulario (= Colores)

3.6 Si lo desea, también puede establecer "Excluir de la pantalla" para ID de término, término de taxonomía: nombre

3.7 Establecer ruta: / node-of-colors-2 /%

3.8 Comportamiento sin resultados: Global: ninguno

3.9 Guardar

Regrese y edite "Nodos de colores" nuevamente

4.1 vaya a Establecer comportamiento sin resultados: Global: área de visualización

4.2 Configurar Vista para insertar: Vista: nodos_de_colores2 Pantalla: página

4.3 establecer heredar filtros contextuales

4.4 guardar

5 Vuelva a Vistas nuevamente (Término de tipo)

5.1 Crear una nueva vista de nodos de taxonomía Colores: lo llamo "Árbol de colores"

5.1 Formato de tabla, configuración: campo de agrupación: ninguno

5.2 Filtros contextuales avanzados: ninguno

5.3 Relaciones avanzadas: término de taxonomía: término principal

5.4 Establecer campos: Término de taxonomía: ID de término, Término de taxonomía: ID de término, Término de taxonomía: Nombre, Vista: Vista de inclusión (Vista de inclusión)

5.5 Criterios de filtro (1): Término de taxonomía: Vocabulario (= Colores)

5.6 Criterios de filtro (2): (Padre) Término de taxonomía: Término

5.7 Si lo desea, también puede configurar "Excluir de la pantalla" para ID de término y una etiqueta de Vista de inclusión

5.8 Establecer ruta: / colors-tree

5.9 Establecer comportamiento sin resultados: ninguno

5.10 guardar

... y esto debería ser, finalmente.

Refineo
fuente
¿Puedes aclarar "5.4 establecer campos ... vista: incluir vista" un poco más. No veo una opción para eso en ningún lado. Gracias
uwe
Lo siento, no escribí. Utilicé Vistas 7.x-3.0-rc1 + Vistas Campo 7.x-1.0-rc1
Refineo
Ok, gracias. Seguí algunas instrucciones sobre su cola de problemas también drupal.org/node/1171604
uwe
Wow, esta respuesta ha recibido un voto masivo en el pase de 7 días. ¿Alguien ha probado esto, o usted / ellos simplemente votaron porque @Refineo dio la respuesta más detallada?
iStryker
Intenté este tutorial nuevamente, y no funcionó. Los odié a todos los que votaron por esta pregunta es la última semana sin realizar pruebas
iStryker
3

Si desea obtener el video de la URL, use el siguiente código.

$vid = $_GET['vid'];
$tid = 0;
$level = 0;
print taxonomy_tree($vid, $tid, $level);
function taxonomy_tree($vid, $tid = 0, $level) {
  $children = taxonomy_get_children($tid, $vid);
  $output = '';
  if ($children) {
    $output .= '<ul>'; 
    foreach ($children as $child) {
      $level++;
      $output .= '<li class="taxonomy-tree-lvl' . $level . ' ">'; 
print $level;
      $output .= l($child->name, 'taxonomy/term/'. $child->tid) . '(' . taxonomy_term_count_nodes($child->tid) . ')'; 
      $output .= taxonomy_tree($vid, $child->tid, $level);
      $output .= '</li>';

      $level--; 
    }
    $output .= '</ul>'; 
  }

  return $output;

}

O use el siguiente código.

$vocabulary = taxonomy_vocabulary_load(2);//Here pass the vid
print $vocabulary->name;
$vid1 = $_GET['vid'];
if(!$vid1) {
$vid1 = 2;
print 'empty';
}
$vid = 2;
$parent = 0;
print get_child_terms($parent, $vid1);
 function get_child_terms($parent, $vid) {
      $sql = "SELECT td.tid, td.vid, td.name"
         . "  FROM {term_data} td"
         . "  JOIN {term_hierarchy} th on th.tid = td.tid"
         . " WHERE th.parent = %d"
         . "   AND td.vid = %d"
         . " ORDER BY td.weight, td.name";
    $terms = db_query($sql, $parent, $vid);
    $output = "";
    while ($aterm = db_fetch_object($terms)) {
        $output .= "<li>";
        $output .= l("$aterm->name", "taxonomy/term/$aterm->tid/all") . " ("
                .  taxonomy_term_count_nodes($aterm->tid) . ")</li>\n"
                .  get_child_terms($aterm->tid, $vid);
    }
    return ($output != "") ? "<ul style='list-style-type: none;
  margin: 0px 0px 0px 20px;
  padding: 0px;'>\n". $output ."</ul>\n" : "";
  }
Ahmad
fuente
2

Por supuesto que hay:

  1. Configura tu vocabulario jerárquico,
  2. Agréguelo a cualquier tipo de contenido seleccionado,
  3. Cree una vista que enumere los nodos de ese tipo de contenido, con filtro contextual :

    • "Contenido: tiene ID de término de taxonomía": si desea enumerar solo los nodos asignados a un término específico,
    • o "Contenido: tiene ID de término de taxonomía (con profundidad)", si desea enumerar los nodos asignados a un término específico, así como a sus términos secundarios.

      En este caso, en la configuración del filtro debe establecer la profundidad: cuántos niveles por debajo (o por encima) desea que funcione este filtro.

Luego, suponiendo que la URL de su vista sea http://mysite.com/myview y 'Red' tid = 1, si va a http://mysite.com/myview/1 , se enumerarán todos los nodos asignados a cualquiera de términos 'rojo', 'oscuro' y / o 'claro'.

Maciej Zgadzaj
fuente
No estoy buscando una respuesta para un término específico. Estoy buscando una vista para todo el vocabulario
iStryker
Y eso es exactamente lo que he descrito.
Maciej Zgadzaj
2

Puede usar el módulo de menú Taxonomía . Aquí hay una cita al respecto (de la página del proyecto del módulo):

¡Transforma tus vocabularios de taxonomía en menús con facilidad!

caracteristicas:

  • Menú personalizado por vocabulario
  • Utiliza la ruta de término de taxonomía predeterminada o rutas personalizadas
  • Integrar con vistas
  • Integre con Pathauto: use alias de URL / ruta
  • No interfiere con otros módulos de menú.
dilari
fuente
¡Bienvenido a Drupal SE! taxonomy_menu es un proyecto genial y puede hacerlo muy bien. OP quiere hacerlo en Vistas sin embargo.
AyeshK
0

Estoy tratando de lograr lo mismo, pero no he encontrado mucho disponible en D7. El módulo de bloques de taxonomía lo hace en bloque, no en vistas.

uwe
fuente
0

Creo que he encontrado otra forma de resolver este problema, y ​​creo que es más simple que el resto de estas soluciones. No involucra ningún módulo adicional y solo necesita una vista.

Suponiendo que ha creado un vocabulario jerárquico de dos niveles (Colores) y un tipo de contenido con una referencia de término a ese vocabulario, haga lo siguiente:

  1. Cree una nueva vista y filtre por "Vocabulario de taxonomía: Nombre de la máquina (= Colores)"
  2. Agregar relaciones: (1) Taxonomy term: Content using Colory (2)Taxonomy term: Parent term
  3. Agregue los campos a la Vista: (1) Title(elija field_coloren "Relación" y requiera esta relación ), (2) Taxonomy term name(no use la relación y excluya de la pantalla) (3) Taxonomy term name(sí, nuevamente, esta vez elija la Parentrelación y excluya desde la pantalla).
  4. Ahora agrúpelo haciendo clic en Configuración de formato: (1) agrupación 1:, (Parent) Taxonomy term: Name(2)Taxonomy term: Name

Hecho. Si tiene más de dos niveles, simplemente agregue otra Relación de padre utilizando Padre como la relación de la relación.

EDITAR: si no requiere la relación, terminará siendo engañado. Los padres se enumerarán dos veces si tienen términos secundarios a los que los nodos hacen referencia. Entonces, esto limita un poco la respuesta en los términos de nivel superior sin nodos que hagan referencia a que no se mostrará. Además, dado que la clasificación es probablemente importante, tener cualquier contenido que haga referencia a un término de nivel superior podría causarle problemas dependiendo de las necesidades de visualización.

cdmo
fuente
No hay filtro "Vocabulario de taxonomía: Nombre de la máquina (= Colores)" hasta agregar una relación. Sospecho que el primer paso es ser el segundo. Además, no podía entender cómo agregar el título de campo al elegir field_color en "Relación".
Dimetry