创建一个drupal内容类型

在 if ($task == 'profile') 代码块儿中,我们做的第一件事儿是调用默认大纲中的 default_profile_tasks() 函数。前面我们指出了这样做的原因。

接下来,我们定义 quote 节点类型:
 

// Quote content from chapter 4:
$quote_type = array(
  'name' => st('Quote'), // <- st() is t() for installer
  'type' => 'quote',
  'description' => st('Quotations and witticisms'),
  'module' => 'node',
  'has_title' => TRUE,
  'title_label' => 'Origin',
  'body_label' => 'Text',
  'has_body' => TRUE,
  'custom' => TRUE,
  'modified' => TRUE,
  'locked' => FALSE,
  'is_new' => TRUE,
  'help' => '',
  'min_word_count' => 0,
  );
node_type_save((object)$quote_type);

在这里我们用了另一种方法创建新的内容类型。因为我们没有使用模块,因此不能使用 hook_node_info() 为我们进行创建工作。

 

我们用了另一种方法,通常这种方法是专门用来通过用户交互创建内容类型的。实际上,我们在这里用一个函数保存节点类型,在第四章中,通过管理界面创建 quote 内容类型时,Drupal 使用的也是同一个函数。


提示:hook_node_info() 与 node_type_save()
你怎么知道应该用哪一个呢?当一个模块添加自己的内容类型时,应该用 hook_node_info()。只有当内容类型并非模块专用时,才用node_type_save()。

因为我们使用了底层的 node_type_save() 函数,因此必须定义将要存入数据库的所有 field。所以,我们的 $quote_type 数组比较长。

提示:如果你不喜欢设定所有的默认值,你可以打破 Drupal 的准则,使用“私有的”节点函数 _node_type_set_defaults(), 传递给它一个稀疏数组。那个函数将为数组中不存在的任何属性设置默认值。

在上面的代码中,我们用了一个新函数:st()。这个函数提供了与 t() 函数同样的功能。但是在安装期间,翻译系统的初始化没有完成。正因为如此,应该用st() 函数代替 t()。

st() 不是通过查询用户偏好决定来确定语言,而是使用安装程序提供的信息设置语言。不应该在安装环境之外使用这个函数。

正确设置好了数组之后,我们必须把它强制转型为一个对象,再把它传递给 node_type_save()。
 

node_type_save((object)$quote_type);

在安装大纲中创建一个新内容类型,需要做的工作就这么多。

评论

发表新评论

此内容将保密,不会被其他人看见。
  • 允许HTML标签:<a> <img><em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><p>
  • 自动断行和分段。

更多关於格式化选项的信息

Image CAPTCHA
验证码
|