Drupal 7/8 代码创建节点 node、留言 comment、分类/标签 taxonomy

drupal8创建方法:

https://www.drupal.org/docs/8/api/entity-api/content-entity

drupal8 需要引入相关应用

// Make sure that an object is an entity.
if ($object instanceof \Drupal\Core\Entity\EntityInterface) {
}

// Make sure it's a content entity.
if ($entity instanceof \Drupal\Core\Entity\ContentEntityInterface) {
}

// Get the entity type.
$entity->getEntityTypeId();

// Make sure it's a node.
if ($entity instanceof \Drupal\node\NodeInterface) {
}

// Using entityType() works better when the needed entity type is dynamic.
$needed_type = 'node';
if ($entity->getEntityTypeId() == $needed_type) {
}

drupal7创建方法:

1,如何编程方式添加节点(node)

1.1,初始化一个node object

1
2
3
4
5
6
7
$node = new stdClass(); // 创建一个 node object
$node->type = "page"; // 内容类型选择page,或者其他你想指定的
$node->title = "节点的标题";
$node->language = LANGUAGE_NONE; // 节点的语言类型,LANGUAGE_NONE 表示und,不分语言,如果你系统安装了Locale模块,有多语言,你也可以指定是什么语言
$node->uid = 1; // 添加人的id,1表示drupal的第一个用户,是超级管理员,如果你要指定一个其他已有的角色,可以设置那个角色的id。
$node->path = array('alias' => '文章的别名'); // 要来设置一个节点文章的别名
node_object_prepare($node); // 设置一些默认值。

我们设置$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][]['value'] = '这里填写body的内容';
$node->body[$node->language][]['summary'] = '这里是body的简介,简介是在列别页(Teaser)显示';
$node->body[$node->language][]['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][]['value'] = '这里是自定义字段的值';
// 如果你的字段是有格式的,别忘记定义
$node->field_custom_name[$node->language][]['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][] = (array)$file; //把这个文件object关联到相对应的文件字段

 

1.5,添加taxonomy term 字段内容

 

1
$node->field_tags[$node->language][]['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][]['value'] = 'Comment body 内容'; // 这里类似node 节点
$comment->comment_body[$comment->language][]['format'] = 'filtered_html';
$comment->field_custom_field_name[LANGUAGE_NONE][]['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][]['value'] = '你设置的值'; // 非必要的,如果你的comment 增加了一些自定义字段,可以通过这个方式添加,类似节点(node)
taxonomy_term_save($term); // 最后,保存
笔记分类