Adicione junção de tabela, onde e solicite por para consulta de visualizações em views_query_alter ()
Estou tentando modificar a consulta para Views no Drupal (Views versão 3, Drupal versão 7
O que eu quero fazer é alterar a consulta antes da execução, para que DEIXE JOIN uma tabela na qual tenho pesos atribuídos aos nó
Se eu escrevesse a consulta que eu queria no SQL, ficaria assim:
SELECT a.nid, a.title, a.description
FROM node a
LEFT OUTER JOIN node_weights b
ON a.nid = b.nid
WHERE b.uid = $uid
ORDER BY b.weight DESC
Esta consulta funciona como um campeão quando a executo no analisador de consultas. Então, agora eu preciso fazê-lo funcionar no meu módulo.
Vi várias abordagens detalhadas em vários blogs para diferentes maneiras de modificar as consultas do View, mas elas parecem abordar diferentes versões do Views. Portanto, é muito confuso tentar determinar se alguma coisa que estou vendo pode funcionar para o meu aplicativ
Parece que preciso usar uma função MODULE_NAME_views_tables () para informar ao Views qual é o relacionamento entre a tabela na qual quero ingressar e a tabela do n
Adicionei as seguintes funções ao MODULE_NAME.views.inc
function MODULE_NAME_views_tables() {
$tables['node_weights'] = array(
"name" => "node_weights",
"join" => array(
"left" => array(
"table" => "node",
"field" => "nid"
),
"right" => array(
"field" => "nid"
),
),
);
return $table;
}
Isso parece estar funcionando porque quando uso o Krumo para examinar a matriz de consultas, vejo minha tabela "node_weights" no elemento "table_queue"
Na função views_query_alter (), gostaria que funcionasse algo como isto:
function MODULE_NAME_views_query_alter(&$view, &$query) {
$uid = $_COOKIE['uid'];
$view->query->add_relationship('node_weights', new views_join('node_weights', 'nid', 'node', 'nid','LEFT'));
$view->query->add_where('node_weights', "node_weights.uid", $uid);
krumo($query);
}
Esta função vomita muito mal. Embora minha tabela de junção esteja aparecendo no objeto $ view, o método add_relationship está lançando um erro para um terceiro argumento, mas não vejo nenhum exemplo online com três argumentos, portanto não sei o que está faltando.
Além disso, tenho certeza de que meu método add_where não está correto, mas não sei quais devem ser as entradas. Este é apenas um palpit
A linha inferior é que eu quero associar a tabela de nós à minha tabela node_weights e, em seguida, verifique se meus pesos são usados na consulta para classificar os resultados de maneira decrescente, onde o ID do usuário = o ID do usuário na minha tabela e as tabelas são unidas no campo nid.
Desde já, obrigado