Como os filtros contextuais do Views funcionam?


9

Estou tentando entender meus filtros contextuais novamente! Eu usei um tempo atrás, mas fiquei totalmente perplexo novamente. Aqui está o que estou tentando fazer:

  1. Gere uma página do nó de conteúdo clonado com termos de taxonomia inseridos nessa página clonada.

ex .: EXAMPLE.com/white-shoes/blue

Quando um usuário acessar a página / white-shoes, ele exibirá a página do nó original voltada para a cor branca. Agora, se o usuário parar em / white-shoes / blue, ele exibirá a mesma página do nó, mas desta vez todo o conteúdo do corpo será reescrito, substituindo a cor branca pela cor azul.

No Views, eu teria que criar uma exibição de página com o caminho de:% /%

Agora, eu criaria um filtro contextual para recuperar o nid. Eu adiciono Conteúdo: nid como um filtro contextual. Eu escolho FORNECER UM VALOR PADRÃO e coloquei neste código PHP:

$ x = drupal_lookup_path ('fonte', arg (0));

$ y = explodir ('/', $ x);

retornar $ y 1 ;

Esse código PHP basicamente converte a parte / white-shoes da URL em um NID. Mas isso não funciona. Testei o código via drush ev através do terminal e, de fato, recebo um resultado retornado, então sei que funciona.

Eu faço o mesmo para o nome do termo de taxonomia e adiciono um filtro contextual para esse também. Desta vez, escolho FORNECER UM VALOR PADRÃO e seleciono VALOR CRU DA URL e seleciono o segundo argumento.

insira a descrição da imagem aqui

Como você pode ver quando insiro um PREVIEW VALUE para o filtro contextual: AAA / BBB / CCC. Meu valor padrão é ignorado. Ele deveria estar pegando o segundo argumento, mas está recebendo o primeiro apenas. Veja a instrução SQL WHERE e verá que ela está recebendo AAA quando deveria ser BBB.

insira a descrição da imagem aqui

Portanto, a pergunta é: o que estou fazendo de errado ou há uma solução melhor para o que quero realizar?


Isso parece estúpido, mas você poderia fornecer um pouco mais de detalhes? Estou tendo um pouco de tempo para entender o que você está tentando, mais sobre como você está tentando fazê-lo. Em vez de usar o valor Bruto ou Fornecer padrão, use o ID do conteúdo do URL. Isso fornecerá o NID.
precisa saber é o seguinte

oi kyle, não existe um ID de conteúdo desde o seu destino no URL: / white-shoes / blue .... o URL / blue não existe como renderizado pelas visualizações. portanto, não existe um ID de conteúdo para ser capturado ... ele precisa analisar o primeiro argumento do URL e depois convertê-lo em um caminho NID.
Patoshiパトシ

Respostas:



5

O filtro contextual é usado para filtrar, saída da visualização por argumentos de URL, também u pode passar os argumentos manualmente neste formato:

<?php print views_embed_view($name,$display_id,$arg1,$arg2,$arg3); ?>

onde "$ name" é o nome da sua visualização (por exemplo, 'exemplo_view') e '$ display_id' é o tipo de exibição da sua visualização (por exemplo, 'padrão') e "$ arg1, $ arg2, $ arg3" são argumentos assim como no URL.

Os argumentos de URL têm a seguinte estrutura:

http://example.com/arg_1/arg_2/arg_3 (arg_2 possui o componente de caminho 2 (na página de configuração da exibição)).

Quando o valor do filtro não está disponível:

significa que o drupal não consegue encontrar nenhum filtro.

Forneça o valor padrão:

quando o valor do filtro não está disponível, você pode usar esta opção para criar um filtro para a saída de visualizações, esse filtro pode ser código PHP (se o módulo de filtro PHP estiver ativado) ou pode obter seu valor a partir dos argumentos da URL -> (valor bruto) do URL). A caixa de texto Exceção permite enganar o valor e exibir todos os resultados.

Quando o valor do filtro está disponível

nesse caso, você faz uma validação conforme suas necessidades e algumas outras opções, quando o drupal pode encontrar o valor do filtro.


dada a função views_embed_view (). como eu carregaria isso no meu subcaminho de / white-shoes / blue? lembre-se de que / blue não existe conforme é gerado pelas visualizações. quando um usuário alcança o caminho / blue, ele deve analisar o 1º argumento e buscar o NID desse alias e carregar seu conteúdo. o problema com os filtros contextuais é que não há como fornecer um valor PHP para QUANDO O VALOR DO FILTRO ESTÁ DISPONÍVEL.
Patoshi #

@ Duckx, existe uma excelente opção para fornecer um valor PHP quando o filtro estiver disponível - VALIDATION (type: PHP Code). Com esta opção, você pode usar o objeto de exibição e fazer tudo o que precisa. No seu caso, o /bluecaminho gerado pelas visualizações também seria usado para buscar o ID do nó desse alias.
-PL
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.