1

我创建了一个名为协议的新内容类型。问题在于,当您定义内容类型时,这意味着您还说明了如何在表单中添加和编辑内容,例如将有哪些表单元素。

协议是一种存储标题、摘要和指令的内容类型。我想通过一个文本区域添加标题/说明/摘要,您可以在其中标记文本的各个部分,如下所示:

[title]这是一个标题[/title] [abstract]这是一个摘要。[/abstract][instructions]这些是我的指示。[/instructions]

然后处理该文本,并且可以挑选出每个标签之间的内容并将其存储在一个变量中,然后该变量应该存储为内容类型,就像它通过添加/编辑内容表单中的单独字段/文本区域添加一样。

这可能吗?我应该阅读哪些内容?drupal 代码中的哪里是描述当您为标准添加内容表单的新内容类型推送“保存”时会发生什么的函数/函数?(我只想阅读它,而不是更改任何内容)

4

2 回答 2

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 了解函数定义等),但它应该看起来或多或少相同。

于 2012-06-08T17:34:03.647 回答
0

解决您的问题的步骤。

  1. 创建一个模块。使用您的自定义添加页面实现hook_menu 。
  2. 使用FORM API创建一个自定义表单,它将显示在您的新页面中。
  3. 在您的hook_form_submit从变量表单状态中获取您的值。
  4. 解析文本并创建并保存一个新节点(此处为片段)。

    $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.
于 2012-06-08T19:45:12.143 回答