如何在Drupal7中用代码批量创建节点、评论和分类

最近,我忙于一个网站迁移工作。网站是使用某个老式CMS建立的,有一定数量的文章、不同的分类数据和用户评论。我的团队被雇来把这些数据从这个浪费人力物力的老式CMS上完整的迁移到功能更现代的开源Drupal7上。我喜欢干这一类事儿,帮别人拜托封闭专利技术永远是一种快乐。为完成这个任务,我需要通过代码在Drupal7中批量创建节点、评论和分类。这在Drupal 6的版本上只是小菜一碟,但Drupal7核心中引入了entities和fields的概念,所以现在开发起来需要有一点变化。

现在,我贴出这篇文章,告诉大家如何在Drupal7中用代码创建节点、评论和分类。在下面的详细内容里,你可以学会如何:

  1. 通过代码编程创建一个节点

    • 初始化一个节点对象
    • 增加body字段
    • 增加自定义字段
    • 增加文件/图像字段
    • 保存节点
  2. 通过代码编程创建一个评论
  3. 通过代码编程创建一个术语

1. 如何通过代码创建一个节点

1.1 初始化节点对象

[php] view plain copy

  1. $node = new stdClass(); // 我们创建了一个新的节点对象
  2. $node->type = "page"; // 设定一个你想要的内容类型,这里的值是内容类型的机器名
  3. $node->title = "文章的标题在此";
  4. $node->language = LANGUAGE_NONE; // 如果你启用了Locale模块,那你也可以改成任意允许的语言代码,更多注释请参考下方的注1
  5. $node->uid = 1; // 节点创建者的drupal用户ID,你也可以使用其它ID
  6. $node->path = array(‘alias‘ => ‘节点的路径别名‘); // 设置一个节点路径别名
  7. node_object_prepare($node); // node_object_prepare函数会自动为节点填充一些默认值

注1:我们为$node->language设置了LANGUAGE_NONE的值,如果你没有开启Locale模块,那这个节点就不会被分配特定语言值。所以这也是为什么我们在此处写了LANGUAGE_NONE常量的原因——节点和字段可能存在于多个语言中,并不一定是一个语言。当你的站点是多语言的,且你又想为字段指定一个特定语言值的话,那么你可以访问Drupal的管理面板,按顺序打开配置->区域和语言->语言,来查看你的网站的使用的语言的语言代码值是多少。

1.2 增加body字段

[php] view plain copy

  1. // 开始增加一个标准的body字段
  2. $node->body[$node->language][0][‘value‘] = ‘这里是body的正文文本‘;
  3. $node->body[$node->language][0][‘summary‘] = ‘这里是body的摘要文本‘;
  4. $node->body[$node->language][0][‘format‘] = ‘filtered_html‘; // 如果字段有格式化选项,那你就需要在这里设置上,这里我们为body字段设置了一个默认的格式化选项filtered_html

1.3 增加自定义字段

[php] view plain copy

  1. // 开始增加一些使用CCK/Field API的字段,操作方法其实和上面增加body字段的例子很类似
  2. $node->field_custom_name[$node->language][0][‘value‘] = ‘这里填写自定义字段的值‘;
  3. // 如果你的自定义字段有格式化选项,不要忘了在这设置上格式化选项值
  4. $node->field_custom_name[$node->language][0][‘format‘] = ‘这里填写自定义字段的格式化选项值‘;
  5. // 你可以通过复制上面的方法增加更多的自定义字段,只要你的服务器性能够用……

1.4 增加 文件/图像 字段

