Como crio uma árvore aninhada com termos e nós com o Views 3?


22

Eu preciso criar algo semelhante como este:

Cores (Vocabulário)

  • Vermelho (termo)
    • Escuro (termo)
      • Nó 1
      • Nó 2
    • Luz (termo)
      • Nó 3
      • Nó 4
  • Azul (termo)
    • Nó 5
    • Nó 6
  • Verde (termo)
    • Nó 7
    • Nó 8

(Os marcadores são recuos.)
Existe uma maneira de fazer isso com o Drupal 7 e as visualizações 3? Caso contrário, existe outra maneira de fazer isso?


Para esclarecer - como talvez eu não entendi sua pergunta - você deseja exibir uma estrutura como esta em uma página?
Maciej Zgadzaj

Sim em apenas uma página
iStryker

Respostas:


15

Graças ao refino, encontrei uma boa solução usando os seguintes módulos:

Abaixo você encontra a explicação:

  1. Primeiro, crie uma nova taxonomia (vamos chamá-la de "Pasta")
  2. Em seguida, crie um novo tipo de conteúdo (vamos chamá-lo de "Elemento") com um campo de referência ao termo para a taxonomia "Pasta"
  3. Crie uma nova exibição de "conteúdo" (vamos chamá-la de "exibição de elemento")
  4. Escolha a exibição do campo
  5. Adicione um filtro contextual ao seu campo de referência de termos
  6. Crie uma nova visualização "Taxonomia" (vamos chamá-la de "Árvore de pastas")
  7. Adicione 2 campos (nome e identificação do termo). O segundo campo pode ser excluído da exibição
  8. Em Relação: adicione um "termo pai"
  9. Adicione um terceiro campo (ID do termo) e atribua-o à sua relação pai. Este campo pode ser excluído da exibição
  10. Escolha Formato "Árvore (modelo de adjacência)" e selecione nos parâmetros: Lista ordenada + Campo principal (sua primeira vez), Campo pai (sua ordem atribuída à relação pai). Agora você deve ter uma bela árvore com todos os seus termos aninhados
  11. Adicione um quarto campo "Global: View" (isso vem com Views Field View) e escolha sua "Element view", exiba Master add [tid] no campo de texto Arguments

Espero que esta ajuda

Felicidades

Editar por iStryker : É isso que eu tenho. A única coisa que mudei foi transformar o Element View em uma tabela e remover as classes padrão (linha e faixa).

Imagem do produto final por iStryker


Uma grande ajuda deste comentário. Apenas uma observação secundária: convém renomear os campos (títulos administrativos) porque, nas opções suspensas da VT, os campos "ID do termo" serão indistinguíveis.
Artur

Essa resposta me levou 90% lá. Eu precisava remover as classes padrão em cada campo; Remova as classes de tabela na exibição 'Element View'; Tema um pouco
iStryker 11/11/12

Adicionei uma etapa para reduzir duplicatas na exibição Conteúdo. Além disso, o campo "Argumentos" no Global: View agora está rotulado como "Filtros contextuais" e o token a ser usado é "[! Tid]".
othermachines

É possível fazer isso, mas com grupos orgânicos em vez de taxonomia?
IamOnStage 20/03/2017

14

Criei três visualizações no Drupal 7.8 e no campo Views 3 + Views, aninhando uma visualização em outra usando a opção Include View, e obtive esse resultado (anexado). insira a descrição da imagem aqui

Passo a passo como fazê-lo:

  1. Crie vocabulário "Cores" e preencha-o com tags.

  2. Crie uma nova visualização dos nós de taxonomia Cores - eu chamo de "Nós de cores"

2.1 Tabela de formatos, configurações: campo Agrupamento: termo de taxonomia: nome

2.2 Filtros contextuais avançados: Termo de taxonomia: Termo pai

2.3 Relacionamentos avançados: termo de taxonomia: conteúdo usando cores

2.4 Definir campos: termo da taxonomia: ID do termo, termo da taxonomia: Nome, (cor do campo) Conteúdo: Título

2.5 Critérios de filtro: Termo de taxonomia: Vocabulário (= Cores)

2.6 Se desejar, você também pode definir "Excluir da exibição" para ID do termo, termo de taxonomia: Nome

2.7 Definir caminho: / nós-de-cores /%

2.8 Comportamento para não definir resultados: Global: área de visualização (voltaremos a isso mais tarde) 2.9 salvar

3.Crie uma nova visão dos nós de taxonomia Cores - eu chamo de "Nós das cores 2"

3.1 Tabela de formatos, configurações: campo Agrupamento: nenhum

3.2 Filtros contextuais avançados: termo de taxonomia: ID do termo

3.3 Relacionamentos avançados: termo de taxonomia: conteúdo usando cores

3.4 Definir campos: Termo de taxonomia: ID do termo, Termo de taxonomia: Nome, (field_color) Conteúdo: Título

3.5 Critérios de filtro: Termo de taxonomia: Vocabulário (= Cores)

3.6 Se você quiser, também pode definir "Excluir da exibição" para ID do termo, termo de taxonomia: Nome

3.7 Definir caminho: / nós-de-cores-2 /%

3.8 Comportamento sem definir resultados: Global: nenhum

3.9 Salvar

Volte e edite "Nós de cores" novamente

4.1 vá para Definir comportamento sem resultados: Global: área de visualização

4.2 Defina View para inserir: View: nodes_of_colors2 Display: page

4.3 definir herdar filtros contextuais

4.4 salvar

5 Volte para Views novamente (tipo termo)

5.1 Crie uma nova visualização dos nós de taxonomia Cores - eu chamo de "Árvore de cores"

