Drupal,覆盖自定义内容类型的添加/编辑表单表单

时间:2012-06-08 09:20:09

标签: forms drupal content-type

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

协议是一种存储标题,摘要和说明的内容类型。我想通过一个textarea添加标题/说明/摘要,你可以在其中标记文本的各个部分:

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

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

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

2 个答案:

答案 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)

解决问题的步骤。

  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);
    
  5. 这些是基本步骤。如果您还有其他问题,请询问。

    提示:当您需要知道某个变量的内容时,安装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.