Drupal:为文本字段添加自动填充以获取自定义内容类型

时间:2014-12-13 10:47:37

标签: drupal autocomplete

我添加了自定义内容类型“属性”(如建筑物中)。我在此内容类型中添加了一个文本字段。在 / 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)。

0 个答案:

没有答案