[php] view plain copy

  1. // 假设文件在你的系统上
  2. $file_path = drupal_realpath(‘somefile.png‘); // 创建一个File对象
  3. $file = (object) array(
  4. ‘uid‘ => 1,
  5. ‘uri‘ => $file_path,
  6. ‘filemime‘ => file_get_mimetype($filepath),
  7. ‘status‘ => 1,
  8. );
  9. $file = file_copy($file, ‘public://‘); // 保存文件到相对于Drupal文件系统的根目录,你可以指定一个子目录,例如‘public://images‘
  10. $node->field_image[LANGUAGE_NONE][0] = (array)$file; //将file对象合并到节点上自定义的图像字段

1.5 为节点增加一个术语

[php] view plain copy

  1. $node->field_tags[$node->language][][‘tid‘] = 1;

‘field_tags‘ 是一个隶属于你的内容的术语引用字段的名字,‘1‘是你希望指派给节点的术语的id

1.6 保存节点

[php] view plain copy

  1. $node = node_submit($node); // 提交前对节点进行预处理
  2. node_save($node); // 调用这个函数后,可以返回新建的节点的id

2. 如何通过代码创建评论

[php] view plain copy

  1. // 开始创建一个托管对象
  2. $comment = new stdClass(); // 创建一个comment对象
  3. $comment->nid = $node->nid; // 这里的nid是你你想将此评论附加到的节点的id
  4. $comment->cid = 0; // 评论的id,保持这样就可以了,不用管
  5. $comment->pid = 0; // 上级评论的id, 设置 0 代表没有上级评论
  6. $comment->uid = 1; // 用户id,代表谁发表了这个评论user‘s id, who left the comment
  7. $comment->mail = ‘[email protected]‘; // 用户email
  8. $comment->name = ‘User name‘; // 如果用户是已验证用户,那你可以省略这个项,如果用户是匿名用户并且你想给他起个名,那就在这里输入一个值
  9. $comment->thread = ‘01/‘; // 可选项,如果你需要评论列表以树形缩进形式显示,那就设置这个值,否则就省略它。
  10. $comment->hostname = ‘127.0.0.1‘ // 可选项,发帖者的IP地址OPTIONAL. You can log poster‘s ip here
  11. $comment->created = time(); // 可选项,你可以在这设置任何时间戳,这样就能把评论设置成一个比较老的日期时间了。
  12. $comment->is_anonymous = 0; // 不用管它
  13. $comment->homepage = ‘‘; // 这里设置评论发表者的个人主页URL
  14. $comment->status = COMMENT_PUBLISHED; // 自动发表此评论
  15. $comment->language = LANGUAGE_NONE; // 这个值和上面讲节点操作时的功能一样
  16. $comment->subject = ‘评论标题‘;
  17. $comment->comment_body[$comment->language][0][‘value‘] = ‘评论正文内容‘;
  18. $comment->comment_body[$comment->language][0][‘format‘] = ‘filtered_html‘;
  19. $comment->field_custom_field_name[LANGUAGE_NONE][0][‘value‘] = ‘Some value’; // 可选项,如果你的评论有一个自定义字段,那你就可以模仿这句代码来添加自定义字段值
  20. comment_submit($comment); // 在保存前预处理comment对象
  21. comment_save($comment);  //保存评论

3.  如何通过代码创建分类术语

这是本篇教程中最简单的部分,想创建一个术语你只需要执行下面的代码

[php] view plain copy

  1. $term = new stdClass(); // 创建一个term对象
  2. $term->name = ‘术语名称‘;
  3. $term->vid = 1; // ‘1‘是你想创建的分类术语要隶属到的词汇表的id
  4. $term->field_custom_field_name[LANGUAGE_NONE][0][‘value‘] = ‘任意值‘; // 可选项,如果你的分类术语有自定义字段,那你就可以模仿这句代码来添加自定义字段的值
  5. taxonomy_term_save($term); // 完成,保存分类术语!

好了,这就是今天我要告诉大家的所有内容。希望这篇文章能帮到你,欢迎拍砖、转载。

时间: 2024-10-13 01:43:23

如何在Drupal7中用代码批量创建节点、评论和分类的相关文章

VBA excel中批量创建超链接代码(连接当前文档中的sheet)

excel中批量创建超链接代码(连接当前文档中的sheet),在sheet1中B列中要创建一系列的超链接,链接的内容是本文档中的其他sheet,如下图,在sheet1下创建宏,代码如下. Sub 宏1() Dim temp, temp2 Dim i, j j = 1 For i = 5 To 74 temp = "'G" & j & "'!A1" temp2 = "G" & j Range("B" &a

如何在Windows中批量创建VMware的虚拟机

在最近的工作中,需要创建一批类似的机器.在VMware中创建了模板,然后根据自义向导部署之后,发现可以快速的完成新vm的部署.系统中的计算机名,IP地址都可以自动的完成更新.唯一的缺点是,系统自带的向导每次只能完成一台vm的安装.所以,必须寻找合适的方法,使得这个工作可以批量完成. 首先需要在Windows的powershell上安装VMware的Powercli.以管理员身份运行一个powershell的窗口,输入以下命令: Install-Module -Name VMware.PowerC

PowerShell创建虚拟机 (二、实现批量创建)

上一篇,我们大概了解到了如何用PowerShell脚本(以下简称PS或PS脚本)创建一台虚拟机,以及自定义虚拟机相关的配置,这一篇,我们一起探讨一下如何实现批量创建虚拟机. 批量创建,顾名思义,就是让脚本运行一次,创建多台虚拟机,最简单的实现方法呢,就是循环,下面我们一起来看一段代码: for($i=1;$i -le10;$i++) { $i } 这是PS脚本中最简单的循环之一,运行之后,效果如下图: 这个PS脚本的意思呢,是从1循环到10,一共10次,每次干的事情呢,就是将变量$i的结果输出到

3.12 批量创建采购订单

3.12.1   业务方案描述 在生成采购订单前,由采购员审核计划结果,根据供应商的供货状况调整供应商供货数量.供货日期. 所有合格供应商都能够通过下单平台批量下达采购订单,尽管供应商没有供货比例,或供货比例为0. 一个集成的界面,清晰的列出MRP/DRP结果,及相关辅助信息.以帮助仓管员调整计划时获得一些决策信息: 1)审核计划结果: 2)指定供应商: 3)调整计划结果: 4)批量生成采购订单: 3.12.2   业务方案逻辑控制(包含三部分) MRP建议补充程序: 1)将ASL中的该物料可供

