Drupal 6 Неподдерживаемый тип операнда?

Я запускаю Drupal 6 на своем локальном компьютере с PHP 5.5 и получаю неподдерживаемый тип операнда, когда пытаюсь добавить узел типа контента, создаваемый через модуль.

Ошибка запускается в function drupal_render который можно найти в commons.inc, линия $elements += array('#title' => NULL, '#description' => NULL);, Я сделал var_dump и по какой-то причине обнаружил, что мой элемент - логическое значение true вместо массива. Я не могу понять, почему.

Вот мой файл модуля, который создает форму

<?php
// $ID$

function jokes_node_info(){
    return array(
        'jokes' => array(
            'name' => t('jokes'),
            'module' => 'jokes',
            'description' => t('Tell use your joke'),
            'has_title' => true,
            'title_label' => t('Title'),
            'has_body', true,
            'body_label' => t('jokes'),
            'min_word_count' => 2,
            'locked' => true
        )
    );
}


//only admin can create jokes
function jokes_menu_alter(&$callback){
    if(!user_access('administer nodes')){
        $callback['node/add/jokes']['access callback'] = false;
        unset($callback['node/add/jokes']['access arguments']);
    }
}

//create permissions
function jokes_perm(){
    return array(
        'create jokes',
        'edit own jokes',
        'edit any jokes',
        'delete own jokes',
        'delete any jokes'
    );
}

//control access
function jokes_access($op, $node, $account){
    $is_author = $account->uid == $node->uid;
    switch ($op) {
        case 'create':
            return user_access('create jokes', $account);
        case 'edit':
            return user_access('edit own jokes', $account) && $is_author || user_access('edit any jokes', $account);
        case 'delete':
            return user_access('delete own jokes', $account) && $is_author || user_access('delete any jokes', $account);
        default:
            break;
    }
}

function jokes_form($node){
    $type = node_get_types('type', $node);

    $form['title'] = array(
        '#type' => 'textfield',
        '#title' => check_plain($type->title_label),
        '#required' => true,
        '#default_value' => $node->title,
        '#weight' => -5,
        '#maxlength' => 255
    );
    $form['body_filter']['body'] = array(
        '#type' => 'textarea',
        '#title' => check_plain($type->body_label),
        '#default_value' => $node->body,
        '#rows' => 7,
        'required' => true
    );
    $form['body_filter']['filter'] = filter_form($node->format);
    $form['punchline'] = array(
        '#type' => 'textfield',
        '#title' => t('Punchline'),
        '#required' => true,
        '#default_value' => isset($node->punchline) ? $node->punchline : '',
        '#weight' => 5
    );
    return $form;
}
?>

1 ответ

Решение

Вы видите ошибку из-за неправильно введенного элемента $form. Все элементы формы должны иметь символ "#" перед именем ключа. (Почему Drupal не настолько умен, чтобы просто игнорировать элементы без "#", я не знаю.)

Строка, которая вызвала ошибку 'required' => true, Это должно быть '#required' => true,

<?php
    $form['body_filter']['body'] = array(
        '#type' => 'textarea',
        '#title' => check_plain($type->body_label),
        '#default_value' => $node->body,
        '#rows' => 7,
        '#required' => true
    );
?>
Другие вопросы по тегам