Drupal7 form表单二次开发要点与实例

 这篇文章主要介绍了Drupal7 form表单二次开发要点与实例,解决了经常使用的Form表单提交后跳转问题,需要的朋友可以参考下

请记得收藏此文,在你进行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
 

时间: 2024-10-29 17:16:10

Drupal7 form表单二次开发要点与实例的相关文章

Drupal7 form表单二次开发要点与实例_php技巧

请记得收藏此文,在你进行Drupal 7 custom module时,经常会用到的form 表单的跳转或重载. 主要汇总三个要点: 1.页面提交后,经过#submit处理后,需要redirect 跳转到另外一个页面.2.url路径中存在destination参数时,页面直接跳转到destination所指的url,无法控制的问题.3.form表单如何实现multiple steps forms 多个步骤,或者表单提交后,如何在表单获取到提交上来的值. 一.Form 表单 redirect(跳转

Ajax提交Form表单及文件上传的实例代码_AJAX相关

前几天,发现了一些小问题.我在写后台管理页面时,需要上传一张图片.于是我就用很普通的Form表单上传有一段Json串和图片文件: Form表单上传图片只需要在<form>标签里加上enctype = 'multipart/form-data',这样是可以上传图片的: 但问题来了,在我进行用Form表单提交的时候直接跳出来提交返回值的页面并且原先的页面刷新: 这样我们可以先到异步的Ajax可以实现局部刷新: 废话不多说了 直接上代码: 首先是html: <form id = "f

jquery获取form表单input元素值的简单实例_jquery

一般取值方法 $("#id").val(); $("#id").attr("value");  //其中value是元素的属性名如<s:textfield  id="cifName" key="cifName"   name="#request.consBean.cifName" />的id,key,name属性.取到的值是属性后对应双引号里面的字符. function sa

Ajax提交Form表单及文件上传的实例代码

前几天,发现了一些小问题.我在写后台管理页面时,需要上传一张图片.于是我就用很普通的Form表单上传有一段Json串和图片文件: Form表单上传图片只需要在<form>标签里加上enctype = 'multipart/form-data',这样是可以上传图片的: 但问题来了,在我进行用Form表单提交的时候直接跳出来提交返回值的页面并且原先的页面刷新: 这样我们可以先到异步的Ajax可以实现局部刷新: 废话不多说了 直接上代码: 首先是html: <form id = "f

ExtJs 备忘录(2)—— Form表单(二) [ 控件封装 ]

前言 本以为可以稳稳当当的工作.安安心心的写文章,结果我做了一件非常疯狂的事情,换新工作一周后辞了--然后去了另外一家公司 - - #,理由就不详说了,总之现在是每天加班到8-9点,虽然如此但是这个团队非常棒,喜欢这里的气氛,大家都努力的工作着,经理也是常睡在公司,希望产品顺顺利利的月底上线,我也加油 !不过这样一来文章可能会慢点,挤挤时间吧:  ) 本篇主要是将对Ext常用控件和属性进行封装,以减少动辄几百行的JS代码,也方便使用. 系列 1. ExtJs 备忘录(1)-- Form表单(一)

jsp如何解决Form表单乱码问题

网站程序中的Form表单,是重要的组成内容之一,很多时候,Form表单会出现乱码的现象,会给网站造成一定的困扰.如何解决乱码的问题? JSP和Servlet的六种中文乱码处理方法 一.表单提交时出现乱码: 在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式.所以请求的时候便有get请求和post请求.每种方式都有着不同的解决方法,之所以出现乱码,原因就在于get请求时,其传递给服务器的数据是附加在URL地址之后的;而po

Java中form表单submit之后数据发生了重置。

问题描述 Java中form表单submit之后数据发生了重置. 在java中我用form表单提交后,页面等于刷新了,等于按了一次F5,所以刚才填写的数据会初始化,也就是说刚才选择的数据全部丢失了,现在除了用ajax无刷新提交外,怎么让点击submit按钮后,数据还保留??!(不要告诉我把数据放到session中,这样做是不科学的,另外加重页面刷新速度,只是投机取巧,谁有好的方法????) 解决方案 将表单提交到隐藏的iframe也行,不一定就是ajax <iframe style="di

编辑器-form表单通过360浏览器提交数据,controller获取不到参数

问题描述 form表单通过360浏览器提交数据,controller获取不到参数 我做了一个小DEMO,进行新闻的CRUD,用的是ueditor,测试的时候,IE可以显示数据, 火狐也可以,chrome也行,但是有时候点击"编辑新闻"时,编辑器里是空白,时有时无, 360浏览器就一直是空白,我看了一下MyEclipse控制台,是因为没获取页面提交的数据. 希望求大神解决啊!!! 解决方案 360你使用的是兼容模式还是急速模式?兼容模式是ie内核(默认好像是ie7内核..并不是系统最高版

提交form表单如何让页面在提交后不发生跳转

问题描述 提交form表单如何让页面在提交后不发生跳转希望有详细的示例 解决方案 解决方案二:用AJAX无刷新跳转.$.post("跳转URL"),{Action:"POST",Name:"useradress"},function(data,textStatus){data是返回值,返回NULL就行.这里可以不用写,后台的URL跳转中returnnull:就行})解决方案三:不想跳转就让action执行完后,再指向回来提交的这个页面就行了解决方