Drupal "Вы не авторизованы для доступа к этой странице." - PullRequest
2 голосов
/ 24 февраля 2012

Я только начинаю на drupal, поэтому извиняюсь, если это действительно глупый вопрос. Я написал следующий модуль, но каждый раз, когда я пытаюсь получить к нему доступ, переходя по URL (http://localhost:8888/drupal/doodil_viral_signup), я получаю сообщение об отказе в доступе. Я пытался восстановить права доступа, отключить и снова включить модуль, но он не ' кажется, не работает.

<code><?php
// $Id$
/**
* @file
* A module to encourage users to sign up.
* This module allows users to sign up to register for the site, and invite their friends to do the same.
*/

/**
* Implements hook_help().
*/
function doodil_viral_signup_help($path, $arg) {
  if ($path == 'admin/help#first') {
    return t('This module allows users to sign up to register for the site, and invite their friends to do the same.');
  }
}

/**
* Implements hook_menu().
*/
function doodil_viral_signup_menu($may_cache = true) {
  $items = array();
  if ($may_cache) {
    $items[] = array(
      'path' => 'doodil_viral_signup',
      'title' => t('Doodil Signup'),
      'callback' => 'doodil_viral_signup_page',
      'access' => TRUE,
      'type' => MENU_CALLBACK,
    );
  }
  return $items;
}

function doodil_viral_signup_page() {
  return drupal_get_form('doodil_viral_signup_page_form');
}

function doodil_viral_signup_page_form() {
  // [input text] First Name
  $form['first_name'] = array(
    '#type' => 'textfield',
    '#title' => t('First Name'),
  );

  // [input text] Last Name
  $form['last_name'] = array(
    '#type' => 'textfield',
    '#title' => t('Last Name'),
  );

  // [input text] Email Address
  $form['email_address'] = array(
    '#type' => 'textfield',
    '#title' => t('Email Address'),
  );

  // [input submit] Sign Me Up
  $form['submit'] = array(
    '#type' => 'submit',
    '#title' => t('Sign Me Up'),
  );
  return $form;
}

function doodil_viral_signup_page_form_submit($form_id, $form_values) {
  $message = 'You have submitted the following information <pre>'.print_r($form_values).'
'; drupal_set_message (т ($ сообщение)); }

Может кто-нибудь сказать мне, как это исправить?

Заранее спасибо!

Ответы [ 4 ]

3 голосов
/ 26 февраля 2012

Делайте все, что loganfsmyth предложил вам, кроме hook_menu(), должно быть так:

function doodil_viral_signup_menu() {
  $items = array();
  $items['doodil_viral_signup'] = array(
    'title' => 'Doodil Signup',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('doodil_viral_signup_page_form'),
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  );
  return $items;
}

И удалите doodil_viral_signup_page() функцию.

РЕДАКТИРОВАТЬ

Это было только что протестировано на моей машине, и она работает отлично.Если это не сработает на вашем компьютере, проблема не в этом модуле.

<code>function doodil_viral_signup_help($path, $arg) {
  if ($path == 'admin/help#first') {
    return t('This module allows users to sign up to register for the site,
    and invite their friends to do the same.');
  }
}

function doodil_viral_signup_menu() {
  $items = array();
  $items['doodil_viral_signup'] = array(
    'title' => 'Doodil Signup',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('doodil_viral_signup_page_form'),
    'access callback' => TRUE,
    'type' => MENU_CALLBACK
  );
  return $items;
}

function doodil_viral_signup_page_form($form, &$form_state) {
  $form['first_name'] = array(
    '#type' => 'textfield',
    '#title' => t('First Name')
  );
  $form['last_name'] = array(
    '#type' => 'textfield',
    '#title' => t('Last Name')
  );
  $form['email_address'] = array(
    '#type' => 'textfield',
    '#title' => t('Email Address')
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Sign Me Up')
  );
  return $form;
}

function doodil_viral_signup_page_form_submit($form, $form_state) {
  $message = t('Your submitted information <pre>!info
', array ('! Info '=> print_r ($ form_state [' values ​​'], TRUE)));drupal_set_message ($ сообщение);}
1 голос
/ 27 февраля 2013

Я получаю ту же ошибку.

Решается следующим образом: Удалите подчеркивания в: page_callback, page_arguments и access_callback.

Это должны быть «обратный вызов страницы», «аргументы страницы», «обратный вызов доступа».(без подчеркивания)

1 голос
/ 22 июня 2012

Когда вы даете ($ form, & $ form_state) в приведенном выше коде, который предоставляется.Возможно, вы получаете сообщение об ошибке такого типа:

--------------------------------------
warning: Missing argument 2 for 
--------------------------------------

В функции должен быть только один аргумент.

function_name($form)
0 голосов
/ 25 февраля 2012

Этот код весь в формате, используемом Drupal 5. Ваш тег говорит, что это drupal 7, так что я предполагаю, что вы этого хотите?*

И отправка должна быть:

<code>function doodil_viral_signup_page_form_submit($form, $form_state) {
  drupal_set_message(t('You have submitted the following information <pre>!info
', массив ('! Info '=> print_r ($ form_state [' values ​​'], TRUE),)));}

Использование <pre> - отвратительный способ отладки.Вам следует скачать модуль devel и использовать его функцию dsm($form_state['values']);

...