You are here

添加数据输入表单(3)

   我们最后要做的就是创建表单,并把它添加到$node对象中。首先,我们需要定义一个表单,这样我们就有了要添加的东西。我们将在annotate.module中的一个单独的函数中完成这件事,它唯一的责任就是定义表单:

/**
* Define the form for entering an annotation.
*/
function annotate_entry_form($form_state, $node) {
    // Define a fieldset.
    $form['annotate'] = array(
        '#type' => 'fieldset',
        '#title' => t('Annotations'),
    );
 
    // Define a textarea inside the fieldset.
    $form['annotate']['note'] = array(
        '#type' => 'textarea',
        '#title' => t('Notes'),
        '#default_value' => isset($node->annotation) ? $node->annotation : '',
        '#description' => t('Make your personal annotations about this content              here. Only you (and the site administrator) will be able to see them.')
    );
 
    // For convenience, save the node ID.
    $form['annotate']['nid'] = array(
        '#type' => 'value',
        '#value' => $node->nid,
    );
 
    // Define a submit function.
    $form['annotate']['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Update'),
    );
    return $form;
}
 
    这个函数有两个参数。第一个参数是$form_state,Drupal会将它自动的传递给所有的表单函数。我们现在先把它忽略掉;更多详细,可参看第10章,那里是专门讨论表单API的。第2个参数是$node对象,我们在前面的nodeapi钩子实现中,将它传递给了drupal_get_form()。
 
       我们创建表单的方式,和我们在函数annotate_admin_settings()中使用的一样,都是创建一个键值数组----只是这次我们想把文本输入框和提交按钮放到一个字段集中,这样在web页面中就能将它们组织到一块了。首先,我们创建一个数组,将它的#type设为‘fieldset’,并为它提供一个标题。然后我们创建一个描述文本域(textarea)的数组。注意,textarea数组的键是fieldset数组中的一员。换句话说,我们使用$form['annotate']['note']替换了$form['note']。这样,Drupal将把这个文本域元素当作字段集元素中的一员。最后,我们创建了提交按钮,然后返回了我们的表单数组。
 
  现在让我们回到annotate_nodeapi()上,通过向节点的内容添加一个值和一个重量,我们将表单添加到了页面的内容上。值包含了要显示的内容,重量告诉Drupal把它显示到哪里,这里的位置是相对于节点中其它的内容的。我们想把注释表单放到页面的下面,所以我们为它分配了一个相对较大的重量10.我们要显示的是我们的表单,所以我们调用函数drupal_get_form(),以将我们的表单从一个描述如何创建它的数组转化为最终的HTML表单。注意,在这里我们是如何将$node对象传递给表单函数的;我们需要使用它来得到以前的注释以预先填充表单。
在你的web浏览器中,创建并查看一个Page节点,你应该可以看到添加在节点后面的注释表单了(如图2-2所示):
     2-2出现在drupal web 页面上的注释表单
 

  当我们点击更新按钮时,将会发生什么呢?什么都没有,因为我们还没有为输入的表单内容编写任何逻辑代码呢。现在就让我们添加它。但是在我们继续以前,我们需要考虑一下,我们将把用户输入的数据存储到哪里呢?

老葛的Drupal培训班 Think in Drupal

Drupal版本:

评论