Quantcast
Channel: Recent posts across whole site
Viewing all articles
Browse latest Browse all 49199

Dúvida na utilização de filtros "Node: Type" e "Organic Groups: Group Types" em views

$
0
0

Viva,

Detectei o comportamento abaixo indicado aquando a utilização do Drupal Commons v6.x-1.6.

Ao seleccionar os filtros "Node: Type" e "Organic Groups: Group Types" numa view que tenha uma relação com "Organic groups: Group node" o query gerado pela preview contém algo como:

...
WHERE ((node.type in ('event')) AND (node.status <> 0) AND (node.type in ('og_group_a', 'og_group_b')))
...

A 3ª condição não devia ser algo diferente de node.type, uma vez que esta entra em "conflito" com a 1ª?

Depois de dar uma vista de olhos no código fiquei com a sensação que este seria o comportamento expectável (depois de ler os comentários abaixo), mas não encontrei nenhuma razão explícita que o justifique.

project/profiles/drupal_commons/modules/contrib/og/modules/og_views/og_views.views.inc:276-284

<?php
// Pseudofield which actually operates on node.type
$data['og']['type_groups'] = array(
 
'title' => t('Group types'), // The item it appears as on the UI,
 
'help' => t('The type of a group (for example, "blog entry", "forum post", "story", etc).'),
 
'real field' => 'type',
 
'filter' => array(
   
'handler' => 'og_views_handler_filter_og_type',
  ),
);
?>

project/profiles/drupal_commons/modules/contrib/og/modules/og_views/includes/og_views_handler_filter_og_type.inc:16-28

<?php
 
// This is a copy of views_handler_filter_in_operator::query
  // We force the table to be 'node' instead of 'og'. There might be cleaner ways to do this.
 
function query() {
    if (empty(
$this->value)) {
      return;
    }
   
$table = $this->query->ensure_table('node');
   
$placeholder = !empty($this->definition['numeric']) ? '%d' : "'%s'";

   
$replace = array_fill(0, sizeof($this->value), $placeholder);
   
$in = ' (' . implode(", ", $replace) . ')';
   
$this->query->add_where($this->options['group'], "$table.$this->real_field " . $this->operator . $in, $this->value);
  }
?>

Já alguem se deparou com a mesma situação, ou, que me saiba explicar o porquê de no código estarem a forçar que a tabela utilizada seja a node?

Se substituir 'node' por 'node_og_ancestry' (disponível devido à relação com "Organic groups: Group node") a view funciona como seria de esperar.

Obrigado pela atenção, qualquer comentário sobre este assunto será bem vindo :)


Viewing all articles
Browse latest Browse all 49199

Trending Articles