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一些服务器端特性的配置加强php的安全
Oct 09 PHP
用PHP将数据导入到Foxmail
Oct 09 PHP
php中常用编辑器推荐
Jan 02 PHP
一步一步学习PHP(2)――PHP类型
Feb 15 PHP
解析posix与perl标准的正则表达式区别
Jun 17 PHP
浅析PHP的ASCII码转换类
Jul 05 PHP
学习php开源项目的源码指南
Dec 21 PHP
php简单socket服务器客户端代码实例
May 18 PHP
php强制用户转向www域名的方法
Jun 19 PHP
php+mysql实现的二级联动菜单效果详解
May 10 PHP
详解Laravel设置多态关系模型别名的方式
Oct 17 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
Feb 11 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中使用正则表达式进行查找替换
2013/06/13 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
Jquery常用技巧收集整理篇
2010/11/14 Javascript
js 函数的副作用分析
2011/08/23 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
localStorage实现便签小程序
2016/11/28 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
python服务器与android客户端socket通信实例
2014/11/12 Python
python实现井字棋游戏
2020/03/30 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
Python基于yield遍历多个可迭代对象
2020/03/12 Python
python爬虫容易学吗
2020/06/02 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
联想英国官网:Lenovo英国
2019/07/17 全球购物
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL
django 认证类配置实现
2021/11/11 Python
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle