引用节点显示引用

时间:2011-10-10 16:11:34

标签: drupal drupal-7

我有一个节点“Bug / Requests”,它引用了一个“Project”。

在项目“节点”页面上,我想显示链接到该项目的错误/请求列表。这可能吗?

这是我最终如何做到的:

这是好还是坏?有没有更好的办法? (在template.php中)

<?php
function digital_preprocess_node(&$vars)
{
    $node = $vars['node'];

    if ($node->type == 'project' ) 
    {
        $bugs_requests_nids = array();
        $query = 'SELECT entity_id FROM field_data_field_project WHERE field_project_nid = :project_nid';
        $result = db_query($query, array(':project_nid' =>$node->nid));
        foreach($result as $row)
        {
            $bugs_requests_nids[] = $row->entity_id;
        }

        $vars['tasks'] = node_load_multiple($bugs_requests_nids);
    }
}

1 个答案:

答案 0 :(得分:1)

我想你想要References Module(为Drupal 7提供节点和用户参考字段)

道歉我没有正确阅读,你也想要Corresponding node reference module使节点参考成双向(在另一个答案中给出模块的D7版本)。

编辑以解决您的新代码:

我猜你从最近的问题中对Drupal很新,但无论哪种方式你(在我看来)都是最好的方法。如果你很乐意编写PHP代码(很多Drupal用户都没有),那么直接获取数据总是比使用可能有很多开销的贡献模块更有效。

一些小问题:

  1. 我会考虑将代码从模板文件中移出到hook_node_load函数内的自定义模块中,这样这些数据在节点的整个生命周期中都可用(这样你就可以重用它了)在许多不同的背景下)。但是,如果您不需要在模板文件中的任何地方重复使用此数据,那么它就可以了。
  2. 如果您要直接进入字段表,则应该使用field_revision_field_x表而不是field_data_field_x,这样您就可以利用修订系统并始终获取最新数据。
  3. 由于字段可以附加到多个实体类型,因此您应该确保为正确的实体获取正确的字段数据(您可能不打算将此字段附加到任何其他节点/实体,但如果您这样做是好的做法做)。
  4. 这是代码的略微编辑版本,考虑了正确的字段类型(未经测试但应该有效):

    function digital_preprocess_node(&$vars) {
      $node = $vars['node'];
    
      if ($node->type == 'project' ) {
        $bugs_requests_nids = db_select('field_revision_field_project', 'p')
          ->fields('p', array('entity_id'))
          ->condition('entity_type', 'node')
          ->condition('bundle', 'project')
          ->condition('entity_id', $node->nid)
          ->condition('revision_id', $node->vid)
          ->execute()
          ->fetchCol();
    
        $vars['tasks'] = node_load_multiple($bugs_requests_nids);
      }
    }