ВопросНе отображается форма

Добрый день, я читаю книгу вандюка для 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); 
 
}
 

Комментарии

Аватар пользователя Spleshka
Spleshka написал:

Запустил код у себя на локалке - форма отобразилась. Она отображается не при редактировании материала, а при его выводе. Если форма не отображается - убедитесь, что в настройках включен тип материала, на котором вы тестируете модуль.

03.01.2012 12:09
Аватар пользователя Гость
Гость написал:

Я в настройках выставил нужные материалы, потом захожу в добавить материал например story но там все стндартное нету филдсета с аннотацией

03.01.2012 12:14
Аватар пользователя Spleshka
Spleshka написал:

Форма должна отображаться НЕ при добавлении или редактировании ноды, а при просмотре её содержимого. Создайте материал и вы увидите форму.

03.01.2012 13:32
Аватар пользователя Гость
Гость написал:

:) спасибо большое, что-то я тормознул )))

03.01.2012 13:56
Аватар пользователя serge
serge написал:

Добрый день.

Пытаюсь вывести форму (кнопки добавить еще материалы), после сохранения материала (немного переделал модуль addanother)

форма выводится, но при нажатии на кнопки - сабмит не происходит. перезагружается страница созданного материала, хотя должна открываться страница для создания нового материала.

<?php
function delovaya_addanother_help($path, $arg) {
  $output = '';
  switch ($path) {
    case "admin/help#delovaya_addanother":
      $output = '<p>'.  t("Presents users with an option to create another node of the same type after a node is added.") .'</p>';
      return $output;
    case 'admin/settings/delovaya_addanother':
      $output = 'Here you can select the content types for which an <em>"Add another..."</em> message will be displayed. After creating a new content node, users with the <a href="@delovaya_addanother_perm">use add another</a> permission will receive a message allowing them to add another content node of the same type.';
      return '<p>'. t($output, array(
        '@delovaya_addanother_perm' => url('admin/user/permissions', array('fragment' => 'module-delovaya_addanother')),
      )) .'</p>';
  }
}
 
function delovaya_addanother_perm() {
  return array('administer add another', 'use add another');
}
 
function delovaya_addanother_menu() {
  $items = array();
  $items['admin/settings/delovaya_addanother'] = array(
    'title' => 'Delovaya Add another',
    'description' => 'Modify which node types display the Add another message.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('delovaya_addanother_admin'),
    'access arguments' => array('administer add another'),
    'type' => MENU_NORMAL_ITEM,
  );
  $items['node/%/delovaya_addanother'] = array(
    'title' => 'Add another',
    'page callback' => 'delovaya_addanother_goto',
    'page arguments' => array(1),
    'access callback' => 'delovaya_addanother_access',
    'access arguments' => array(1),
    'weight' => 5,
    'type' => MENU_LOCAL_TASK,
  );
 
  $items['delovaya/add/adv1'] = array(
    'page callback' => 'delovaya_addanother_add_adv_page',
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  );
 
  return $items;
}
 
 
function delovaya_addanother_access($nid) {
  $allowed_nodetypes = variable_get('delovaya_addanother_nodetypes', array());
  $node = node_load($nid);
  return FALSE;
}
 
function delovaya_addanother_goto($nid) {
  if ($node = node_load($nid)) {
    drupal_goto('node/add/'. str_replace('_', '-', $node->type));
  }
  else {
    drupal_goto('node/add');
  }
}
 
function delovaya_addanother_admin() {
  $form['delovaya_addanother_nodes'] = array(
    '#type' => 'fieldset',
    '#title' => t('Content settings'),
  );
  $form['delovaya_addanother_nodes']['delovaya_addanother_nodetypes'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Enable Add another for these content types'),
    '#options' => node_get_types('names'),
    '#default_value' => variable_get('delovaya_addanother_nodetypes', array()),
    '#description' => 'An <em>Add another</em> message will be shown after creating these content types',
  );
 
  $form['delovaya_addanother_display'] = array(
    '#type' => 'fieldset',
    '#title' => t('Display settings'),
  );
  $form['delovaya_addanother_display']['delovaya_addanother_message'] = array(
    '#type' => 'checkbox',
    '#title' => t('Display the Add another message after node creation.'),
    '#default_value' => variable_get('delovaya_addanother_message', TRUE),
  );
  return system_settings_form($form);
}
 
