Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(drupal)一个难理解的代码,获得相同的文章';在同一条件下的所有权_Drupal_Module_Term - Fatal编程技术网

(drupal)一个难理解的代码,获得相同的文章';在同一条件下的所有权

(drupal)一个难理解的代码,获得相同的文章';在同一条件下的所有权,drupal,module,term,Drupal,Module,Term,} 代码来自drupal大师。我曾经在node.tpl.php中以相同的术语获得文章标题,我已经研究了两天,虽然我知道其中的一些内容。代码的原理我还不知道。希望有人能为我解释更多细节。非常感谢。我不会确切地说写这篇文章的人是大师,你可以做得漂亮得多。总之,他所做的是创建一个如下所示的查询: if ($node->taxonomy) { $query = 'SELECT DISTINCT(t.nid), n.nid, n.title FROM {node} n INNER JOIN {te

}


代码来自drupal大师。我曾经在node.tpl.php中以相同的术语获得文章标题,我已经研究了两天,虽然我知道其中的一些内容。代码的原理我还不知道。希望有人能为我解释更多细节。非常感谢。

我不会确切地说写这篇文章的人是大师,你可以做得漂亮得多。总之,他所做的是创建一个如下所示的查询:

if ($node->taxonomy) {
 $query = 'SELECT DISTINCT(t.nid), n.nid, n.title FROM {node} n INNER JOIN {term_node}    t ON n.nid = t.nid WHERE n.nid != %d AND (';


 $args = array($node->nid);
   $tids = array();

  foreach ($node->taxonomy as $term) {
  $tids[] = 't.tid = %d';
  $args[] = $term->tid;
}

  $query .= implode(' OR ', $tids) .  ')';

 $result = db_query_range($query, $args, 0, 10);
while ($o = db_fetch_object($result)) {
echo l($o->title, 'node/' . $o->nid);
}

最终结果是,他选择了所有节点ID和标题(仅一次),这些节点ID和标题至少与所选节点共享一个术语,但不是节点本身。

我不会确切地称写这篇文章的人为大师,你可以做得更好。总之,他所做的是创建一个如下所示的查询:

if ($node->taxonomy) {
 $query = 'SELECT DISTINCT(t.nid), n.nid, n.title FROM {node} n INNER JOIN {term_node}    t ON n.nid = t.nid WHERE n.nid != %d AND (';


 $args = array($node->nid);
   $tids = array();

  foreach ($node->taxonomy as $term) {
  $tids[] = 't.tid = %d';
  $args[] = $term->tid;
}

  $query .= implode(' OR ', $tids) .  ')';

 $result = db_query_range($query, $args, 0, 10);
while ($o = db_fetch_object($result)) {
echo l($o->title, 'node/' . $o->nid);
}

最终结果是,他选择了与所选节点至少共享一个术语的所有节点ID和标题(仅一次),但不是节点本身。

简短版本:

获取节点的标记数组,检索至少使用其中一个标记的前10个节点,并为这10个结果中的每个结果输出链接


详细版本:

首先,变量“
$node
”是包含特定节点(例如页面或故事节点)数据的对象。 例如,“
$node->title
”将是该节点的标题


$node->taxonomy
”测试节点是否被标记(因为如果它没有标记,则无法使用相同的标记检索其他节点)。 当有一个或多个标记与该节点/页面/故事关联时,
$node->taxonomy
是一个
数组


现在,关于SQL查询: “
node
”是存储每个节点的基本字段(非CCK)的数据库表。 “
term\u node
”是包含标记(称为“
taxonomy term
”)和节点组合的数据库表


在这两个表中,“
nid
”是“
unique Node ID
”(这是一个内部自动递增的数字)。由于此列在两个表中,因此这是将表连接在一起的方式

在“
term\u node
”中,“
tid
”是“
唯一术语ID
”(也是一个内部自动递增的数字)


节点
”表的别名为“
n
”,因此“
n.nid
”表示“
存储在表节点
中的节点ID”。 “
term\u node
”表别名为“
t
”,因此“
t.tid
”表示“
表term\u node
中存储的术语ID”


foreach
”循环遍历标记数组,提取节点使用的每个标记的TermID,以便将其添加到SQL查询中,并将内爆转换为字符串

循环在变量
$tids
中存储每个标记的SQL查询,并在变量
$args
中存储实际值,因为当参数与SQL查询分开传递时,Drupal数据库调用更安全:“
%d
”表示“
整数


db\u query\u range
”是一个在数据库中选择多行的函数:这里,“
0 10
”表示“
检索前10个结果”


while
”循环中的“
db\u fetch\u object
”检索每个结果并将其存储在变量“
$o
”中,该变量是一个对象

因此“
$o->title
”包含SQL查询检索到的“
title
”列的值


函数“
l
”是为HTML链接创建代码的drupal函数:第一个参数是链接的名称,第二个参数是drupal路径:在drupal中,默认情况下可以使用“
www.yoursite.com/node/NodeID
”访问任何节点, 这就是为什么它给出路径“
node/123
”(其中
123
是“
节点ID
”)


此函数非常有用,因为它可以透明地处理自定义路径,因此如果您的节点有一个自定义路径来访问它,请改用“
www.yoursite.com/my great page
”,它将自动创建指向该页面的链接,而不是“
www.yoursite.com/node/123
”。

简短版本:

获取节点的标记数组,检索至少使用其中一个标记的前10个节点,并为这10个结果中的每个结果输出链接


详细版本:

首先,变量“
$node
”是包含特定节点(例如页面或故事节点)数据的对象。 例如,“
$node->title
”将是该节点的标题


$node->taxonomy
”测试节点是否被标记(因为如果它没有标记,则无法使用相同的标记检索其他节点)。 当有一个或多个标记与该节点/页面/故事关联时,
$node->taxonomy
是一个
数组


现在,关于SQL查询: “
node
”是存储每个节点的基本字段(非CCK)的数据库表。 “
term\u node
”是包含标记(称为“
taxonomy term
”)和节点组合的数据库表


在这两个表中,“
nid
”是“
unique Node ID
”(这是一个内部自动递增的数字)。由于此列在两个表中,因此这是将表连接在一起的方式

在“
term\u node
”中,“
tid
”是“
唯一术语ID
”(也是一个内部自动递增的数字)


node
”表的别名为“
n
”,因此“
n.nid
”表示“
表节点中存储的节点ID”<