Itens ativos
Pesquisa
Login do usuário
Assine o RSS do Drupal-BR
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?
- Por favor, se logue ou se registre para poder enviar comentários
- 142 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
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....
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....????
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
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;
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
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
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
Blz, vou fazer mais uns
Blz, vou fazer mais uns testes e assim que eu identificar o problem e lhe falo...
Valeu!