项目中有个对新增的机器进行自行编号保证编号的唯一和快速,下面把程序丢出来记录下:

<?PHP

/**
 * @file
 * Defines "warehouse import" Feeds import.
 *
 * @Todo: Split admin functions into their own file.
 */
/* function node_modfiy_form_alter(&$form,$form_state,$form_id) {
  if ($form_id == 'fixed_assets_node_form') {    
    drupal_set_message(t('some message.'));
	dpm($form);	
	dpm($node);
  }  
} */
function node_modfiy_form_alter(&$form,&$form_state,$form_id) {

	if($form_id=='fixed_assets_node_form'){	
			//dpm($form);
			//dpm($form_state);		
		  if(!isset($form['nid']['#value'])){
			$form['title']['#ajax']=array(
				'event'=>'click','wrapper'=>'form-item-form-type-textfield-form-item-title','callback'=>'node_modfiy_title_ajax_callback',);
			$form['title']['#prefix']='<div id=form-item-form-type-textfield-form-item-title>';
			$form['title']['#suffix']='</div>';
			$form['title']['#validate']=TRUE;
			//form_set_cache($form['#build_id'],$form,$form_state);	
			
			$form['#validate'][]='node_modfiy_form_validate';
			//dpm($form['#validate']);
		  }
			
	}  
}

/**
 * Implementation of hook_validate().
 *验证输入的条码不可以有重复
 */
function node_modfiy_form_validate($form,&$form_state){
		
	if(strlen($form_state['values']['title'])<10 )	
		form_set_error('title','请选择正确的位置信息和机器分类信息');
	$myresult=db_query("select n.nid FROM {node} n Where n.title=:title And n.type=:type",array('title'=>$form_state['values']['title'],'type'=>"fixed_assets"));
	$nid=$myresult->fetchColumn(1);	
	if($nid)
		form_set_error('title','重复的条码!');
}


function node_modfiy_title_ajax_callback($form,$form_state){	
		
		$fixed_barcode=taxonomy_term_load($form_state['storage']['hs']['hs_fields']['field_localtion-und']['hierarchical_select']['selects'][0]['#default_value'])->name;
		$fixed_barcode.=taxonomy_term_load($form_state['storage']['hs']['hs_fields']['field_machineclass-und']['hierarchical_select']['selects'][0]['#default_value'])->name;
		$fixed_barcode.=taxonomy_term_load($form_state['storage']['hs']['hs_fields']['field_machineclass-und']['hierarchical_select']['selects'][1]['#default_value'])->name;
		$fixed_class=$form_state['storage']['hs']['hs_fields']['field_machineclass-und']['hierarchical_select']['selects'][1]['#default_value'];
		
		$count=db_query("select count(nid) from {taxonomy_index} where tid in (SELECT tid FROM {taxonomy_term_hierarchy} WHERE parent=".$form_state['storage']['hs']['hs_fields']['field_machineclass-und']['hierarchical_select']['selects'][1]['#default_value'].")")->fetchField();
				
		//$count = $query->execute()->fetchField();		
		
		$myid=$fixed_barcode.(sprintf("%04d",$count+1));
		//$myresult=db_result(db_query("select 1 FROM {node} Where title=%s And type=%s",$myid,"fixed_assets"));
		
		$form['title']=array(
		'#type'=>'textfield','#title'=>'衣车编号','#required'=>TRUE,'#value'=>$myid,'#maxlength'=>255,'#weight'=>-7,'#prefix'=>'<div id=form-item-form-type-textfield-form-item-title>','#suffix' => '</div>','#validated' => TRUE,'#name' => 'title','#id'=>'edit-title','#class'=>'form-text required ajax-processed'
		);
		
		//if(strlen($myid)<10 || $myresult){
		if(strlen($myid)<10){	
			form_set_error('title','请选择正确的位置信息和机器分类信息,将生成衣车编号');
		}
		return $form['title'];
}

程序很简单但其中有较多的知识点:AJAX的使用,sprintf 函数,form_set_error ,二个Hook,还有找到应的变量的结构等等。

程序参考了以下资料:

SQL查询方面的,

https://api.drupal.org/api/drupal/includes!database!select.inc/function/SelectQuery%3A%3AaddExpression/7

https://api.drupal.org/api/drupal/includes%21database%21database.inc/function/db_query/7

https://api.drupal.org/api/drupal/includes!database!database.inc/function/db_select/7

https://www.drupal.org/node/1051242

https://www.drupal.org/node/494026

一个验证Hook,

http://www.thinkindrupal.com/node/1016

AJAX例子,

https://www.drupal.org/node/2465119

Drupal 中对Node页面的Ajax修改的更多相关文章

  1. HTML5新增form控件和表单属性实例代码详解

    这篇文章主要介绍了HTML5新增form控件和表单属性实例代码详解,需要的朋友可以参考下

  2. HTML5表单验证特性(知识点小结)

    这篇文章主要介绍了HTML5表单验证特性的一些知识点,本文通过实例代码截图的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. amazeui页面分析之登录页面的示例代码

    这篇文章主要介绍了amazeui页面分析之登录页面的示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. ios – Swift Eureka Form中的循环

    我正在构建一个Eureka表单,并希望在表单中放置一个循环来构建基于数组的步进器列表.我试图使用的代码是:但是,当我这样做时,我在StepperRow行上出现了一个错误:所以看起来Swift不再认为它在形式之内并且正在关注

  5. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  6. swift 上传图片和参数 upload image with params

    Alamofire.upload(urlRequest.0,urlRequest.1).progress{(bytesWritten,totalBytesWritten,totalBytesExpectedToWrite)inprintln("\(totalBytesWritten)/\(totalBytesExpectedToWrite)")}}

  7. swift – 使用PostgreSQL在Vapor 3中上传图片

    我正在关注这些家伙MartinLasek教程,现在我正在“图片上传”.似乎没有人能回答“如何上传iVapor3图像”的问题Db连接正常,所有其他值都保存.这是我的创建方法:和型号:}和叶子模板:我知道需要一种管理文件的方法和原始图像字节,但我怎么去那里?这使用多部分表单的自动解码:upload.leaf文件是:使用File类型可以访问上载文件的本地文件名以及文件数据.如果将其余的Question字段添加到ExampleUpload结构中,则可以使用该路径捕获整个表单的字段.

  8. android – Phonegap本地构建 – jquery ajax错误:readystate 0 responsetext status 0 statustext error

    解决方法您是否在索引文件中包含了内容安全元标记?

  9. Ajax简单的异步交互及Ajax原生编写

    一提到异步交互大家就会说ajax,仿佛ajax这个技术已经成为了异步交互的代名词.那下面将研究ajax的核心对象

  10. Ajax跨域问题的解决办法汇总(推荐)

    本文给大家分享多种方法解决Ajax跨域问题,非常不错具有参考借鉴价值,感兴趣的朋友一起学习吧

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部