5.1 Tabela de formatos, configurações: campo Agrupamento: nenhum

5.2 Filtros contextuais avançados: nenhum

5.3 Relacionamentos avançados: termo de taxonomia: termo de pai

5.4 Definir campos: Termo de taxonomia: ID do termo, Termo de taxonomia: ID do termo, Termo de taxonomia: Nome, Visualização: Incluir visualização (Incluir visualização)

5.5 Critérios de filtragem (1): Termo de taxonomia: Vocabulário (= Cores)

5.6 Critérios de filtragem (2): (Principal) Termo de taxonomia: Termo

5.7 Se você quiser, também pode definir "Excluir da exibição" para o ID do termo e um rótulo de Incluir exibição

5.8 Definir caminho: / colors-tree

5.9 Definir nenhum comportamento de resultados: nenhum

5.10 salvar

... e deve ser isso, finalmente.


você pode esclarecer "5.4 definir campos ... view: include view" um pouco mais. Não vejo uma opção para isso em nenhum lugar. Graças
Uwe

Me desculpe, eu não escrevi eu usei Views 7.x-3.0-rc1 + Views Field 7.x-1.0-rc1
Refineo

ok obrigada Também segui algumas instruções sobre a fila de questões deles drupal.org/node/1171604
uwe

Uau, essa resposta recebeu um voto maciço nos últimos 7 dias. Alguém já testou isso ou acabou de votar porque o @Refineo deu a resposta mais detalhada?
iStryker

Tentei esta explicação novamente e não funcionou. Eu odiava a todos que upvoted esta pergunta é a última semana sem testes
iStryker


3

Se você deseja obter o vídeo da URL, use o código a seguir.

$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;

}

Ou use o seguinte 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" : "";
  }

2

Claro que existe:

  1. Configure seu vocabulário hierárquico,
  2. Adicione-o a qualquer tipo de conteúdo selecionado,
  3. Crie um nó de listagem de exibição desse tipo de conteúdo, com filtro contextual :

    • "Conteúdo: possui ID do termo de taxonomia" - se você deseja listar apenas os nós atribuídos a um termo específico,
    • ou "Conteúdo: possui ID do termo de taxonomia (com profundidade)" - se você deseja listar os nós atribuídos a um termo específico e a seus termos filhos.

      Nesse caso, na configuração do filtro, você precisa definir a profundidade - quantos níveis abaixo (ou acima) você deseja que este filtro funcione.

Supondo que o URL da sua visualização seja http://mysite.com/myview e 'Red' tid = 1, se você acessar http://mysite.com/myview/1, ele listará todos os nós atribuídos a um dos termos 'vermelho', 'escuro' e / ou 'claro'.


Não estou procurando uma resposta para um termo específico. Eu estou procurando uma visão para todo o vocabulário
iStryker

E foi exatamente isso que eu descrevi.
Maciej Zgadzaj

2

Você pode usar o módulo de menu Taxonomia . Aqui está uma citação sobre isso (na página do projeto do módulo):

Transforma seus vocabulários de taxonomia em menus com facilidade!

Recursos:

  • Menu personalizado por vocabulário
  • Usa o caminho do termo de taxonomia padrão ou caminhos personalizados
  • Integrar com Views
  • Integre-se ao Pathauto: use aliases de URL / caminho
  • Não interfere com outros módulos de menu

Bem-vindo ao Drupal SE! taxonomy_menu é um projeto interessante e pode fazer isso muito bem. O OP quer fazê-lo no Views.
precisa saber é o seguinte

0

Estou tentando fazer o mesmo, mas não encontrei muito disponível no D7. O módulo Blocos de Taxonomia faz isso em um bloco - não em visualizações.


0

Acredito que encontrei mais uma maneira de resolver esse problema e acho que é mais simples que o restante dessas soluções. Não envolve nenhum módulo extra e você precisa apenas de uma visualização.

Supondo que você tenha criado um vocabulário hierárquico de dois níveis (Cores) e um tipo de conteúdo com uma referência a esse vocabulário, faça o seguinte:

  1. Crie uma nova visualização e filtre por "Vocabulário da taxonomia: Nome da máquina (= Cores)"
  2. Adicionar relacionamentos: (1) Taxonomy term: Content using Colore (2)Taxonomy term: Parent term
  3. Adicione os campos à Visualização: (1) Title(escolha field_colorem "Relacionamento" e exija esse relacionamento ), (2) Taxonomy term name(não use relacionamento e exclua da exibição) (3) Taxonomy term name(sim, novamente, desta vez escolha Parentrelacionamento e exclua da tela).
  4. Agora, agrupe-o clicando em Configurações de formato: (1) agrupamento 1:, (Parent) Taxonomy term: Name(2)Taxonomy term: Name

Feito. Se você tiver mais de dois níveis, adicione outro relacionamento de pai usando pai como o relacionamento do relacionamento.

EDIT: se você não precisar do relacionamento, acabará sendo enganado. Os pais serão listados duas vezes se tiverem termos filhos referenciados por nós. Portanto, isso limita um pouco a resposta nesses termos de nível superior sem que os nós de referência não sejam exibidos. Além disso, como a classificação é provavelmente importante, ter qualquer conteúdo que faça referência a um termo de nível superior potencialmente causaria problemas para você, dependendo das necessidades de exibição.


Não há filtro "Vocabulário taxonômico: Nome da máquina (= Cores)" até adicionar relacionamento. Suspeito que o primeiro passo seja o segundo. Também não consegui entender como adicionar o campo Title ao escolher field_color em "Relationship".
Dimetry
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.