Maneira limpa de construir um navegador simples de taxonomia de profundidade arbitrária

23

Passei dias tentando determinar uma maneira limpa de fazer o seguinte:

  1. Exibir uma lista de todos os termos de nível superior em um vocabulário com links para os termos filhos
  2. Ao clicar em um link, seja levado a uma lista dos filhos desses termos.
  3. Ad infinitum até o termo de nível mais baixo, para o qual uma lista de nós marcados com esse termo será exibida.

Parece que seria uma funcionalidade bastante necessária, mas não consigo encontrar nenhuma solução que possa lidar com profundidade arbitrária, principalmente se nem todas as árvores de termo tiverem a mesma profundidade.

Uma solução ideal seria aquela que usa as Views 3, Contexts, EntityFieldQueries ou qualquer outra coisa que seja bem suportada no Drupal 7.

Consigo fazer quase exatamente o que quero, criando uma visualização simples com três nós: relacionamentos de termos (termo, pai do termo e pai do pai do termo) e utilizá-los para filtros contextuais sequenciais. O único problema com isso é que, se houver um nó com um trafego de muito pouca profundidade, ele será listado como "não categorizado" e gerará um link morto. Em vez de fazer isso, gostaria que ele vinculasse ao próximo termo filho disponível.

beth
fonte

Respostas:

23

Eu descobri uma maneira de fazer isso apenas com o módulo Views. Não é perfeito - ele não gera um URL e uma trilha de navegação agradáveis ​​com a linhagem de taxonomia da mesma maneira que minha solução para uma taxonomia de uma única profundidade faria.

Navegador de profundidade estática

Para uma taxonomia de profundidade estática (onde todos os termos têm a mesma profundidade de termos filhos), faça o seguinte:

  1. Criar uma visualização de nós
  2. Adicionar relação ao termo de taxonomia (Termo)
  3. Adicionar relacionamento ao termo pai da taxonomia, acessível via Termo (pai)
  4. Adicionar relacionamento ao termo pai da taxonomia, acessível via Pai (Pai Pai)
  5. Repita a etapa 4 quantas vezes for necessário para a profundidade da sua taxonomia.
  6. Adicione filtros contextuais para cada um e verifique se estão na ordem correta. Defina para exibir um resumo quando o filtro não estiver no URL.
  7. Você provavelmente desejará substituir a trilha de navegação e o título de cada filtro.
  8. ???
  9. LUCRO

Navegador de profundidade variável

Para uma taxonomia de profundidade variável (onde alguns termo árvores têm níveis mais profundos de aninhamento do que outros), é um pouco mais complexo:

  1. Adicione um novo termo de nível superior (Foo) ao seu vocabulário e coloque todos os outros termos nele.
  2. Crie uma exibição de termos com uma página que exibe nomes de termos
  3. Adicionar filtro contextual: Termo de taxonomia: Termo pai
  4. Quando o valor padrão não estiver na URL, forneça o valor padrão
  5. Defina o valor padrão para o nome do termo de nível superior (Foo)
  6. Especifique critérios de validação
    • Validador: termo de taxonomia
    • Critérios: seu nome de vocabulário
    • Tipo de valor do filtro: nome do termo convertido em ID do termo
  7. Clique no botão "+ Adicionar" na parte superior do painel Views para adicionar um anexo à view.
  8. Adicionar apenas a este anexo (substituir) Relacionamento: termo de taxonomia: conteúdo com termo
  9. Adicione apenas a este anexo (substitua) display: fields: títulos de nó vinculados a nós e remova (somente deste anexo!) Display: fields: term name
  10. Adicionar apenas a este anexo (substituir) filtro contextual: Termo de taxonomia: Nome
  11. Quando o valor do filtro não estiver disponível, forneça o valor padrão: Valor bruto do URL: Componente do caminho: 2 (ou mais, se o caminho da sua página tiver> 1 componente)
  12. Configurações de anexo: Anexe a: [nome da exibição da página que você acabou de fazer]
  13. ???
  14. LUCRO

Capturas de tela da interface do usuário do Views para referência: insira a descrição da imagem aqui

beth
fonte
Bem feito! Votação tanto da pergunta quanto da sua resposta - parece algo bastante comum a ser feito e sua solução é melhor do que qualquer coisa que encontrei enquanto tentava responder inicialmente.
31512 aendrew
8
  1. Crie uma visualização do tipo Taxonomia
  2. Adicione um filtro contextual do tipo Termo de taxonomia: Termo pai
  3. Definir Forneça o valor padrão e mantenha-o como fixo. forneça o ID do termo do principal termo pai
  4. Adicionar ID do termo de taxonomia como campo e Excluir da exibição
  5. Adicione um nome de termo de taxonomia, clique em colocar este campo como um link; forneça o link como "caminho que você define na visualização / [tid]"
    Nota: Você deve desmarcar "Vincular este campo à sua página de termos de taxonomia"

