我有一个节点“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);
}
}
答案 0 :(得分:1)
我想你想要References Module(为Drupal 7提供节点和用户参考字段)
道歉我没有正确阅读,你也想要Corresponding node reference module使节点参考成双向(在另一个答案中给出模块的D7版本)。
编辑以解决您的新代码:
我猜你从最近的问题中对Drupal很新,但无论哪种方式你(在我看来)都是最好的方法。如果你很乐意编写PHP代码(很多Drupal用户都没有),那么直接获取数据总是比使用可能有很多开销的贡献模块更有效。
一些小问题:
hook_node_load
函数内的自定义模块中,这样这些数据在节点的整个生命周期中都可用(这样你就可以重用它了)在许多不同的背景下)。但是,如果您不需要在模板文件中的任何地方重复使用此数据,那么它就可以了。field_revision_field_x
表而不是field_data_field_x
,这样您就可以利用修订系统并始终获取最新数据。 这是代码的略微编辑版本,考虑了正确的字段类型(未经测试但应该有效):
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);
}
}