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面向对象——访问修饰符介绍
Nov 08 PHP
PHP 异步执行方法,模拟多线程的应用分析
Jun 03 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
php使用递归函数实现数字累加的方法
Mar 16 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
Apr 17 PHP
PHP获取文件夹大小函数用法实例
Jul 01 PHP
ThinkPHP路由详解
Jul 27 PHP
PHP filesize函数用法浅析
Feb 15 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 PHP
PHP+MySQL实现在线测试答题实例
Jan 02 PHP
关于PHP中interface的用处详解
Jul 26 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
Nov 27 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
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
Javascript 实用小技巧
2010/04/07 Javascript
js控制表单操作的常用代码小结
2013/08/15 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
HTML5 canvas 9绘制图片实例详解
2016/09/06 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
python爬虫之百度API调用方法
2017/06/11 Python
Python实现的双色球生成功能示例
2017/12/18 Python
python实现播放音频和录音功能示例代码
2018/12/30 Python
python数组循环处理方法
2019/08/26 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
浅析Python 条件控制语句
2020/07/15 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
英国最大的户外商店:Go Outdoors
2019/04/17 全球购物
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
酒店总经理助理岗位职责
2014/02/01 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
无违反计划生育证明格式
2015/06/24 职场文书
Nginx服务器如何设置url链接
2021/03/31 Servers
Python实现生成bmp图像的方法
2021/06/13 Python