欢迎各位兄弟 发布技术文章
这里的技术是共享的
表单提交 验证错误 表单字段有红色的警告框 但是错误信息不出来,是刷新或重新打开一个页面才出来 有大用 有大大用 有大大大用
经仔细查看,原来是在 page.tpl.php 中调用了 <?php drupal_get_form('ribao_data_form'); ?> 这个方法
正确的做法应该是
放在 区块中 (区块的block.tpl.php文件中或者,node.tpl.php中,应该也是正确的,但从未测试过),
或者 'page callback' 函数中 调用 drupal_get_form
我的做法是 hook_block(),然后 把 drupal_get_form('ribao_data_form'); 放在这个 hook 钩子函数里
代码如下:
1)第一种方法 自己亲自测试 成功
function shipingzhongcustomsixteen_block($op='list',$delta=0,$edit=array()){
if($op=='list'){
$blocks[0]['info'] = '上传excel日报表单';
return $blocks;
}
else if($op=='view'){
//$blocks['subject'] = '历史转交记录';
$blocks['content'] ='<div class="upload_ribao_file_form_outer">';
if($_GET['q'] == 'list_ribao_data_dazhong2'){
$blocks['content'] .= drupal_get_form('ribao_data_form',2);
}
else if($_GET['q'] == 'list_ribao_data_dazhong'){
$blocks['content'] .= drupal_get_form('ribao_data_form');
}
else if($_GET['q']=='list_bd_sh_gjz_rb'){
$blocks['content'] .= drupal_get_form('bd_gjz_ribao_data_form');
}
$blocks['content'] .='</div>';
return $blocks;
}
}
2) 第二种方法 未测试
(下面的例子是 drupal 7 ,,drupal 6 中代码可能有细微不同,但原理一样)问题在于,Drupal在处理表单时已经为当前请求设置了消息。为了使事情正常工作,请drupal_get_form
在template_preprocess_page中调用:
function myThemeOrModulename_preprocess_page(&$variables) {
// For node templates.
// $variables['node']->my_form = drupal_get_form('form_name');
// For page templates.
$variables['my_form'] = drupal_get_form('form_name');
}
然后在您的模板文件中呈现表单:
<?php print render($my_form); ?>
目前我不知道还有另一个原因,但是在同一函数中添加$variables['messages'] = theme('status_messages');
(请参阅theme_status_messages)preprocess_page
可以解决该问题。
此问题的根本原因
我最近在将D6网站迁移到D7时遇到了这个问题。尽管我发现这个讨论早就开始了,但我想强调此问题的根本原因,这样,即使遇到同一问题,也可以很容易地从中找到答案。
如果我们直接在任何特定的模板文件中使用drupal_get_form()函数,则会出现此问题,因为在单击按钮后生成验证消息之前,已加载了模板文件。该消息将在系统中保持活动状态(因为它存储在$ _SESSION中),直到被打印为止。这就是为什么在下一次重新加载时,变量$ message将消息打印在模板文件中。
要解决此问题,您必须创建一个块(忽略该块是否已创建)并在所需区域中分配该块(如果需要,在主题信息文件中创建一个区域)。如果需要,还可以使用hook_form_alter()。
登录或注册以发表评论