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 相关文章推荐
第二节 对象模型 [2]
Oct 09 PHP
利用discuz实现PHP大文件上传应用实例代码
Nov 14 PHP
PHP 模拟$_PUT实现代码
Mar 15 PHP
php设计模式 Observer(观察者模式)
Jun 26 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
Sep 28 PHP
分享10段PHP常用代码
Nov 11 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
Paypal实现循环扣款(订阅)功能
Mar 23 PHP
Symfony2针对输入时间进行查询的方法分析
Jun 28 PHP
PhpStorm配置Xdebug调试的方法步骤
Feb 02 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
html中select语句读取mysql表中内容
2006/10/09 PHP
网站用php实现paypal整合方法
2010/11/28 PHP
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
2019/12/02 PHP
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
JavaScript判断DIV内容是否为空的方法
2016/01/29 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
angular动态表单制作
2018/02/23 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
Python中apply函数的用法实例教程
2014/07/31 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
校园公益广告语
2014/03/13 职场文书
医德医风自我评价2015
2015/03/03 职场文书
银行求职信范文
2019/05/13 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS