• Cadastro
  • Fóruns
  • Manual
  • Projetos
  • Seminário
  • Tradução
  • Tutoriais
  • Dicas
Início

Itens ativos

  • Módulo Blog para drupal 6.0x
  • i18n - Seria um bug? Tem solução?
  • Paginação
  • Feeds
  • Menu horizontal automático...
  • Melhor Performance no Drupal 6
  • CCK no Drupal 6.4
  • Ocultar o menu de navegação / nice menu
  • Criar Janela Separada... Exemplo "Sobre o Mozilla Firefox"
  • Email - envio
mais

Pesquisa

Google
Web Drupal Brasil

Login do usuário

  • Criar nova conta
  • Solicitar uma nova senha

Parceiros

Assine o RSS do Drupal-BR

RSS dos itens mais ativos

RSS do conteúdo

RSS dos comentários

Início » Fóruns » Suporte » Módulo Views

Problema com o Sort Criteria - Pergunta nível 5 !!!!

Senhores,

Estou com o seguinte problema:

Criei uma view do tipo page, para listar conteúdo de determinada categoria. Até aí tudo perfeito, criei uma página com o Theme wizard....tudo redondo...
Mas quando precisei ordenar os registros pela data de criação....foi que o problema começou a acontecer....
Identifiquei o problema mas não sei como posso resolver. Ele está colocando um distinct no select e quando ordeno, ele necessita colocá-lo na clausula order by também, ficando assim, como primeiro critério de ordenação....veja abaixo:

SELECT DISTINCT ON (node.nid) node.nid, node.created AS node_created_created, node.title AS node_title, node.changed AS node_changed FROM node node LEFT JOIN term_node term_node ON node.nid = term_node.nid LEFT JOIN term_hierarchy term_hierarchy ON term_node.tid = term_hierarchy.tid WHERE (node.promote = '1') AND (term_node.tid = '1') ORDER BY node.nid, node_created_created DESC, node.nid DESC LIMIT 6 OFFSET 0

E aí? alguém tem alguma sugestão?

‹ Como usar código php nas Views Centralizar conteudo ›
Enviado por rodrigo.maeda em qui, 15/05/2008 - 17:24.
  • Módulo Views
  • Por favor, se logue ou se registre para poder enviar comentários
  • 255 leituras

Rodrigo, Só não entendi o

Rodrigo,

Só não entendi o que você precisa hehe. Você quer que ele ordene pela data de criação ou pelo nid?

Abraço,
--
Rafael Ferreira Silva
http://www.rafaelsilva.net

Enviado por rafael em qui, 15/05/2008 - 18:47.
  • Por favor, se logue ou se registre para poder enviar comentários

HEHEHEH Seguinte, não fui

HEHEHEH
Seguinte, não fui eu que adicionei o campo nid no sort criteria....o próprio drupal adiciona ele....porque nos argumentos da clausula select existe o distinct on....
Era para a view ordenar apenas pela data de criação....
Estive dando uma olhada e achei no arquivo. database.inc a seguinte função:

