Como usar o título do nó ou o alias do caminho em vez da identificação do nó no filtro contextual de referência do nó nas visualizações?

8

Eu tenho o nó A com uma referência ao nó B.

Em uma exibição, mostro todos os nós A que têm um nó específico B referenciado (nid: 123, title: node-B-title).

Em vez de usar o nid no filtro contextual, eu gostaria de usar o título do nó. Por exemplo, em vez de:

view-name/123

Eu gostaria de usar

view-name/node-B-title

Como eu pude fazer isso?

uwe
fonte

Respostas:

11

Eu tive um problema muito semelhante e não apenas encontrei a solução, mas também aprendi coisas novas sobre como a exibição funciona. Deixe-me compartilhar o que aprendi e a solução para o seu problema também.

Ao criar uma visualização com um ou mais filtros contextuais, a visualização deve receber valores desses filtros de algum lugar. Isso pode ser feito por -

  1. Escolhendo o (s) valor (es) do filtro de contexto da URL
    • Normalmente, você teria uma visualização de página para tais finalidades, com URL do formulário foo/%/barou foo/bar/%para filtro contextual único OU do formulário foo/%/bar/%ou foo/bar/%/%para vários filtros
    • Caso você tenha vários filtros, o valor da URL que aparece primeiro é mapeado para o primeiro filtro, próximo ao segundo filtro e assim por diante.
  2. Visualizações permite que você diga o que fazer se os valores do filtro não estiverem disponíveis no URL . Isso geralmente é usado para visualizações de bloco .
    • Você pode escolher entre diferentes ações e também configurar a escolha. Você pode escolher entre diferentes ações e também configurar a escolha. asdfj kajsdf
  3. Outra coisa que o visualizador permite é dizer o que fazer com os valores do filtro se eles forem encontrados no URL, conforme descrito no item 1 acima. Os casos de uso típicos são: criação de títulos dinâmicos com base em valores de filtro, validação de valores de filtro etc.
    • Ao validar valores de filtro, você também pode alterar os valores! (É aí que está a nossa solução). Isso é muito parecido com o modo como podemos alterar os valores de $ form nos retornos de chamada de validação de formulário drupal. insira a descrição da imagem aqui

A solução para o seu problema específico está no uso de um código muito semelhante nas seções apontadas pelas setas na imagem acima.

Este link provou ser uma grande ajuda para mim. Aqui está um trecho:

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}
Sumeet Pareek
fonte
Isso não funcionou para mim, mas causou um erro de ajax na exibição ao salvar.
DrCord 25/03
1

Isso não funcionará em todas as circunstâncias, mas uma abordagem para o problema na questão é usar a exibição real do nó B (ou tipo de nó B) e definir seu caminho como você deseja com o módulo path ou pathauto. Em seguida, use o bloco de visualizações para adicionar o relacionamento de conteúdo e a visualização desejada.

Use um filtro contextual no NID e, em seguida, defina Provide default value > Content ID from URL. Em seguida, adicione o bloco de visualizações à sua página ou conjunto de páginas.

Se o seu contexto permitir que você use um bloco de visualizações no próprio nó e não uma página de visualizações, será muito mais fácil obter o caminho desejado e as exibições que você deseja.

squarecandy
fonte
1

Eu editei a resposta aceita, mas queria adicionar o código real aqui:

Use a opção validada PHP nas opções de validação no filtro contextual.

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}
Eric Steinborn
fonte
1

O argumento de visualização deve ser a referência de campo do tipo de conteúdo, selecione a opção "Fornecer argumento padrão" e marque a opção Nó de identificação (algo assim).

1) Adicione o argumento "Referência do campo X" 2) Verifique o nó do ID a partir da URL (no argumento padrão de adição) 3) Na seção de validação, verifique o tipo de conteúdo do nó e, na seção "Tipo de nó", selecione "ID do nó

E está feito. :)

Eleo
fonte
"ID do conteúdo do URL" fornece apenas o nid. Se eu usasse uma referência de termo, poderia usar "critérios de validação" com "nome do termo convertido em ID do termo". Para a referência do nó, não há opção semelhante para converter o título para nid. Provavelmente porque os títulos não são necessariamente únicos.
9302 uwe
Sim está correto, mas é necessário que o argumento seja a referência do campo (nid), tente isso.
Eleo
1) Adicione o argumento "Referência do campo X" 2) Verifique o nó do ID da url (adicione o argumento padrão) 3) Na seção de validação, verifique o tipo de conteúdo do nó e, na seção "Tipo de nó", selecione "ID do nó"
Eleo
O URL real pode ter o nid e o alias do caminho pode ser o título do nó. Isso funciona, não é?
precisa saber é o seguinte
0

Pergunta antiga, mas achei no Google e achei que eu compartilharia minha solução para qualquer pessoa que a encontrar no futuro:

Agora existe um módulo chamado safeword, que basicamente faz exatamente o que Sumeet Pareek sugeriu: (Automaticamente) cria um campo amigável para URL.

Gerto
fonte
0

Eu recomendaria o módulo Extended Path Aliases (path_alias_xt) . Ele corrige esse problema apenas por ser instalado sem configuração, é basicamente mágico, aparentemente. : D Na verdade, mas o trecho da página do módulo elogia como você o instala e corrige esse e outros problemas, mas não explica como o módulo o faz nos bastidores ... O, bem, sempre poderíamos leia o código: D Ele não menciona especificamente a correção de caminhos de visualizações, mas eu o usei para isso e funciona perfeitamente.

Lista de problemas que resolve, na página do módulo:

  • Você já se perguntou por que, depois de definir um apelido como about-us para, por exemplo, node / 123, suas páginas ainda estão repletas de abas e links feios gerados por máquina, como / node / 123 / edit, node / 123 / revisões etc. .?
  • Da mesma forma para / taxonomy / term /% e / user /% links: você esperava ver / sec / track, mas obteve / user / 5 / track?
  • Você acha que a barra de endereço do navegador também mostra esses números feios em vez de seus aliases?
DrCord
fonte