2015-02-08 113 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