由于主体字段是一个textarea,并且对于节点主体字段可以使用过滤器格式,所以上面的表单中包含Drupal的标准内容过滤器,代码如下(过滤转换文本;使用过滤器的更多信息,可参看第11章):
$form['body_filter']['filter'] = filter_form($node->format);
$node->format属性,指的是本节点body字段所用的过滤器格式的ID.这个属性存储在node_revisions表中。 如果你想让笑话妙语字段也可以使用过滤器格式,那么你就需要找个地方来存储该字段所用过滤器的信息.一个比较好的解决方案是, 在你的数据库表joke中再添加一个名为punchline_format的整数列, 来为每个笑话妙语存储过滤器格式。
接着,将你的最后一个表单字段的定义修改成如下所示的形式:
$form['punchline']['field'] = array(
'#type' => 'textarea',
'#title' => t('Punchline'),
'#required' => TRUE,
'#default_value' => $node->punchline,
'#weight' => 5
);
// Add filter support.
$form['punchline']['filter'] = filter_form($node->punchline_format);
当你使用的是一个节点表单而不是一个普通表单时,node.module将处理节点表单中它所知道的默认字段的验证和存储工作(比如title和body字段---我们把后者改名为了Joke,但是节点模块仍然会把它作为节点主体字段进行处理);节点模块为你(开发者)提供了多个钩子,用来验证和存储你的自定义字段。
接下来我们将讨论这些钩子函数。
老葛的Drupal培训班 Think in Drupal