function db_rewrite_sql($query, $primary_table = 'n', $primary_field = 'nid', $args = array()) {
list($join, $where, $distinct) = _db_rewrite_sql($query, $primary_table, $primary_field, $args);

if ($distinct) {
$query = db_distinct_field($primary_table, $primary_field, $query);
}
......

É nesse if $distinct que ele coloca o DISTINCT ON no argumento do SELECT....
eu comentei a linha da variável $query, e ele me retornou o resultado da lista ordenado pela data de criação....

NOTE:
Estou supondo que ele adiciona este DISTINCT ON no campo NID porque um node pode estar relacionado a mais de uma categoria, logo, como ele faz vários joins, e um node tiver relação com mais de uma categoria, o resultado da lista virá duplicado.... Ex: duas notícias repetidas....
Acho que é por isso que ele faz um DISTINCT ON no campo NID....

Enviado por rodrigo.maeda em qui, 15/05/2008 - 19:02.
  • Por favor, se logue ou se registre para poder enviar comentários

Analisando um pouco mais

Analisando um pouco mais descobri a seguinte função:

/**
* Implementation of hook_db_rewrite_sql
*/
function node_db_rewrite_sql($query, $primary_table, $primary_field) {
if ($primary_field == 'nid' && !node_access_view_all_nodes()) {
$return['join'] = _node_access_join_sql($primary_table);
$return['where'] = _node_access_where_sql();
$return['distinct'] = 1;

return $return;
}
}

que está no arquivo node.module.
Ela retorna o distinct == 1.... Eu alterei para zero e a ordenação também funcionou.....
Agora eu pergunto....Qual o impacto dessa mudança....????

Enviado por rodrigo.maeda em qui, 15/05/2008 - 19:17.
  • Por favor, se logue ou se registre para poder enviar comentários

Cara, não é por aí não.

Cara, não é por aí não. Não há necessidade de mexer no código do Drupal. Isso parece algum problema na construção da view.

Se você puder postar aqui a sua view (basta exportá-la) eu posso dar uma olhada,
Fiz uma aqui semelhante à que você está fazendo e não deu esse erro, acho que em "Filters" você escolheu "Node: distinct", e isso tá te causando o problema.

Abraço,
--
Rafael Ferreira Silva
http://www.rafaelsilva.net

Enviado por rafael em qui, 15/05/2008 - 20:49.
  • Por favor, se logue ou se registre para poder enviar comentários

Rafael, Segue abaixo código

Rafael,

Segue abaixo código da view:

$view = new stdClass();
$view->name = 'noticias_em_foco';
$view->description = 'Listagem de Notícias em Foco';
$view->access = array (
0 => '1',
1 => '2',
);
$view->view_args_php = '';
$view->page = FALSE;
$view->page_title = '';
$view->page_header = '';
$view->page_header_format = '1';
$view->page_footer = '';
$view->page_footer_format = '1';
$view->page_empty = '';
$view->page_empty_format = '1';
$view->page_type = 'node';
$view->url = '';
$view->use_pager = TRUE;
$view->nodes_per_page = '10';
$view->block = TRUE;
$view->block_title = 'Notícias em Foco';
$view->block_header = '';
$view->block_header_format = '1';
$view->block_footer = '';
$view->block_footer_format = '1';
$view->block_empty = '';
$view->block_empty_format = '1';
$view->block_type = 'list';
$view->nodes_per_block = '5';
$view->block_more = FALSE;
$view->block_use_page_header = FALSE;
$view->block_use_page_footer = FALSE;
$view->block_use_page_empty = FALSE;
$view->sort = array (
array (
'tablename' => 'node',
'field' => 'created',
'sortorder' => 'DESC',
'options' => 'normal',
),
);
$view->argument = array (
);
$view->field = array (
array (
'tablename' => 'node',
'field' => 'created',
'label' => 'Data',
'handler' => 'views_handler_field_date_small',
),
array (
'tablename' => 'node',
'field' => 'title',
'label' => 'Título',
'handler' => 'views_handler_field_nodelink',
'options' => 'link',
),
);
$view->filter = array (
array (
'tablename' => 'term_node',
'field' => 'tid',
'operator' => 'AND',
'options' => '',
'value' => array (
0 => '7',
),
),
array (
'tablename' => 'node',
'field' => 'promote',
'operator' => '=',
'options' => '',
'value' => '1',
),
);
$view->exposed_filter = array (
);
$view->requires = array(node, term_node);
$views[$view->name] = $view;

Enviado por rodrigo.maeda em sex, 16/05/2008 - 11:57.
  • Por favor, se logue ou se registre para poder enviar comentários

Rodrigo, Essa view pra mim

Rodrigo,

Essa view pra mim retornou a query certa, veja:

SELECT node.nid, node.created AS node_created_created, node.created AS node_created, node.title AS node_title, node.changed AS node_changed FROM node node LEFT JOIN term_node term_node ON node.nid = term_node.nid LEFT JOIN term_hierarchy term_hierarchy ON term_node.tid = term_hierarchy.tid WHERE (term_node.tid = '2') AND (node.promote = '1') ORDER BY node_created_created DESC

Abraço,
--
Rafael Ferreira Silva
http://www.rafaelsilva.net

Enviado por rafael em sex, 16/05/2008 - 15:12.
  • Por favor, se logue ou se registre para poder enviar comentários

O que pode estar errado

O que pode estar errado então?
Será que pode ser algum módulo que estou utilizando?
Os módulos que instalei foram os seguintes:
- autologout
- event
- fckeditor
- print
- site_map
- smtp
- taxonomy_access
- views

Se tiver algum comentário a respeito desses módulos e quiser me dizer eu agradeceria....pois não sei ainda se existe algum problema com eles....ou módulos melhores que esses....

[]'s

Enviado por rodrigo.maeda em sex, 16/05/2008 - 16:05.
  • Por favor, se logue ou se registre para poder enviar comentários

Rodrigo, Pelo tipo da view

Rodrigo,

Pelo tipo da view que você está construindo não vejo como algum módulo desses poderia estar interferindo na view.
Um teste que você pode fazer é experimentar fazer uma instalação zerada com esses módulos e tentar realizar o mesmo teste, se funcionar, voce deve ter mexindo em alguma configuração/código e está interferindo, se náo funcionar, vai desabilitando módulo por módulo pra ver o que é.

O único desses módulos que pode estar interfenrindo (a meu ver) é o taxonomy_access mas não tenho como afirmar que é isso.

Os demais (exceto views, fck e event) eu nunca usei.

Abraço,
--
Rafael Ferreira Silva
http://www.rafaelsilva.net

Enviado por rafael em sex, 16/05/2008 - 17:01.
  • Por favor, se logue ou se registre para poder enviar comentários

Blz, vou fazer mais uns

Blz, vou fazer mais uns testes e assim que eu identificar o problem e lhe falo...

Valeu!

Enviado por rodrigo.maeda em sex, 16/05/2008 - 17:06.
  • Por favor, se logue ou se registre para poder enviar comentários
Designimage

Este site é feito, orgulhosamente, com Drupal.