Zookeeper客户端API之创建节点(七)

本篇博客主要讲一下使用Zookeeper原生的客户API来创建一个数据节点. 创建数据节点方法 Zookeeper提供了两个创建数据节点的方法. 同步创建数据节点方法: public String create(final String path, byte data[], List<ACL> acl, CreateMode createMode) throws KeeperException, InterruptedException 异步创建数据节点方法: public void crea

ARC中用代码检测一个对象有没有释放掉

你试过在ARC中用代码检测对象有没有释放掉这种事情呢?即使你想过肯定也不知道怎么去实现,因为,这里会用到一个你基本上没怎么接触过的类:NSHashTable. 我们以检测导航控制器push出一个新的控制器为例,以下是效果: 所有你需要的源码: ObjectDetector.h + ObjectDetector.m // // ObjectDetector.h // ARCBlock // // Copyright (c) 2014年 Y.X. All rights reserved. // #i

创建节点学习

任务要求 <html> <head><title>创建节点</title></head> <body> <input type="submit" value="add" onclick="add();"> <ul> <li>111</li> <li>222</li> <li>333</l

windows批量创建用户

一.建立用户的命令行语法: 建立用户:net  user  用户名  密码  /add           (如:net user test 123 /add)  提升权限:net  localgroup 用户权限组 用户名 /add      (如:net localgroup administrator test /add)      删除用户:net  user  用户名 /del         (如:net user test /del) 二.批量创建的方法: 利用EXCEL软件,创建

企业信息化系统基础——AD:使用C#批量创建帐号

企业信息化系统基础——AD:使用C#批量创建帐号 如果一个公司打算使用微软的产品来构建自己的办公自动化系统,那么,建议采用主域控制的方式.那么,必然就要用到活动目录(AD),这样,IT部门就需要为公司的每一个员工来创建域帐号.如果公司比较大的话,这是一个很大的工程.而且,我们会发现,有些工作量基本上是在重复劳动,人力资源部为了给It部门提供人员名单,会录入一次人员的各种信息,比如姓名.工号.所属部门.部门领导.电话号码等等,那么,IT人员在拿到这张表后,他又要重新录入一次.并且常常会因为人为的原