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 网络开发详解之远程文件包含漏洞
Apr 25 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 PHP
PHP安全防范技巧分享
Nov 03 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
Jun 21 PHP
php json转换成数组形式代码分享
Nov 10 PHP
php遍历目录方法小结
Mar 10 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
Mar 18 PHP
PHP运用foreach神奇的转换数组(实例讲解)
Feb 01 PHP
Laravel 加载第三方类库的方法
Apr 20 PHP
Laravel框架实现利用中间件进行操作日志记录功能
Jun 06 PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
Oct 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代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
js拦截alert对话框另类应用
2013/01/16 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
javascript之IE版本检测超简单方法
2016/08/20 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
vue.js学习之递归组件
2016/12/13 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
[53:15]Mineski vs iG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python中的字典详细介绍
2014/09/18 Python
Python模拟三级菜单效果
2017/09/11 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
python中pyplot基础图标函数整理
2020/11/10 Python
希尔顿酒店官方网站:Hilton Hotels
2017/06/01 全球购物
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
医药营销专业个人自荐信
2013/09/29 职场文书
超市理货员岗位职责
2014/07/04 职场文书
天猫活动策划方案
2014/08/21 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
篮球拉拉队口号
2015/12/25 职场文书