Como defino minhas visualizações para retornar um 404 usando Global: Null em filtros contextuais?

14

O comportamento padrão do Drupal é passar todos os argumentos, independentemente de terem sido solicitados ou não. Às vezes, esse comportamento é desejado. No entanto, eu preciso retornar um 404 para qualquer coisa, exceto uma string de consulta.

Exemplo do problema http://drupal.org/project/modules http://drupal.org/project/modules/google.com <- Isso deve retornar um 404; 200 dados. Pena de conteúdo duplicado!

O módulo views 404 assume que, por padrão, você não deseja que argumentos sejam transmitidos. No entanto, não há versão D7 do módulo.

Mas a página do projeto diz que 404s para visualizações também podem ser realizados configurando Global: Null em Arguments.

Obviamente, no D7, "argumentos" agora são "filtros contextuais", mas não tenho certeza sobre quais configurações adicionar ao filtro contextual Global: null para obter o resultado desejado.

Qualquer ajuda seria apreciada.

Nigel Waters
fonte

Respostas:

22

Nos filtros contextuais, selecione Adicionar ; na caixa de diálogo exibida, selecione Global: Nulo .

captura de tela

Clique em Adicionar e configurar filtros contextuais .

Na caixa de diálogo exibida a seguir, no conjunto de campos Quando o valor do filtro estiver disponível ou for fornecido um padrão , marque Especificar critérios de validação , selecione - Validação básica - para Validator e selecione Mostrar "Página não encontrada" para Ação a ser executada se o o valor do filtro não valida . No conjunto de campos Mais , marque Falha na validação básica se algum argumento for fornecido .

captura de tela

Eu testei com uma visualização "Artigos" que criei e funciona.

captura de tela

captura de tela

O argumento "Global: Null" deve ser o último. Se você precisar de um ID do usuário, por exemplo, primeiro adicione-o como argumento e, em seguida, adicione o argumento "Global: Null".

Alterei a visualização "Artigo" para aceitar um ID do usuário como argumento, usado para filtrar a lista de nós de artigos. A visualização ainda funciona, pois não aceita um argumento extra.

captura de tela

captura de tela

kiamlaluno
fonte
1
Isso retornará erro de código 403, não 404. Selecione a opção "Mostrar" Página não encontrada "em vez disso
Eugene Fidelin 23/10/12
Em um tópico no DO, vejo alguém sugerindo o uso de arg (1) == NULL; no código de validação php. Isso é melhor ou praticamente a mesma coisa?
Nigel Waters
1
@EugeneFidelin Eu estava editando a exibição "mestre" e não estava vendo a opção "Página não encontrada" como Mostrar . Corrigi minha resposta.
kiamlaluno
@NigelWaters Esqueça minha resposta anterior. :)Eu estava editando a tela errada e a exibição não estava funcionando como deveria. Não há necessidade de usar o código PHP para validar o argumento; veja a resposta atualizada.
kiamlaluno
Ainda não tenho pontos suficientes para comentar - por isso, poste aqui para agradecer a @kiamlaluno. Funciona muito bem e algo que eu estava batendo com a cabeça por um tempo.
Blue Waters
1

Você pode fazer isso usando visualizações prontas para uso. Em todas as configurações de filtro contextual, você pode ver uma caixa de seleção "Especificar critérios de validação", para ver mais configurações.

Em seguida, você pode selecionar "validador" com base nas condições de exibição. Se você deseja validar personalizado, selecione o código php. Retorne True ou False no código php com base nas suas condições de validação.

Por fim, selecione "Ação a ser executada", pois o Acesso à exibição é negado! Veja abaixo a captura de tela para o filtro contextual nid.

insira a descrição da imagem aqui

Anil Sagar
fonte
Qual é o código php que eu adiciono?
Nigel Waters
Eu só estou usando o global: Filtro contextual nula
Nigel Waters
3
NUNCA USE O CÓDIGO PHP NA VISTA OU EM QUALQUER OUTRA FERRAMENTA DE UI!
Hugronaphor