在内容类型的nodereference字段中,是否可以显示使用自动完成结果添加的内容类型名称?

时间:2014-11-06 05:55:20

标签: drupal drupal-6 drupal-modules

在内容类型的nodereference字段中,是否可以显示使用自动填充结果添加的内容类型名称?

示例:

我有一个名为Article的内容类型,它有一个节点引用字段(相关内容 - > field_related_documents),因此本文将引用其他节点。

创建文章时,输入“帮助”#39; in' field_related_documents'我正在获得自动完成结果(引用节点的标题),如下所示

helpsystems - rules 
Decision management Help
Using help menu
Help support glossary

相反,我喜欢显示如下结果

Page | helpsystems - rules
HelpSystems | Decision management Help
Page | Using help menu
Document | Help support glossary

ie)自动完成结果应显示添加了其相关内容类型的其他节点的标题。

我应该如何实现这一目标?是否有任何可用的模块可用于实现此目的?

2 个答案:

答案 0 :(得分:0)

我创建了一个新的自定义Module nodereference_patch with hook hook

/*
 * Altering nodereference/autocomplete menu using menu alter
 */
function nodereference_patch_menu_alter(&$items) {
  $items['nodereference/autocomplete']['page callback'] = 'nodereference_patch_new_nodereference_autocomplete';
}

然后,我将nodereference_autocomplete函数复制到您的自定义模块中,将其名称更改为nodereference_patch_new_nodereference_autocomplete。

然后我更改了这一行:

$matches[$row['title'] ." [nid:$id]"] = '<div class="reference-autocomplete">'. $row['rendered'] . '</div>';

$matches[$row['type'] . " | " . $row['title'] . " [nid:$id]"] = '<div class="reference-autocomplete">' . $row['type'] . " | " . $row['rendered'] . '</div>';

我将_nodereference_potential_references函数从nodereference.module复制到自定义模块,并将其重命名为_nodereference_patch_potential_references

然后我将以下行更改为

$references = _nodereference_potential_references_standard($field, $string, $match, $ids, $limit);

$references = _nodereference_patch_potential_references_standard($field, $string, $match, $ids, $limit);

我将_nodereference_potential_references_standard从nodereference.module复制到自定义模块,并将其重命名为_nodereference_patch_potential_references_standard

然后我添加了&#39;键入&#39;元素到$ references []。 ie)从

更改了以下数组
$references[$node->nid] = array(
    'title' => $node->node_title,
    'rendered' => check_plain($node->node_title),
);

$references[$node->nid] = array(
    'title' => $node->node_title,
    'type' => $node->node_type,
    'rendered' => check_plain($node->node_title),
);

答案 1 :(得分:0)

我更倾向于使用不同的方法,使用类似的方法,而不是复制整个模块并重命名,我创建一个新的menu_hook和form_alters来更新自动完成路径。

如果您正在使用实体引用而不是节点引用,则可以使用视图来显示内容,而不是我的首选路由,但会减少自定义代码的数量。快速谷歌的演示提供了以下视频(http://codekarate.com/daily-dose-of-drupal/using-views-entity-reference-module-drupal-7

另外,只是注意,如果您打算像上面的回答一样复制模块,我强烈建议从模块信息文件中删除一些行。以下信息&#39 ;; drupal.org打包脚本添加的信息&#39;信息文件中的信息被更新模块使用,并增加了原始模块替换此新模块的风险。