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

questionAnswers(3)

yourAnswerToTheQuestion