Php Drupal-6:为什么获胜;这个节点不保存吗?

Php Drupal-6:为什么获胜;这个节点不保存吗?,php,drupal-6,Php,Drupal 6,我已经构建了一组节点。在通过node\u save()运行它们之后,我会返回一个nid,我可以导航到该节点的页面,但它们是空的。(不显示任何字段的数据。) 当我转到该节点的编辑url时,会收到以下错误消息: 警告:调用用户函数数组() [函数.调用用户func数组]:第一个 参数应该是有效的 给出了回调“about\u node\u form” 在里面 /home/odp/public_html/includes/form.inc 第367行 下面是我试图保存的一个节点的print\r(): s

我已经构建了一组节点。在通过
node\u save()
运行它们之后,我会返回一个
nid
,我可以导航到该节点的页面,但它们是空的。(不显示任何字段的数据。)

当我转到该节点的编辑url时,会收到以下错误消息:

警告:调用用户函数数组() [函数.调用用户func数组]:第一个 参数应该是有效的 给出了回调“about\u node\u form” 在里面 /home/odp/public_html/includes/form.inc 第367行

下面是我试图保存的一个节点的
print\r()

stdClass Object
(
    [type] => Bout
    [name] => Gary Oak
    [title] => Bout - 0
    [promote] => 1
    [comment] => 2
    [revision] => 
    [format] => 0
    [status] => 0
    [field_weapon] => Array
        (
            [0] => Array
                (
                    [value] => foil
                )

        )

    [field_fencer] => Array
        (
            [0] => Array
                (
                    [uid] => 3
                )

        )

    [field_touches_scored] => Array
        (
            [0] => Array
                (
                    [value] => 4
                )

        )

    [field_meet] => Array
        (
            [0] => Array
                (
                    [nid] => Drew
                )

        )

    [field_round] => Array
        (
            [0] => Array
                (
                    [value] => 1
                )

        )

    [field_legacy_bout] => Array
        (
            [0] => Array
                (
                    [value] => no
                )

        )

    [teaser] => 
    [uid] => 1
    [created] => 1262732370
    [validated] => 1
)
这些节点都是通过
node\u validate()
运行的,可能会发现一些错误。此外,此节点缺少必需的分类法,但这也不会导致任何错误消息

以下是调用
node\u validate()
的方式:

function preview_validate($form, &$form_state) {
    $nodes_to_save = construct_nodes();

    foreach ($nodes_to_save as $node) {
        node_validate($node, $form);
        if ($errors = form_get_errors()) {
            form_set_error('', t('Validation error. No nodes saved.'));
        }
    }

    $_SESSION[CONSTRUCTED_KEY] = $nodes_to_save;
}
这就是错误的来源,在核心文件
includes/form.inc
中:

  // If $callback was returned by a hook_forms() implementation, call it.
  // Otherwise, call the function named after the form id.
  $form = call_user_func_array(isset($callback) ? $callback : $form_id, $args);
该节点显示在
节点
表中,但不在
内容类型
表中

这是构造_nodes()函数:

function construct_nodes() {
    global $user;
    $file = unserialize($_SESSION[FILE_KEY]);

    $count = 0;         // how many nodes have been created?
    $success = TRUE;    // have all the nodes thus far validated?
    foreach ($file->parsed as $node) {
        $odp = new StdClass();
        $odp->type = $_SESSION[NODE_TYPE_KEY];

        if (! in_array('name', $file->matched_keys)) {
            $odp->name = $user->name;
        }

        if (! in_array('title', $file->matched_keys)) {
            $odp->title = sprintf("%s - %s", $_SESSION[NODE_TYPE_KEY], $count);
        }

        $node_type_default = variable_get('node_options_'. $_SESSION[NODE_TYPE_KEY], array('status', 'promote')); //copied from blogapi module

        $odp->promote = in_array('promote', $node_type_default);
        $odp->comment = variable_get('comment_'. $_SESSION[NODE_TYPE_KEY], 2);
        $odp->revision = in_array('revision', $node_type_default);
        $odp->format = FILTER_FORMAT_DEFAULT;
        $odp->status = CTN_DEFAULT_PUBLISHED;

        // this makes the assumption that the field arrays will always have only one item
        // doesn't handle taxonomy
        foreach ($node as $field => $value) { // $field => value:                           [Touches scored] => 5
            $node_key = $file->matched_keys[$field]; // $node_key will be something like:   "field_meet" or "vid:4"
            $vid = vidOfTaxKey($node_key);
            if ($vid == NULL) {
                $valTypes = $_SESSION[SAMPLE_NODE_KEY]->$node_key; // like:     [0] => Array ( [uid] => 3 )
                $valType = array_keys($valTypes[0]);
                $odp->$node_key = array(array($valType[0] => $value));
            }
        }

        $to_save[] = $odp;
        $count++;
        unset($submitted_odp);
    }
    return $to_save;
}
bout
是CCK定义的内容类型。我认为,使用人名“Bout”作为类型而不是内部代码名
Bout
是错误的根源。

试试这个

<?php
$new_blognode = new stdClass();
$new_blognode->type = 'blog';
module_load_include('inc', 'node', 'node.pages');
$output .= drupal_get_form('blog_node_form', $new_blognode);
?>

请注意,您应该根据自己的需要进行更改

  • 此自定义内容类型是在哪里定义的?在中,还是通过管理>内容>内容类型>添加内容类型?它有定义吗?如果没有,那么难怪会出现这样的错误:Drupal应该如何知道这个内容类型是由什么组成的,以及如何呈现它的视图和编辑表单?不管怎样,试着定义它

  • 自定义内容(节点)类型名称(
    [type]=>about
    )。尝试将
    Bout
    更改为
    Bout


  • 另请参见和(整个线程)。

    $node['type']='bout';不是$node['type']='Bout'


    确认您没有遇到简单的大写问题。

    您是如何调用node_validate()的请显示第367行中的内容我可以看到您的
    构造_nodes()
    ?@ax在上面添加了该函数nodetype是在哪里定义的?我不是试图改变节点的显示或编辑方式-我只是想保存它并让它正常工作,就像一个不是以编程方式创建的节点。看起来#2是答案,但我还没有完全解决这个问题。。。请不要为同一问题提出新问题,但请在此处编辑您的问题,以清楚地说明您目前理解的问题。另一个问题将作为重复问题结束。