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(3)
Oct 09 PHP
PHP学习之PHP变量
Oct 09 PHP
PHP 数组教程 定义数组
Oct 23 PHP
Mysql数据库操作类( 1127版,提供源码下载 )
Dec 02 PHP
简单的PHP缓存设计实现代码
Sep 30 PHP
php重定向的三种方法分享
Feb 22 PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 PHP
用php简单实现加减乘除计算器
Jan 06 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
May 12 PHP
php 在线导入mysql大数据程序
Jun 11 PHP
php自定义函数实现JS的escape的方法示例
Jul 07 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
Sep 17 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连接MongoDB示例代码
2012/09/06 PHP
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
php使用curl代理实现抓取数据的方法
2017/02/03 PHP
PHP实现一个多功能购物网站的案例
2017/09/13 PHP
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
python正则表达式中的括号匹配问题
2014/12/14 Python
Python中的迭代器漫谈
2015/02/03 Python
python实现linux下使用xcopy的方法
2015/06/28 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
详解Python字典的操作
2019/03/04 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
Python socket聊天脚本代码实例
2020/01/02 Python
Python项目跨域问题解决方案
2020/06/22 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
Bluebella德国官网:英国性感内衣和睡衣品牌
2019/11/08 全球购物
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
C#面试常见问题
2013/02/25 面试题
2014自主招生自荐信策略
2014/01/27 职场文书
大二学生职业生涯规划书
2014/02/05 职场文书
公司经理任命书
2014/06/05 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
JS中如何优雅的使用async await详解
2021/10/05 Javascript
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python