我添加了自定义内容类型“属性”(如建筑物中)。我在此内容类型中添加了一个文本字段。在 / admin / structure / types / manage / property / fields ,此字段显示为:
Label: Property Region
Machine Name: field_property_region
Field Type: Text
Widget: Text field
当管理员用户添加新属性时,我希望此字段使用其他Property节点中的现有值显示自动完成建议。但是,当我加载表单页面时,文本输入中没有显示自动完成圈,输入时没有显示建议。
这就是我所做的(在 modules / custom / hr_misc.module 中):
function hr_misc_form_alter(&$form, &$form_state, $form_id)
{
if($form_id == "property_node_form"){
$form['field_property_region']['#autocomplete_path'] = 'hr_misc/autocomplete/property_regions';
dpm($form['field_property_region']);
}
}
当我加载表单时(在 / node / add / property ),将显示dpm()调试输出,并按预期包含#autocomplete_path值。
function hr_misc_menu() {
$items['hr_misc/autocomplete/property_regions/%'] = array(
'page callback' => '_hr_misc_autocomplete_property_regions',
'access callback' => TRUE,
'page arguments' => array(3),
'weight' => 1,
'type' => MENU_CALLBACK,
);
return $items;
}
我见过的大多数示例都不包含通配符或传递page_arguments。一个人做了,我认为应该这样,所以我把它包括在内。我尝试了两种方法。如果我访问
http://mysite/hr_misc/autocomplete/property_regions/Lond
我看到了JSON输出:
{"London":"London"}
JSON由以下函数生成:
function _hr_misc_autocomplete_property_regions($string)
{
$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node')
->propertyCondition('type', 'property')
->fieldCondition('field_property_region', 'value', '%'. $string.'%', 'LIKE');
$result = $query->execute();
$nodes = $result['node'];
// Get all fields attached to a given node type
$fields = field_info_instances('node', 'property');
// Get id of body field
$field_id = $fields['field_property_region']['field_id'];
// Attach a field of selected id only to get value for it
field_attach_load('node', $nodes, FIELD_LOAD_CURRENT, array('field_id' => $field_id));
$items = array();
foreach ($nodes AS $nid => $node) {
$region = $node->field_property_region[LANGUAGE_NONE][0]['value'];
$items[$region] = $region;
}
print drupal_json_output($items);
exit();
}
我很茫然。有很多关于添加自动填充字段的文章,他们似乎都说这就是你所需要的。我需要添加其他东西吗?我的节点的“author”字段自动填充就好了,我没有看到任何错误(JS或PHP)。