批量方式,我们可以通过编程方式实现。
那么,有什么好的方法能快速方便做到批量添加呢?这里猪跑啦将会讲解如何实现批量添加,包括:
1,编程方式添加节点(node):
初始化一个node object
添加body 字段内容
添加自定义字段内容
添加file / image字段内容
添加taxonomy term 字段内容
保存节点(node)
2,编程方式添加留言(comment)
3,编程方式添加分类/标签(taxonomy)
1,如何编程方式添加节点(node)
1.1,初始化一个node object
1 2 3 4 5 6 7 | $node = new stdClass(); // 创建一个 node object |
我们设置$node->language值为LANGUAGE_NONE,如果你没有开启locale 模块,节点会分配一个特定的语言,因为locale模块不是每个人都安装的,这就是我们为什么设置值为LANGUAGE_NONE。在Drupal里面,node 跟 field 都是可以有超过一种语言的,所以如果你的网站是多语言的,你可以指定一个语言代码给这个字段,你可以通过在设置语言的页面看到语言代码,路径是:Configuration -> Regional and language -> Languages 【admin/config/regional/language】。
1.2,添加body字段内容
1 2 3 4 | // 添加body内容$node->body[$node->language][0]['value'] = '这里填写body的内容';$node->body[$node->language][0]['summary'] = '这里是body的简介,简介是在列别页(Teaser)显示';$node->body[$node->language][0]['format'] = 'filtered_html'; // 格式化内容,如果你想格式化为其他格式,可以在Administration » Configuration » Content authoring设置(admin/config/content/formats),这里我用filtered_html |
1.3,添加自定义字段内容
1 2 3 4 5 | // 这里是添加通过CCK/Field API生成的字段. $node->field_custom_name[$node->language][0]['value'] = '这里是自定义字段的值';// 如果你的字段是有格式的,别忘记定义$node->field_custom_name[$node->language][0]['format'] = '这里是字段的格式';// 你可以通过这个方式添加其他的自定义字段 |
1.4,添加file / image字段内容
1 2 3 4 5 6 7 8 9 10 | // 一些系统中的文件$file_path = drupal_realpath('somefile.png'); // 创建一个文件 object$file = (object) array( 'uid' => 1, 'uri' => $file_path, 'filemime' => file_get_mimetype($file_path), 'status' => 1,);$file = file_copy($file, 'public://'); // 保存文件的位置,public://默认表示在sites/default/file下方,你可以定义一些二级文件夹,如 'public://images'$node->field_image[LANGUAGE_NONE][0] = (array)$file; //把这个文件object关联到相对应的文件字段 |
1.5,添加taxonomy term 字段内容
1 | $node->field_tags[$node->language][0]['tid'] = 1; |
'field_tags'是term reference字段的名称,'1'是你想增加到节点的term id,是不是很简单?
1.6,保存节点(node)
1 2 | $node = node_submit($node); // 准备提交node_save($node); // 保存到节点,当做完这个操作后,系统会生成一个nid |
2,编程方式添加留言(comment)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // 创建一个comment$comment = new stdClass(); // 创建一个comment object$comment->nid = $node->nid; // comment是附带在一个节点(node)上的,所以要填写这个comment所属于的节点的nid$comment->cid = ; // comment 的自身id$comment->pid = ; // comment 是可以多级回复的,所以comment有可能是属于某个comment,是父子关系,0表示没有上级comment$comment->uid = 1; // 用户的id,意思是谁添加这个comment的$comment->mail = 'drupalla@drupalla.com'; // 用户的email$comment->name = '分头诗人'; // 如果是认证用户,这里会自动完成,如果是未登录的浏览者,这里需要自行填写。$comment->thread = '01/'; // 非必要的,如果你需要线程控制,就添加这个,否则就将此行删除就可以$comment->hostname = '127.0.01' // 非必要的. 你可以通过这样记录发布者的ip。$comment->created = time(); // 非必要的. 你可以设置comment的发布时间。$comment->is_anonymous = ; // 是否匿名用户$comment->homepage = ''; // 添加首页$comment->status = COMMENT_PUBLISHED; // 默认设置comment 自动发布。$comment->language = LANGUAGE_NONE; // 跟node 类似,是语言控制$comment->subject = 'Comment 标题';$comment->comment_body[$comment->language][0]['value'] = 'Comment body 内容'; // 这里类似node 节点$comment->comment_body[$comment->language][0]['format'] = 'filtered_html';$comment->field_custom_field_name[LANGUAGE_NONE][0]['value'] = ‘你设置的值’; // 非必要的,如果你的comment 增加了一些自定义字段,可以通过这个方式添加,类似节点(node)comment_submit($comment); // 准备保存comment_save($comment); |
3,编程方式添加分类/标签(taxonomy)
这个章节非常简单,只需要下面几行代码:
1 2 3 4 5 | $term = new stdClass();$term->name = 'Term Name';$term->vid = 1; // ‘1’是 词汇表id(vocabulary id)$term->field_custom_field_name[LANGUAGE_NONE][0]['value'] = '你设置的值'; // 非必要的,如果你的comment 增加了一些自定义字段,可以通过这个方式添加,类似节点(node)taxonomy_term_save($term); // 最后,保存 |
好了,基本介绍完了如何通过编程方式添加node,comment,taxonomy term,你可以通过这个方式实现很多你想做的,诸如采集系统,通过某些方式批量获得某个站点的资料,然后通过 node_save 自动批量的添加到drupal里面,大家有看过本人做的图标酷网站吗?没看过?赶紧去看看效果吧,里面的数据就是通过采集数据并且通过node_save, comment_save, taxonomy_term_save这个方式批量添加数据的,数据量有40G。希望本文对你有帮助。
评论
很详细,看来诗人很用心的在经营网站.
很详细,看来诗人很用心的在经营网站.
看来上面的代码,彻彻底底明白了D7的所谓的entity概念包括了node,comments,taxonomy等等.
跟d6下面差别还是挺大的.
是的,D7 差别跟D6还是有不少的
是的,D7 差别跟D6还是有不少的