2011-12-15 19 views
0

私はまだ自分のdrupal 7モジュールで作業していますが、何か問題があります。私はドロップダウンオプション(選択)にデータベースの内容を読み込もうとしていますが、私はdrupalの例と同じコードを読み書きしていますが、データベースはまだロードされていません。 私のコードに間違ったことがあるのですか、drupalの例以外のドロップダウン・オプションにデータベースをロードする方法がありますか?ここデータベースコンテンツをドロップダウンオプションに読み込む方法(選択)

私はあなたがちょうどあなたのselect要素に#optionsキーを追加するために忘れてしまった

function prod_entry_load($entry = array()) { 
    $select = db_select('aa_1122','aa'); 
    $select->fields('aa'); 

    foreach ($entry as $field => $value) { 
    $select->condition($field, $value); 
    } 
    return $select->execute()->fetchAll(); 
} 

function prod(){ 
    return drupal_get_form('prod_form'); 
} 
function prod_form($form_state){ 
    $form = array(
     '#prefix' => '<div id="updateform">', 
     '#suffix' => '</div>', 
); 

    $entries = prod_entry_load(); 
    $keyed_entries = array(); 
    if (empty($entries)) { 
    $form['no_values'] = array(
     '#value' => t("No entries exist in the table dbtng_example table."), 
    ); 
    return $form; 
    } 

    foreach ($entries as $entry) { 
    $options[$entry->no] = t("@no: @name ", array('@no' => $entry->no, '@name' => $entry->name)); 
    $keyed_entries[$entry->no] = $entry; 
    } 
    $default_entry = !empty($form_state['values']['no']) ? $keyed_entries[$form_state['values']['no']] : $entries[0]; 

    $form_state['entries'] = $keyed_entries; 

    $form['no'] = array(
    '#type' => 'select', 
    '#title' => t('Choose'), 
    '#default_value' => $default_entry->no, 
    '#ajax' => array(
     'wrapper' => 'updateform', 
     'callback' => 'prod_form_update_callback', 
    ), 
); 
    $form['submit'] = array(
    '#type' => 'submit', 
    '#value' => 'Submit', 
    '#ajax' => array(
     'callback' => 'ajax_alert', 
    ), 
); 
    return $form; 
} 

function prod_form_update_callback($form, $form_state) { 
    $entry = $form_state['entries'][$form_state['values']['no']]; 
    foreach (array('name') as $item) { 
    $form[$item]['#value'] = $entry->$item; 
    } 
    return $form; 
} 

答えて

3

に取り組んでいるコード、コードは次のように読んでください。

$form['no'] = array(
    '#type' => 'select', 
    '#title' => t('Choose'), 
    '#default_value' => $default_entry->no, 
    '#options' => $options, // This is the bit that was missing 
    '#ajax' => array(
    'wrapper' => 'updateform', 
    'callback' => 'prod_form_update_callback', 
), 
); 

あなたができましたMySQLの文字列連結とdb fetchAllKeyed()メソッドの組み合わせを使用して、クエリ/オプションコードをわずかに短縮してください:

$query = db_select('aa_1122', 'aa')->fields('aa', array('no')); 
$query->addExpression("CONCAT(no, ': ', name)", 'display'); 
$options = $query->execute()->fetchAllKeyed(); 
+0

私はすべてをチェックしたと思ったとき、私はとても不注意だった。ありがとうクライヴ – Altic

関連する問題