如何在Drupal7中用代码批量创建节点、评论和分类
最近,我忙于一个网站迁移工作。网站是使用某个老式CMS建立的,有一定数量的文章、不同的分类数据和用户评论。我的团队被雇来把这些数据从这个浪费人力物力的老式CMS上完整的迁移到功能更现代的开源Drupal7上。我喜欢干这一类事儿,帮别人拜托封闭专利技术永远是一种快乐。为完成这个任务,我需要通过代码在Drupal7中批量创建节点、评论和分类。这在Drupal 6的版本上只是小菜一碟,但Drupal7核心中引入了entities和fields的概念,所以现在开发起来需要有一点变化。
现在,我贴出这篇文章,告诉大家如何在Drupal7中用代码创建节点、评论和分类。在下面的详细内容里,你可以学会如何:
- 通过代码编程创建一个节点
- 初始化一个节点对象
- 增加body字段
- 增加自定义字段
- 增加文件/图像字段
- 保存节点
- 通过代码编程创建一个评论
- 通过代码编程创建一个术语
1. 如何通过代码创建一个节点
1.1 初始化节点对象
- $node = new stdClass(); // 我们创建了一个新的节点对象
- $node->type = "page"; // 设定一个你想要的内容类型,这里的值是内容类型的机器名
- $node->title = "文章的标题在此";
- $node->language = LANGUAGE_NONE; // 如果你启用了Locale模块,那你也可以改成任意允许的语言代码,更多注释请参考下方的注1
- $node->uid = 1; // 节点创建者的drupal用户ID,你也可以使用其它ID
- $node->path = array('alias' => '节点的路径别名'); // 设置一个节点路径别名
- node_object_prepare($node); // node_object_prepare函数会自动为节点填充一些默认值
注1:我们为$node->language设置了LANGUAGE_NONE的值,如果你没有开启Locale模块,那这个节点就不会被分配特定语言值。所以这也是为什么我们在此处写了LANGUAGE_NONE常量的原因——节点和字段可能存在于多个语言中,并不一定是一个语言。当你的站点是多语言的,且你又想为字段指定一个特定语言值的话,那么你可以访问Drupal的管理面板,按顺序打开配置->区域和语言->语言,来查看你的网站的使用的语言的语言代码值是多少。
1.2 增加body字段
- // 开始增加一个标准的body字段
- $node->body[$node->language][0]['value'] = '这里是body的正文文本';
- $node->body[$node->language][0]['summary'] = '这里是body的摘要文本';
- $node->body[$node->language][0]['format'] = 'filtered_html'; // 如果字段有格式化选项,那你就需要在这里设置上,这里我们为body字段设置了一个默认的格式化选项filtered_html
1.3 增加自定义字段
- // 开始增加一些使用CCK/Field API的字段,操作方法其实和上面增加body字段的例子很类似
- $node->field_custom_name[$node->language][0]['value'] = '这里填写自定义字段的值';
- // 如果你的自定义字段有格式化选项,不要忘了在这设置上格式化选项值
- $node->field_custom_name[$node->language][0]['format'] = '这里填写自定义字段的格式化选项值';
- // 你可以通过复制上面的方法增加更多的自定义字段,只要你的服务器性能够用……
1.4 增加 文件/图像 字段
- // 假设文件在你的系统上
- $file_path = drupal_realpath('somefile.png'); // 创建一个File对象
- $file = (object) array(
- 'uid' => 1,
- 'uri' => $file_path,
- 'filemime' => file_get_mimetype($filepath),
- 'status' => 1,
- );
- $file = file_copy($file, 'public://'); // 保存文件到相对于Drupal文件系统的根目录,你可以指定一个子目录,例如'public://images'
- $node->field_image[LANGUAGE_NONE][0] = (array)$file; //将file对象合并到节点上自定义的图像字段
1.5 为节点增加一个术语
- $node->field_tags[$node->language][]['tid'] = 1;
'field_tags' 是一个隶属于你的内容的术语引用字段的名字,'1'是你希望指派给节点的术语的id
1.6 保存节点
- $node = node_submit($node); // 提交前对节点进行预处理
- node_save($node); // 调用这个函数后,可以返回新建的节点的id
2. 如何通过代码创建评论
- // 开始创建一个托管对象
- $comment = new stdClass(); // 创建一个comment对象
- $comment->nid = $node->nid; // 这里的nid是你你想将此评论附加到的节点的id
- $comment->cid = 0; // 评论的id,保持这样就可以了,不用管
- $comment->pid = 0; // 上级评论的id, 设置 0 代表没有上级评论
- $comment->uid = 1; // 用户id,代表谁发表了这个评论user's id, who left the comment
- $comment->mail = 'email@example.com'; // 用户email
- $comment->name = 'User name'; // 如果用户是已验证用户,那你可以省略这个项,如果用户是匿名用户并且你想给他起个名,那就在这里输入一个值
- $comment->thread = '01/'; // 可选项,如果你需要评论列表以树形缩进形式显示,那就设置这个值,否则就省略它。
- $comment->hostname = '127.0.0.1' // 可选项,发帖者的IP地址OPTIONAL. You can log poster's ip here
- $comment->created = time(); // 可选项,你可以在这设置任何时间戳,这样就能把评论设置成一个比较老的日期时间了。
- $comment->is_anonymous = 0; // 不用管它
- $comment->homepage = ''; // 这里设置评论发表者的个人主页URL
- $comment->status = COMMENT_PUBLISHED; // 自动发表此评论
- $comment->language = LANGUAGE_NONE; // 这个值和上面讲节点操作时的功能一样
- $comment->subject = '评论标题';
- $comment->comment_body[$comment->language][0]['value'] = '评论正文内容';
- $comment->comment_body[$comment->language][0]['format'] = 'filtered_html';
- $comment->field_custom_field_name[LANGUAGE_NONE][0]['value'] = ‘Some value’; // 可选项,如果你的评论有一个自定义字段,那你就可以模仿这句代码来添加自定义字段值
- comment_submit($comment); // 在保存前预处理comment对象
- comment_save($comment); //保存评论
3. 如何通过代码创建分类术语
这是本篇教程中最简单的部分,想创建一个术语你只需要执行下面的代码
- $term = new stdClass(); // 创建一个term对象
- $term->name = '术语名称';
- $term->vid = 1; // '1'是你想创建的分类术语要隶属到的词汇表的id
- $term->field_custom_field_name[LANGUAGE_NONE][0]['value'] = '任意值'; // 可选项,如果你的分类术语有自定义字段,那你就可以模仿这句代码来添加自定义字段的值
- taxonomy_term_save($term); // 完成,保存分类术语!
好了,这就是今天我要告诉大家的所有内容。希望这篇文章能帮到你,欢迎拍砖、转载。
http://blog.csdn.net/moonbeam3/article/details/7422547
如何在Drupal7中用代码批量创建节点、评论和分类的更多相关文章
- 如何在unigui中用代码展开一棵树?
procedure expandtree(tree:tunitreeview);begin UniSession.AddJS('setTimeout("' + Tree1.JSName ...
- 如何在Windows中批量创建VMware的虚拟机
在最近的工作中,需要创建一批类似的机器.在VMware中创建了模板,然后根据自义向导部署之后,发现可以快速的完成新vm的部署.系统中的计算机名,IP地址都可以自动的完成更新.唯一的缺点是,系统自带的向 ...
- 如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?
https://www.cnblogs.com/upliver/p/5138160.html 如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码? 随着苹果公司对Swift的 ...
- 批量创建AD测试账号
在现场中,有时候客户会要求做一下AD压力测试,需要批量创建很多AD用户.奉献此代码供各位参考. 1: <# 2: 3: .DESCRIPTION 4: 批量创建AD测试账号 5: 6 ...
- [工具] 分布式系统下批量创建用户及分发公钥打通ssh通道的脚本
在分布式系统下偶尔会有这样的需求,要增加一个服务时,需要在集群的所有节点上创建同一个用户,然后打通ssh通道,再分发软件包.配置.执行命令.启动服务... 这个问题的根源是如何集中配置和管理系统,专业 ...
- windows批量创建用户
一.建立用户的命令行语法: 建立用户:net user 用户名 密码 /add (如:net user test 123 /add) 提升权限:net localgro ...
- 批量创建采购订单 BAPI_PO_CREATE1
*&---------------------------------------------------------------------* *& REPORT ZMM_PO_C ...
- VMware workstation批量创建虚拟机和自动化安装操作系统(一)
一. 简述 作为从事IT行业运维工作的Linuxer,大多情况下需要在测试环境中部署业务系统并进行测试,在没有足够的计算存储网络条件下,使用虚拟机进行虚拟集群的创建和使用,是一种不错的学习和实践方式. ...
- VMware workstation批量创建虚拟机和自动化安装操作系统(二)
一. 简述 在上一篇<VMware workstation批量创建虚拟机和自动化安装操作系统(一)>中,主要介绍了VMware workstation自定义创建虚拟机的过程,和一些其他的有 ...
随机推荐
- Python 多线程、多进程 (二)之 多线程、同步、通信
Python 多线程.多进程 (一)之 源码执行流程.GIL Python 多线程.多进程 (二)之 多线程.同步.通信 Python 多线程.多进程 (三)之 线程进程对比.多线程 一.python ...
- 排序算法(2)--Insert Sorting--插入排序[2]--binary insertion sort--折半(二分)插入排序
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.基本思想 二分法插入排序的思想和直接插入一样,只是找合适的插入位置的方式不同,这里是按二分法找到合适的位置,可 ...
- BZOJ3165: [Heoi2013]Segment(李超线段树)
题意 题目链接 Sol 李超线段树板子题.具体原理就不讲了. 一开始自己yy着写差点写自闭都快把叉积搬出来了... 后来看了下litble的写法才发现原来可以写的这么清晰简洁Orz #include& ...
- idea 快捷键总结
IntelliJ Idea 常用快捷键列表 Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Sh ...
- Dynamics CRM2016 如何删除Word/Excel Templates
创建模板的方式有两种,一种是创建个人级别的模板,如下面这种创建一个excel的模板 一种是在设置-模板中创建,但这需要管理员权限,从下图中可以看出个人级的模板在设置中是看不到的 那就涉及到一个问题了, ...
- Python 基于Python实现邮件发送
基于Python实现邮件发送 by:授客 QQ:1033553122 测试环境: Python版本:Python 2.7 注:需要修改mimetypes.py文件(该文件可通过文章底部的网盘分 ...
- pm2以windows服务运行
借助于pm2-windows-service 可以把pm2以windows服务运行.已服务运行的好处就是,即时用户注销也,pm2也会在后台运行 npm i pm2 -g npm i pm2-windo ...
- java EE 监听器
生命周期监听器与属性改变监听器都必须使用@WebListener或在web.xml中声明,容器才会知道要加载.读取相关的监听器.
- 用sparkR, 分析上亿条订单数据的脚本。
上周我们这个10人的小团队开发的推荐拉新系统, 日拉新人数已接近4万人.过去几个月这个系统从无到有, 拉新从日增几千稳步增长到日增几万, 同事们几个月来,每天工作13个小时以上,洗澡时间都没有, 有时 ...
- jsp 发布war 包到Tomcat
1.将项目打包成war,打包过程这里不做赘述 2.在linux或者windows下安装xmapp 3.打开Tomcat下conf/server.xml,在host下添加一行 <Co ...