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 相关文章推荐
我的论坛源代码(六)
Oct 09 PHP
简单的页面缓冲技术
Oct 09 PHP
php下使用SMTP发邮件的代码
Jan 10 PHP
php 深入理解strtotime函数的使用详解
May 23 PHP
解析php中heredoc的使用方法
Jun 17 PHP
PHP中数据库单例模式的实现代码分享
Aug 21 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
Nov 17 PHP
PHP远程调试之XDEBUG
Dec 29 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
Mar 17 PHP
php生成网页桌面快捷方式
May 05 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 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中获取变量的变量名的一段代码的bug分析
2011/07/07 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
深入理解React中何时使用箭头函数
2017/08/23 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
python实现井字棋小游戏
2020/03/04 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
2020/11/01 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
UGG英国官方网站:UGG UK
2018/02/08 全球购物
英国票务网站:Ticketmaster英国
2018/08/27 全球购物
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
软件测试英文面试题
2012/10/14 面试题
政法大学毕业生自荐信范文
2014/01/01 职场文书
局火灾防控工作方案
2014/05/25 职场文书
三年级学生评语大全
2014/12/26 职场文书
国庆阅兵观后感
2015/06/15 职场文书
大学生实习证明
2015/06/16 职场文书
领导新年致辞2016
2015/07/29 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书