function delovaya_addanother_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  switch ($op) {
    case 'insert':
      if ($node->op == t('Save and create another')) {
        // This prevents Add another's message from clashing with Submit Again.
        return;
      }
      $allowed_nodetypes = variable_get('delovaya_addanother_nodetypes', array());
      if (user_access('use add another') && isset($allowed_nodetypes[$node->type]) && $allowed_nodetypes[$node->type]) {
        global $_delovaya_addanother_message;
        $_delovaya_addanother_message = TRUE;
 
        $_SESSION['save'] = TRUE;
        $_SESSION['save_title'] = TRUE;
      }
      break;
    case 'view':
      if ($_SESSION['save'] && $a4) {
        $node->content['delovaya-add-adv-form2'] = array(
          '#value' => drupal_get_form('delovaya_addanother_add_adv_form'),
          '#weight' => 10, 
        );
        unset($_SESSION['save']);
      }
      break;
  }
}
 
 
function delovaya_addanother_form_alter(&$form, &$form_state, $form_id) {
  if (isset($form['#node']) && $form['#node']->type .'_node_form' == $form_id
      && variable_get('delovaya_addanother_message', TRUE)) {
    $form['buttons']['submit']['#submit'][] = '_delovaya_addanother_message';
  }
}
 
function _delovaya_addanother_message($form, &$form_state) {
/*  global $_delovaya_addanother_message;
  if (isset($_delovaya_addanother_message)) {
    drupal_set_message($_delovaya_addanother_message, 'status', FALSE);
  }
*/
}
 
function delovaya_addanother_add_adv_page() {
  global $user;
  if ($user->uid) {
    $output = drupal_get_form('delovaya_addanother_add_adv_form');
  }
  else {
    drupal_goto('user');
  }
  return $output;
}
 
function delovaya_addanother_add_adv_form() {
   dsm($form);
 
  $form['add_free'] = array(
    '#type' => 'submit',
    '#value' => t('Add free adv'),
    '#submit' => array('delovaya_addanother_free_adv_submit'),
  );
  $form['add_pay'] = array(
    '#type' => 'submit',
    '#value' => t('Add payment adv'),
    '#submit' => array('delovaya_addanother_pay_adv_submit'),
  );  
  $form['add_job'] = array(
    '#type' => 'submit',
    '#value' => t('Add job'),
    '#submit' => array('delovaya_addanother_job_submit'),
  );
  return $form;
}
 
 
function delovaya_addanother_free_adv_submit($form, &$form_state) {
  drupal_goto('node/add/freeadv');
}
 
function delovaya_addanother_pay_adv_submit($form, &$form_state) {
  drupal_goto('node/add/advertisement');
}
 
function delovaya_addanother_job_submit($form, &$form_state) {
  drupal_goto('node/add/job');
}

форму вывожу в файле node-тип_материала.tpl.php:

  <div class="delovaya-add-adv-form2" align="center">
	<?php if($node->content['delovaya-add-adv-form2']){ ?>
    <h2><?php print "<br><br>Хотите добавить еще объявления или вакансии:<br><br>";?></h2>
		<?php  print $node->content['delovaya-add-adv-form2']["#value"];
	} ?>
  </div>

Подскажите пожалуйста, что я не так делаю?

При отладке для формы вижу такую картину:

delovaya-add-adv-form2 (Array, 5 elements)
 
    #weight (Integer) 10
    #value (String, 988 characters ):
 
<form action="/category/kuplyu/jhgfcjhgc-7-mart-2012"
accept-charset="UTF-8" method="post"      id="delovaya-addanother-add-adv-form" class="form-delovaya_addanother_add_adv_form form-delovaya_addanother_add_adv_form">
<div>
<input type="submit" name="op"            id="edit-add-free"                                    value="Бесплатное объявление" class="form-submit" />
<input type="submit" name="op"            id="edit-add-pay"                                     value="Платное объявление"    class="form-submit" />
<input type="submit" name="op"            id="edit-add-job"                                     value="Добавить вакансию"     class="form-submit" />
<input type="hidden" name="form_build_id" id="form-776a1d7b9986f08e770732402f086749"            value="form-776a1d7b9986f08e770732402f086749" />
<input type="hidden" name="form_token"    id="edit-delovaya-addanother-add-adv-form-form-token" value="37fab8bfa622bd35741f6db88530c4c7" />
<input type="hidden" name="form_id"       id="edit-delovaya-addanother-add-adv-form"            value="delovaya_addanother_add_adv_form" />
</div>
</form>

хотя в action должен быть совсем другой путь:
action="/delovaya/add/adv1"

07.03.2012 18:43
Аватар пользователя Spleshka
Spleshka написал:

Распишите задачу подробнее, пожалуйста. А то судя по описанию - у вас там 80% кода ненужно :)

12.03.2012 00:07
Аватар пользователя serge
serge написал:

Добрый день.

Часть кода действительно лишняя (добавлял для проверки, пробовал разные способы решения)

Задача: есть форма с 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) {

Подскажите пожалуйста, как сделать так, что-бы при нажатии кнопки открывалась страница добавления материала, а не текущая страница?

Спасибо, за ответ.

12.03.2012 12:24
Аватар пользователя Spleshka
Spleshka написал:

Скажите, это ещё актуально? А то я совсем заработался, на блог не заходил давно :(

17.03.2012 14:09
Аватар пользователя serge
serge написал:

Да, еще актуально
пока не могу разобраться :(

20.03.2012 12:27

Комментировать