2011-03-27 132 views
0

我有這段代碼來動態地在drupal中創建一個選擇列表。選擇列表允許值

$res = db_query("select field1 from content_type_1"); 
while($row = db_fetch_array($res)){ 
$rows[] =$row['field1']; 
} 
return $rows; 

輸出是這樣的:

<select> 
<option value="0">row['field1']</option> 
</select> 

我需要這樣的

<select> 
<option value="row['field1']">row['field1']</option> 
</select> 

輸出如何做到這一點?

回答

0

不知道這件事,但我想,Drupal的:

  • 使用數組爲value屬性的關鍵,
  • 並使用數組作爲<option>的內容的價值。

如果是這種情況,改變你的循環,這可能幫助:

while($row = db_fetch_array($res)){ 
    $rows[ $row['field1'] ] = $row['field1']; 
} 

現在,對於$rows陣列的每個項目,關鍵是一樣的價值。

+0

謝謝帕斯卡爾馬丁。它也適用於drupal。 – user677900 2011-03-27 09:34:55

+0

偉大的:-)很高興我能幫上忙。玩的開心 ! – 2011-03-27 09:37:52

0

現在肯定的,但大多數從數據庫中選擇我的看日誌是這樣的:

<select name="cctype"> 
    <option value="" selected = "Selected" >Pick one</option> 
<?PHP 
while($row = db_fetch_array($res)) { 
    echo (' <option value="'.$row["field1"].'">'.$row["field1"].'</option>'); 
} 
?> 
</select> 

希望幫助。

銀虎

+0

drupal php代碼需要返回一個數組。看我的代碼。謝謝。 – user677900 2011-03-27 09:33:45

1

要「Drupal的兼容」,你的代碼應該遵循編寫SQL查詢的「Drupal的方式。」

您需要使用{...}周圍的SQL表的名稱(這讓Drupal能夠在需要時添加前綴),你應該使用

$res = db_query("select field1 from {content_type_1}"); 
while ($row = db_fetch_array($res)) { 
    $rows[] =$row['field1']; 
} 

然後,對於任何形式的現場,你應該使用form APIselect語句)

因此,代碼應該是這樣的:

function mymodule_form(&$form_state) { 
    $form['mySelect'] = array(
    '#type' => 'select', 
    '#title' => t('A title'), 
    '#default_value' => '', 
    '#options' => get_rows(); 
); 
    return $form 
} 

function get_rows() { 
    $res = db_query("select field1 from {content_type_1}"); 
    while ($row = db_fetch_array($res)) { 
    $rows[] = $row['field1']; 
    } 
return $rows; 
} 

/* .. more code if needed .. */ 
// Then you can print your form. 
// This should be called by a hook_menu or a theme() function ... not alone like here. 
echo drupal_get_form('mySelect'); 
+1

謝謝。我不需要一個表單。我有一個內容類型,它有一個選擇列表字段。我使用允許的值和php代碼來做到這一點。 – user677900 2011-03-27 12:33:42