Quando você visita a página de visualização, vê os filhos dos pais principais; conforme o exemplo que você obteria:

  • term1
  • term2

Quando você clica em term1, você recebe os filhos. Até você atingir o termo1.1.1. Você não obterá nenhum resultado se clicar no termo1.1.1 ainda. Para conseguir isso, precisamos criar mais um bloco de exibição na exibição acima.

  1. Adicionar um bloco
  2. Remova o filtro contextual e o campo existentes.
    Nota: Ao removê-los, certifique-se de selecionar Esta página (Sobre a viagem) na lista suspensa na parte superior ao lado de. Por outro lado, os campos e filtros contextuais que você criou na página também desapareceriam. .
  3. Adicionar um novo filtro contextual Termo de taxonomia: ID do termo
  4. Adicionar um termo de taxonomia de relacionamento : conteúdo com termo
  5. Adicione o título do conteúdo e use o relacionamento na lista suspensa na parte superior.
  6. Salve a visualização e volte para a página que criamos (isso é importante; caso contrário, você não poderá concluir a próxima etapa
  7. Adicione um campo no FOOTER OR HEADER
  8. Selecione "Global: Visualizar área" na lista e selecione o bloco que criamos na lista suspensa Ver para inserir enquanto estiver lá. Marque Herdar filtros contextuais para que também possamos passar o valor dessa visualização para o bloco
  9. Marque Exibir, mesmo que a visualização não tenha resultado, para que, quando essa visualização não mostre o resultado, o bloco ainda seja exibido

Salve a visualização e pronto.

Mohammed Shameem
fonte
Eu segui a explicação clara de Mohammed Shameem. Obrigado, funciona perfeito !!
Steven
3

Acho que o que você quer é o Views Tree , um módulo de contribuição que usa o Views para construir uma árvore de termos de taxonomia.

(Dê-me um segundo e eu escreverei um rápido tutorial sobre como usá-lo, veja os campos fiscais)

Aparentemente, esse módulo tem um problema que o impede de trabalhar com termos de taxonomia. Vaia.

Dito isso, encontrei o seguinte código que parece fazer o que você deseja (você pode fazer com que ele exiba / oculte elementos através de algum código jQuery bastante rudimentar):

<?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";

Via " Listas de categorias aninhadas com links para páginas ".

aendrew
fonte
Eu habilitei esse módulo e tentei experimentá-lo e tenho dois problemas: 1. Suspeito que ele fornece apenas uma lista simples, não uma experiência de navegação com várias páginas e 2. Não consigo fazê-lo funcionar. Um tutorial seria muito útil.
beth
Resposta atualizada. Desculpas, aparentemente, o Views Tree tem um problema em aberto: usando termos de taxonomia. Resposta alternativa publicada.
aendrew
Isso parece fornecer uma lista aninhada simples em vez de um navegador de paginação seqüencial.
beth
@ bet - Seria suficiente se eu escrevesse algum jQuery que mostra / oculta elementos dessa lista quando itens pai / filho são clicados?
aendrew
Eu não quero que seja dependente de JavaScript.
beth
0

Se você quiser apenas ter um conjunto de páginas dinâmicas de navegação em taxonomia, eu seguiria o seguinte caminho, exigindo o módulo 3 Views + Taxonomy Display , que permite usar Views para exibir o conteúdo das taxonomy/term/%páginas:

  1. Termos de nível superior - lista os termos cujo pai é nulo
  2. Termos de nível médio - lista os termos cujo pai não é nulo. Sem resultado: exibir Visualização # 3
  3. Nós com termos - lista os nós marcados com termos.

Como as exibições 1 e 2 provavelmente terão o tema de maneira semelhante, considere mesclá-las como exibições em uma única visualização - seria mais fácil de gerenciar.

Eu tenho usado com sucesso essa abordagem para minha taxonomia. Felizmente, era homogêneo em cada nível - um determinado ramo terminava com folhas (nós) ou ramos (termos), mas não com os dois. Se isso for uma limitação, teste-a primeiro.

Claro que este é um "pseudo-código". Você deseja configurar validações e filtros e um bom padrão de pathauto com aparência lógica para refletir a estrutura.

Artur
fonte