ВопросНе отображается форма
Добрый день, я читаю книгу вандюка для d6, но сразу в первом модуле с аннотациями не отображается форма для добавления аннотации, настройка аннотаций для типов материалов работает. Парадоксально что я скачал уже с оф сайта чистые исходники но и сних тоже не отображается.
Помогите разобраться пожалуйста! вот код:
это annotate.module
<?php /** * Implementation of hook_menu(). */ function annotate_menu() { $items['admin/settings/annotate'] = array( 'title' => 'Annotation settings', 'description' => 'Change how annotations behave', 'page callback' => 'drupal_get_form', 'page arguments' => array('annotate_admin_settings'), 'access arguments' => array('administer site configuration'), 'type' => MENU_NORMAL_ITEM, 'file' => 'annotate.admin.inc', ); return $items; } /** * Implementation of hook_nodeapi(). */ function annotate_nodeapi(&$node, $op, $teaser, $page) { global $user; switch ($op) { // The 'view' operation means the node is about to be displayed. case 'view': // Abort if the user is an anonymous user (not logged in) or // if the node is not being displayed on a page by itself // (for example, it could be in a node listing or search result). if ($user->uid == 0 || !$page) { break; } // Find out which node types we should annotate. $types_to_annotate = variable_get('annotate_node_types', array('page')); // Abort if this node is not one of the types we should annotate. if (!in_array($node->type, $types_to_annotate, TRUE)) { break; } // Get the current annotation for this node from the database // and store it in the node object. $result = db_query('SELECT note FROM {annotations} WHERE nid = %d AND uid = %d', $node->nid, $user->uid); $node->annotation = db_result($result); // Add our form as a content item. $node->content['annotation_form'] = array( '#value' => drupal_get_form('annotate_entry_form', $node), '#weight' => 10 ); break; case 'delete': db_query('DELETE FROM {annotations} WHERE nid = %d', $node->nid); break; } } /** * Define the form for entering an annotation. */ function annotate_entry_form($form_state, $node) { // Define a fieldset. $form['annotate'] = array( '#type' => 'fieldset', '#title' => t('Annotations') ); // Define a textarea inside the fieldset. $form['annotate']['note'] = array( '#type' => 'textarea', '#title' => t('Notes'), '#default_value' => isset($node->annotation) ? $node->annotation : '', '#description' => t('Make your personal annotations about this content here. Only you (and the site administrator) will be able to see them.') ); // For convenience, save the node id. $form['annotate']['nid'] = array( '#type' => 'value', '#value' => $node->nid ); // Define a submit button. $form['annotate']['submit'] = array( '#type' => 'submit', '#value' => t('Update') ); return $form; } /** * Handle submission of the annotation form and saving * of the data to the database. */ function annotate_entry_form_submit($form, $form_state) { global $user; $note = $form_state['values']['note']; $nid = $form_state['values']['nid']; db_query('DELETE FROM {annotations} WHERE nid = %d AND uid = %d', $nid, $user->uid); db_query("INSERT INTO {annotations} (nid, uid, note, created) VALUES (%d, %d, '%s', %d)", $nid, $user->uid, $note, time()); drupal_set_message(t('Your annotation has been saved.')); }
annotate.admin.inc
<?php function annotate_admin_settings() { // http://api.drupal.ru/api/function/node_get_types/6 $options = node_get_types('names'); $form['annotate_node_types'] = array( '#type' => 'checkboxes', '#title' => t('Users may annotate these content types'), '#options' => $options, '#default_value' => variable_get('annotate_node_types', array('page')), '#description' => t('A text field will be available on these content types to make user-specific notes.'), ); return system_settings_form($form); }
- Гость
- 03.01.2012
- 4870
Комментарии
Запустил код у себя на локалке - форма отобразилась. Она отображается не при редактировании материала, а при его выводе. Если форма не отображается - убедитесь, что в настройках включен тип материала, на котором вы тестируете модуль.
Я в настройках выставил нужные материалы, потом захожу в добавить материал например story но там все стндартное нету филдсета с аннотацией
Форма должна отображаться НЕ при добавлении или редактировании ноды, а при просмотре её содержимого. Создайте материал и вы увидите форму.
:) спасибо большое, что-то я тормознул )))
Добрый день.
Пытаюсь вывести форму (кнопки добавить еще материалы), после сохранения материала (немного переделал модуль addanother)
форма выводится, но при нажатии на кнопки - сабмит не происходит. перезагружается страница созданного материала, хотя должна открываться страница для создания нового материала.
форму вывожу в файле node-тип_материала.tpl.php:
Подскажите пожалуйста, что я не так делаю?
При отладке для формы вижу такую картину:
хотя в action должен быть совсем другой путь:
action="/delovaya/add/adv1"
Распишите задачу подробнее, пожалуйста. А то судя по описанию - у вас там 80% кода ненужно :)
Добрый день.
Часть кода действительно лишняя (добавлял для проверки, пробовал разные способы решения)
Задача: есть форма с 3-мя кнопками - добавить материалы 3-х типов (add_adv_form), которая определена в другом модуле (в нем же и вызывается 1-й раз нормально). В модуле который я привел выше я переопределил эту форму как delovaya_addanother_add_adv_form (это лишнее, но при выводе существовавшей формы возникли проблемы).
После сохранения одного из материалов, должна выводится форма add_adv_form (форму вывожу в файле node-тип_материала.tpl.php), что бы пользователь нажав на 1 из 3-х кнопок, мог добавить еще один материал выбранного типа.
Проблема заключается в том, что после добавления материала форма выводится, но при нажатии на любую кнопку из формы перезагружается текущая страница, а на выводится форма добавления материала.
для своей задачи переделывал модуль addanother.
Эта часть кода добавлена из работающего модуля и здесь лишняя:
function delovaya_addanother_add_adv_page()
function delovaya_addanother_add_adv_form() {
function delovaya_addanother_free_adv_submit($form, &$form_state) {
function delovaya_addanother_pay_adv_submit($form, &$form_state) {
function delovaya_addanother_job_submit($form, &$form_state) {
Подскажите пожалуйста, как сделать так, что-бы при нажатии кнопки открывалась страница добавления материала, а не текущая страница?
Спасибо, за ответ.
Скажите, это ещё актуально? А то я совсем заработался, на блог не заходил давно :(
Да, еще актуально
пока не могу разобраться :(
Комментировать