2012-09-06 18 views
0

我試圖建立自己的節點引用自定義字段 - 我知道的幾個項目在那裏已經做到這一點,我爲了學習建設這個... :)自定義字段autcomplete

我的問題是自動完成路徑,它沒有被觸發,我已經檢查了noderefcreate項目並基於該項目實施了我的解決方案。但仍然;當我檢查螢火蟲時沒有任何東西被觸發。

這裏是我的代碼:

function nodereference_field_widget_info() { 
    return array(
    'nodereference_nodereference_form' => array(
     'label' => t('Node Reference Form'), 
     'field types' => array('nodereference'), 
     'behaviors' => array(
     'multiple values' => FIELD_BEHAVIOR_DEFAULT, 
     'default value' => FIELD_BEHAVIOR_DEFAULT, 
    ), 
     'settings' => array(
     'autocomplete_match' => 'contains', 
     'autocomplete_path' => 'nodereference/autocomplete', 
    ), 
    ), 
); 
} 

function nodereference_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { 
    if ($instance['widget']['type'] == 'nodereference_nodereference_form') { 
    $widget = $instance['widget']; 
    $settings = $widget['settings']; 

    $element += array(
     '#type' => 'textfield', 
     '#default_value' => isset($items[$delta]['nid']) ? $items[$delta]['nid'] : NULL, 
     '#autocomplete_path' => $instance['widget']['settings']['autocomplete_path'], 
    ); 
    } 

    return array('nid' => $element); 
} 

回答

0

您需要定義從那裏汽車競爭將採取建議的方法。可以這樣做:

/** 
* implements hook_menu 
*/ 
function your_module_name_menu() { 
    $items['master_place/autocomplete'] = array(
    'page callback' => '_your_module_name_autocomplete', 
    'access arguments' => array('access example autocomplete'), 
    'type' => MENU_CALLBACK 
); 
    return $items; 
} 

/** 
* Auto complete method implementation 
* @param $string 
*/ 
function _your_module_name_autocomplete($string) { 
    $matches = array(); 

    // Some fantasy DB table which holds cities 
    $query = db_select('target_db_table', 'c'); 

    // Select rows that match the string 
    $return = $query 
    ->fields('c', array('target_column')) 
    ->condition('c.target_column', '%' . db_like($string) . '%', 'LIKE') 
    ->range(0, 10) 
    ->execute(); 

    // add matches to $matches 
    foreach ($return as $row) { 
    $matches[$row->city] = check_plain($row->city); 
    } 

    // return for JS 
    drupal_json_output($matches); 
}