我正在尝试修改 Drupal 中的视图查询(视图版本 3,Drupal 版本 7)。
我想要做的是在运行之前更改查询,使其 LEFT JOINs 一个表,其中我已分配给节点的权重。
如果我要在 SQL 中编写我想要的查询,它看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
当我在查询分析器中运行这个查询时,它就像一个冠军。所以,现在我需要让它在我的模块中工作。
我已经在各种博客上看到多种方法详细介绍了修改视图查询的不同方法,但它们似乎是针对不同版本的视图。因此,试图确定我正在查看的任何内容是否可能适用于我的应用程序是非常令人困惑的。
看来我需要使用一个 MODULE_NAME_views_tables() 函数来告诉 Views 我要加入的表和节点表之间的关系。
我在 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; …Run Code Online (Sandbox Code Playgroud)