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模板技术[转]
Jan 04 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
php文档更新介绍
Jul 22 PHP
php防止sql注入代码实例
Dec 18 PHP
php中session与cookie的比较
Jan 27 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
php计算函数执行时间的方法
Mar 20 PHP
php 无限分类 树形数据格式化代码
Oct 11 PHP
常用PHP封装分页工具类
Jan 14 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
php apache开启跨域模式过程详解
Jul 08 PHP
详解Laravel服务容器的绑定与解析
Nov 05 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文件缓存方法总结
2016/03/16 PHP
PHP全功能无变形图片裁剪操作类与用法示例
2017/01/10 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
jquery得到iframe src属性值的方法
2014/09/25 Javascript
初始Nodejs
2014/11/08 NodeJs
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
JS中setTimeout的巧妙用法前端函数节流
2016/03/24 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
玩转vue的slot内容分发
2018/09/22 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
微信小程序如何自定义table组件
2019/06/29 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
python通过加号运算符操作列表的方法
2015/07/28 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
python实现简易动态时钟
2018/11/19 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
动态设置django的model field的默认值操作步骤
2020/03/30 Python
Python configparser模块常用方法解析
2020/05/22 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
医院辞职信范文
2014/01/17 职场文书
文员岗位职责范本
2014/03/08 职场文书
2015元旦标语横幅
2014/12/09 职场文书
车位出租协议书范本
2016/03/19 职场文书
用Python生成会跳舞的美女
2022/01/18 Python
mysql查询结果实现多列拼接查询
2022/04/03 MySQL
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技