0

私は自分のノード参照カスタムフィールドを構築しようとしています-私はそこにあるいくつかのプロジェクトがすでにこれを行っていることを知っています、私は学ぶためにこれを構築しています... :)

私の問題はオートコンプリートパスです。トリガーされていません。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);
}
4

1 に答える 1

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);
}
于 2013-02-19T16:25:51.387 に答える