Listagem de ultimas relacionado com um id existente no filed de um artigo

Events happening in the community are now at Drupal community events on www.drupal.org.
antoniocardoso's picture

Bom dia,
estou a tentar criar uma listagem de ultimas mas que não consigo relacionar com um field que existe no artigo principal.

Explicando melhor:
estou a ver um artigo num página e esse artigo tem um field com uma designação
exemplo:
Nome do Programa: XPTO

quando estou a visualizar esse artigo,
na coluna direita gostaria que me aparece-se todos os artigos que tenham o mesmo field XPTO, mas a verdade é que não estou a ver como.

Uma das soluções penso que é passar pelo url do artigo, mas mesmo no url o field é composto com outra estrutura. No url não aparece só o "XPTO", aparece "pXPTO".

Assim sendo, existe alguma forma de criar a listagem de ultimas a partir de um field do artigo principal.

Abraço e obrigado,

Comments

view contextual filter

antoniocardoso's picture

a meu ver penso que é pelo contextual filter, através do PHP code. Todavia, parece que o PHP Code não funciona. Alguém sabe o porquê?

António Manuel Cardoso

Filtro por termos no node

torvall's picture

O contextual filter de que precisas é o que se chama: "Content: Has taxonomy term ID". Nas opções do filtro, escolhe "Provide default value" e activa a opção "Load default filter from node page, that's good for related taxonomy blocks". Na lista, escolhe os termos por que queres filtrar.

Parece que não funciona

antoniocardoso's picture

Quando escolho "Provide default value", qual é type que depois seleciono?
É que não está a funcionar?

Nota: o field que quero que relacione não passa no url, mas faz parte do artigo que estou a ver. Na coluna da direita é que depois vais aparecer todos os artigos que têm esse mesmo valor no field.

Abraços e obrigado.

António Manuel Cardoso

Type do filtro

torvall's picture

O type de que precisas é o "taxonomy Term ID from URL". Apesar de não vir da URL, a view vai buscar os dados ao $node quando se liga a opção "Load default filter from node page, that's good for related taxonomy blocks".

Escolher o field

antoniocardoso's picture

mas como é que escolho o field do node que pretendo?

António Manuel Cardoso

Não tens de escolher o field

torvall's picture

Não tens de escolher o field, ele faz a associação pelos termos dos vocabulários seleccionados (suponho que internamente use o array $node->taxonomy, mas é mesmo só uma suposição).

mas a associação não é um termo

antoniocardoso's picture

Bom dia torvall, mas eu não quero associar um termo, ou seja, o que pretendo associar não tem a ver com a taxonomia, mas sim um field que é preenchido com um nome/numero. Esse nome/numero não vem no url.

António Manuel Cardoso

Boas, Pelo que percebi, a

ronaldofs's picture

Boas,

Pelo que percebi, a minha abordagem seria a seguinte:

  • Tens o tipo de conteúdo A com o campo X. Ao visualizar um node do tipo A, existe um bloco/view com uma lista de nodes do tipo A com o mesmo valor no campo X.
  • Para isso crias um view display do tipo block, com filtro para tipo de conteúdo A.
  • Nos contextual filter, adicionas o campo X (deve ser algo do género Conteúdo: X (field_x))
  • Seleccionas no contextual filter a opção "Provide default value" do tipo "PHP Code" e escreves lá algo do género _get_related_content_type_A();
  • Esta função _get_related_content_type_A(); podes definir num módulo custom ou até mesmo no template.php do tema
  • A função deverá ser algo do género:
    function _get_related_content_type_A() {
      $nid = arg(1); // Vai buscar o 2o argumento da url, que neste caso é 'node/[nid]'
      $node = node_load($nid); // Carregas o node para esta variavel
      $value = $node->field_X['und'][0]['value']; // O ideal aqui seria usar o devel para ver exactamente onde esta localizado o valor do campo no node. Habitualmente terá esta hierarquia.
      return $value
    }
  • Agora esta função irá retornar o valor do campo que tens no node que está a ser visualizado e então será aplicado no contextual filter para o Conteudo: X (field_x). Isto vai fazer com que só apareçam nodes na view que tenham o mesmo valor neste campo.
  • Nota: Para testares rapidamente, copia directamente o código que está dentro da função para o "PHP Code" no contextual filter. Se for o que pretendes cria então a função para não teres código na view (nem na base de dados).

A ver se isto resulta para o teu caso.
Abraço

Atenção aos get arg...

PedroMiguel's picture

Lerem argumentos directamente dos urls sem os "sanitizarem" é abrir brechas de segurança nos vossos sites...

Em vez disso, se tens um node, e se é um campo que queres obter o valor escolhes o devido campo como argumento e utilizas o php

<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));}
if (isset(
$node->field_exemplo['und'][0]['value'])) { return $node->field_exemplo['und'][0]['value'];
} else {
  return
FALSE;
}
?>

muda o field_exemplo para o nome do teu field
Desta forma fazes tudo internamente e com menor risco de segurança

Uma outra maneira de aceder

ronaldofs's picture

Uma outra maneira de aceder ao node actual, se não quiseres estar a usar args da url poderá ser:

$menu = menu_get_item();

$node = array_shift($menu['page_arguments']); // Node actual

Portugal

Group categories

Classificação

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: