Fatal error

Главные вкладки

Аватар пользователя webmas webmas 24 июля 2009 в 14:18

написал модуль для отправки аннотаций. Ломаю голову уже несколько дней не могу разобрать причину.

Fatal error: Unsupported operand types in W:\home\localhost\www\drupal\includes\common.inc on line 1552

подскажите пожалуйста, кто знает, как исправить. заранее благодарен.

Комментарии

Аватар пользователя webmas webmas 24 июля 2009 в 15:29

Smile

<?php
// $Id$
/**
* file
* Предоставлям пользователям возможность приватно добавлять аннотации к узлу.
*
* Добавляем текстовое поле при отображении узла
* так, чтобы аутентифицированные пользователи могли делать аннотации.
*/

/**
* Реализация hook_menu().
*/
function annotate_menu(){
$items = array();
$items['annotate'] = array(
'title' => t('Annotation settings'),
'description' => t('Изменить отображение аннотаций.'),
'page callback' => 'drupal_get_form',
'page arguments' => array(annotate_admin_settings),
'access callback' => user_access('administer site configuration')
);

return $items;

}
/**
* Определяем форму параметров настройки.
*/
function annotate_admin_settings(){
$form['annotate_nodetypes'] = array(
'#type' => 'checkboxes',
'#title' => t('Users may annotate these node types'),
'#options' => node_get_types('names'),
'#default_value' => variable_get('annotate_nodetypes',array('story')),
'#description' => t('A text field will be available on these node types to make user-specific notes.')
);

return system_settings_form($form);
}

/**
*Реализация hook_nodeapi()
*/

function annotate_nodeapi(&$node, $op, $teaser, $page){
switch($op){
case 'view':
global $user;
//Если пользователь не зарегестрирован выйти
if($teaser || $user->uid == 0){
break;
}

$types_to_annotate = variable_get('annotate_nodetypes',array('story'));
if(!in_array($node->type,$types_to_annotate)){
break;
}
//Выводим аннотацию из базы данных если она там сохранена
//$result = db_query("SELECT note FROM {annotations} WHERE uid = %d AND nid
//= %d", $user->uid, $node->nid);
$node->annotation = db_result($result);
// Добавляем нашу форму как элемент содержимого.
$node->content['annotation_form'] = array(
'#value' => drupal_get_form('annotate_entry_form', $node),
'#weight' => 10
);
}

}

/**
* Определение формы для ввода аннотации.
*/
function annotate_entry_form($form_state, $param1) {
$form['annotate'] = array(
'#type' => 'fieldset',
'#title' => t('Аннотации')
);
$form['annotate']['nid'] = array(
'#type' => 'value',
'#value' => $param1->nid
);
$form['annotate']['note'] = array(
'#type' => 'textarea',
'#title' => t('Заметки'),
'#default_value' => $param1->annotation,
'#description' => t('Создайне свои пресональные аннотации о находящемся здесь содержимом. Только вы (и администратор сайта) будете способны увидеть их.')
);
$form['annotate']['submit'] = array(
'#type' => 'submit',
'#value' => t('Обновить')
);
return $form;
}
?>

часть кода common.inc

<?php
function l($text, $path, $options = array()) {
global $language;

// Merge in defaults.
$options += array(
'attributes' => array(),
'html' => FALSE,
); // 1552 строка

// Append active class.
if (($path == $_GET['q'] || ($path == '' && drupal_is_front_page())) &&
(empty($options['language']) || $options['language']->language == $language->language)) {
if (isset($options['attributes']['class'])) {
$options['attributes']['class'] .= ' active';
}
else {
$options['attributes']['class'] = 'active';
}
}

Аватар пользователя dimedrol dimedrol 25 июля 2009 в 15:35

1. Вставил текст Вашего модуля в свою песочницу
2. Включил модуль (файл annotate.info придумал на ходу)
2. В форме "Annotation settings" установил типы материала Заметка и Страница
3. Создал материал Страница
4. При просмотре материала появилось поле "Аннотации" в которое можно вводить текст. Текст не сохраняется т.к. сохранения еще нет.

Видимо ошибка не в том коде, который Вы опубликовали.

Это случайно не пример из книжки Вандюка? Smile