Drupal7 form表单二次开发要点与实例


Posted in PHP onMarch 02, 2014

请记得收藏此文,在你进行Drupal 7 custom module时,经常会用到的form 表单的跳转或重载。

主要汇总三个要点:

1.页面提交后,经过#submit处理后,需要redirect 跳转到另外一个页面。
2.url路径中存在destination参数时,页面直接跳转到destination所指的url,无法控制的问题。
3.form表单如何实现multiple steps forms 多个步骤,或者表单提交后,如何在表单获取到提交上来的值。

一、Form 表单 redirect(跳转)到另外一个页面

$form_state['redirect'] 的值可以是字符串或者数组,值通过url后,生成跳转地址。

$form_state['redirect'] = array(
  'node/123',
  array(
    'query' => array(
      'foo' => 'bar',
    ),
    'fragment' => 'baz',
}
//页面将会跳转到 node/123?foo=bar#baz
$form_state['redirect'] = 'node/123'
//页面将会跳转到 node/123

如果不指定$form_state['redirect'] 的值,默认跳转到当前页面。drupal_goto(current_path(), array(‘query' => drupal_get_query_parameters())); API中是这样执行的。

二、Form 表单 destination(目的地)被指定时也可以改变跳转的地址

在drupal_goto 函数中,你可以看到如果url路径中存在destination参数,页面直接就到destination所指向的链接,导致某些表单下的多个按钮提交后,本应redirect 跳转的页面也不尽不同。

于是在form的#submit 函数中,某些操作时可以直接删除掉destination。

if (isset($_GET['destination'])) {
  $form_state['redirect'] = array('next_step_page_url', array('query' => drupal_get_destination()));
  unset($_GET['destination']);
}

我采取的方法是,重新定义一个url并继续传递destination,但是将$_GET中的destination删除掉。但是一般还是会经常用到destination这个目的地的跳转。

三、Form 表单 实现multiple steps多个步骤,Form表单重载,获取Form提交的值

这些问题其实归根到底都是一个意思,就是让表单继续提交下去。而不是刷新页面。只需在form 表单的 #submit 函数中 执行以下代码:

if ($form_state['values']['op'] == t("Next Step")) {
  $form_state['rebuild'] = TRUE;
  $form_state['storage']['users'] = $form_state['values']['users'];
}

在form的define定义中即可获取到$form_state['storage']['users']这个值。

参考Drupal7 相关API函数:

drupal_redirect_form
drupal_goto
drupal_get_destination

PHP 相关文章推荐
PHP DataGrid 实现代码
Aug 12 PHP
PHP初学者常见问题集合 修正版(21问答)
Mar 23 PHP
php打印一个边长为N的实心和空心菱型的方法
Mar 02 PHP
如何使用PHP对网站验证码进行破解
Sep 17 PHP
Yii使用技巧大汇总
Dec 29 PHP
PHP中如何防止外部恶意提交调用ajax接口
Apr 11 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
PHP分享图片的生成方法
Apr 25 PHP
微信小程序发送订阅消息的方法(php 为例)
Oct 30 PHP
PHP7 标准库修改
Mar 09 PHP
Drupal7中常用的数据库操作实例
Mar 02 #PHP
php设计模式之命令模式使用示例
Mar 02 #PHP
php接口和抽象类使用示例详解
Mar 02 #PHP
php通过字符串调用函数示例
Mar 02 #PHP
php多维数组去掉重复值示例分享
Mar 02 #PHP
PHP 函数call_user_func和call_user_func_array用法详解
Mar 02 #PHP
PHP 字符串长度判断效率更高的方法
Mar 02 #PHP
You might like
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
python比较2个xml内容的方法
2015/05/11 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
期末总结的个人自我评价
2013/11/02 职场文书
银行演讲稿范文
2014/01/03 职场文书
房屋改造计划书
2014/01/10 职场文书
幼儿园大班新学期寄语
2014/01/18 职场文书
致跳高运动员加油稿
2014/02/12 职场文书
《影子》教学反思
2014/02/21 职场文书
国窖1573广告词
2014/03/21 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
英语教师个人工作总结
2015/02/09 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书