我创建了一种名为protocol的新内容类型。问题在于,当您定义一个内容类型时,这意味着您还要说明要在表单中添加和编辑内容的方式,例如哪些表单元素。
协议是一种存储标题,摘要和说明的内容类型。我想通过一个textarea添加标题/说明/摘要,你可以在其中标记文本的各个部分:
[title]这是一个标题[/ title] [摘要]这是一个摘要。 [/ abstract] [说明]这些是我的指示。[/ instructions]
然后处理该文本,并且可以挑选出每个标记之间的内容并将其存储在变量中,该变量应该存储为内容类型,就像通过添加/编辑内容中的单独字段/ textarea添加的那样形式。
这可能吗?我应该阅读什么样的东西? drupal代码中的函数/函数描述了当你为标准添加内容表单的新内容类型推送“保存”时会发生什么?(我只想阅读它,而不是改变任何东西)
答案 0 :(得分:0)
不确定这与您尝试做的完全匹配,但从基本意义上说,它应该让您朝着目标前进。我为Drupal 6编写了一个名为endorse的模块,它提供了一个自定义表单,将提交的值提供给一个新节点:
http://drupal.org/project/endorse
这是表单定义:
http://drupalcode.org/project/endorse.git/blob/refs/heads/master:/endorse.module#l136
接下来是一些基本验证,然后实际节点保存发生在提交函数的顶部,这里直到第231行:
http://drupalcode.org/project/endorse.git/blob/refs/heads/master:/endorse.module#l206
除了感谢和重定向在提交函数的最后,该函数中的其余部分是无关紧要的。如果你在D7中这样做,它会稍微改变一下(参见api.drupal.org的功能定义和诸如此类的东西),但它看起来应该大致相同。
答案 1 :(得分:0)
解决问题的步骤。
解析文本并创建并保存新节点(此处为代码段)。
$newNode = (object) NULL;
$newNode->type = 'protocol';
$newNode->title = $parsed_title;
$newNode->uid = 1;
$newNode->created = strtotime("now");
$newNode->changed = strtotime("now");
$newNode->status = 1;
$newNode->comment = 0;
$newNode->promote = 0;
$newNode->moderate = 0;
$newNode->sticky = 0;
// add CCK field data
$newNode->field_{YOUR_CUSTOM_FIELD_1}[0]['value'] = $parsed_data1;
$newNode->field_{YOUR_CUSTOM_FIELD_2}[0]['value'] = $parsed_data2;
// save node
node_save($newNode);
这些是基本步骤。如果您还有其他问题,请询问。
提示:当您需要知道某个变量的内容时,安装Devel模块并使用函数dpm()。当您实现hook_form_validate或hook_form_submit以了解变量$ form_state中的内容时,您可能会需要它。
所以就这样做:
dpm($form_state); //this will give you the variables inside the array with a krumo view.