2015-02-08 109 views
0

HTML表單這是代碼的一部分,我有問題,麻煩與在Drupal

if(user_is_logged_in()) 
{ 



    $cover='<form method="post"> 
<input type="text" name="tekst" /><input type="submit" id="add" value="Dodaj adres okładki" /> 
</form></td></tr>'; 


} 
     else 
     { 
      $cover=" "; 
     } 
     $description .= '<tr><td width="60px">Title</td><td>'.$this->getTytul().'</td><td rowspan="20" width="150px">'.$cover.'</td></tr>'; 

,我要運行查詢時,用戶點擊提交按鈕

db_query(「INSERT INTO okladki_publikacji( id_publikacji,adres_okladki)VALUES(「。$ this-> getId()。」,「。$ value_from_form。」)「);

,但我不知道如何做到這一點在Drupal 我想運行的功能與形式的行動,但怎麼說查詢? action = add_cover()不起作用

回答

1

Drupal有一個了不起的窗體API,可以幫助你輕而易舉地完成這種事情。

基本上你使用這個API定義一個表單,然後定義一旦用戶提交它就調用該函數,就是這樣。下面是如何定義表單的示例:

function myformname_form($form, &$form_state){ 

    // define the input field 
    $form['name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Dodaj adres okładki'), 
); 

    // define the submit button 
    $form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Apply'), 
); 

    return $form; 

} 

然後您定義一旦執行表單就會執行的函數。函數基本上必須被命名爲相同的「_submit」 - Drupal將在幕後執行魔術以將它們綁定在一起。

function myformname_form_submit($form, &$form_state){ 
    // and this will be where you execute the query you wanted. 

} 

會推薦安裝Devel module這樣你就可以檢查form_state變量 - 這就是輸入字段的值就越大。

現在,你可以只呈現表單上的代碼下面使用drupal_get_form這樣的:

$cover = " "; 
if(user_is_logged_in()) { 
    $form = drupal_get_form('myformname_form'); 
    $cover = render($form); 
} 
$description .= '<tr><td width="60px">Title</td><td>'.$this->getTytul().'</td><td rowspan="20" width="150px">'.$cover.'</td></tr>'; 

希望這有助於!

+0

謝謝,其實這是爲了讓我的形式最好的方式,但我需要渲染($形式)在該行 $描述。=「標題​​」 $。這 - > getTytul()「。'。render($ form)。''; 我嘗試了一切,但我的表單沒有呈現在那裏或是看不見的,我不知道爲什麼 – 2015-02-10 08:37:26

+0

嘿!調整回覆以將表單輸出到$ description字符串。假設你實際上打印出了某個地方的$ description字符串,對嗎? – Alberto 2015-02-12 07:44:13

+0

我已經解決了我的問題。我創建了使我的形式和功能的模塊。渲染窗體我使用drupal_render()而不是渲染(),它工作正常 感謝您的幫助:) – 2015-02-17 20:26:41