在Drupal内容类型中使用数据库自​​动完成字段

时间:2012-05-03 17:15:42

标签: php sql database drupal drupal-7

我开始使用模块Field Group和Field Collection创建一个新的内容类型,它已经工作了!

但是,我想在我的表单中添加自动填充字段,但我找不到如何执行此操作。也许使用hook_form_alter但是我无法在我的字段集合中添加自定义字段。

你知道怎么做吗?

非常感谢

PS:我使用D7

2 个答案:

答案 0 :(得分:3)

要向from字段添加auto_complete,您需要执行以下操作:

1st:使用hook_for_alter()将auto_complete路径添加到文本字段

function YOUR_MODULE_form_alter(&$form, &$form_state, $form_id)
{
    if($form_id == "YOUR-CONTENT-TYPE_node_form")
    {
        $form['field_YOUR-FIELD']['und'][0]['value']['#autocomplete_path'] = 'my-module/autocomplete/path';
    }
}

第二:使用hook_menu()将您作为#autocomplete_path属性传递给字段的菜单回调定义为

function YOUR_MODULE_menu()
{
    $items = array();
    $items['my-module/autocomplete/path'] = array(
    'page callback'     => 'your_module_autocomplete_callback',
    'access callback'   => TRUE,
    'weight'            => 1,
    'type'              => MENU_CALLBACK,
    );
    return $items;
}

第3个和最后一个:添加菜单回调函数,该函数将项目返回到文本字段

function your_module_autocomplete_callback($string)
{
    $items = array();
    $query = db_select('node', 'n');
    $value = $query->fields('n', array('title'));
    $value = $query->condition(db_and()->condition('n.type', 'YOUR_CONTENT_TYPE')->condition('title', '%' . db_like($string) . '%', 'LIKE'))->orderRandom()->execute();

    $i = 0;
    foreach ($value as $val)
    {
        $items[$val->name] = check_plain($val->name);
    }
    print drupal_json_output($items);
    exit();
}

希望这有帮助......穆罕默德。

答案 1 :(得分:1)

适合多个字段的更新代码。

function YOUR_MODULE_form_alter(&$form, &$form_state, $form_id)
{
    if($form_id == "YOUR-CONTENT-TYPE_node_form")
    {
        foreach($form['field_match']['und'][0]['field_adversaires']['und'] as $k =>$v)
        {
            if(is_numeric($k))
            {
                $form['field_match']['und'][0]['field_adversaires']['und'][$k]['value']['#autocomplete_path'] = 'basketfacile_type/autocomplete';
            }
        }
    }
}

希望它对你有用......穆罕默德。