Доступ / см. Страницу настроек для пользовательского модуля - PullRequest
1 голос
/ 18 августа 2010

Я обновил модуль с 5 до 6. У меня только одна проблема: Я могу получить доступ к странице настроек для него, но не могу видеть его содержимое. Это мой код:

function agbnagscreen_menu() {
  global $user;
  $items = array();

    if (agbnagscreen_nag($user)) {
//       var_dump($_GET['q']); die();
      drupal_goto(sprintf('%s/%s', AGBNAGSCREEN_NAGURL, base64_encode($_GET['q'])));
      die();
    }

    $items['admin/settings/agbnagscreen'] = array(
     // 'path' => 'admin/settings/agbnagscreen',
      'title' => 'AGB nagscreen',
      'access callback' => user_access('Einstellungen von AGB aendern'), 
      //'access' => user_access('Einstellungen von AGB aendern'),
      'page callback' => 'drupal_get_form',
      'callback arguments' => array('agbnagscreen_settings_fapi'),
    );

    $items[AGBNAGSCREEN_NAGURL] = array(
     // 'path' => AGBNAGSCREEN_NAGURL,
      'title' => 'Allgemeine Geschaeftsbedingungen',
      'access' => TRUE,
      'callback' => 'drupal_get_form',
      'callback arguments' => array('agbnagscreen_fapi'),
      'type' => MENU_SUGGESTED_ITEM,
    );

  return $items;
}

Я думаю, что проблема в этой строке:

'page callback' => 'drupal_get_form',

Это правильно? Как я могу написать, что это работает?

1 Ответ

1 голос
/ 19 августа 2010

Возможно, вы захотите прочитать страницу справочника системы Drupal (Drupal 6.x) , чтобы понять изменения в системе меню: у вас есть несколько проблем в реализации hook_menu.

  1. Условие сверху никогда не сработает: Drupal 6 вызывает hook_menu() только при перестроении меню, а не при каждой загрузке страницы.
  2. Нет callback: используйте page callback.
  3. page callback принимает page arguments, а не callback arguments.
  4. Есть access: используйте access callback.
  5. access callback всегда строка, содержащая имя функции, а не функцию, и по умолчанию "user_access": вам необходимо указать access arguments.

Модифицированная версия вашей hook_menu реализации может быть:

function agbnagscreen_menu() {
  $items = array();

  $items['admin/settings/agbnagscreen'] = array(
    'title' => 'AGB nagscreen',
    'access arguments' => array('Einstellungen von AGB aendern'), 
    'page callback' => 'drupal_get_form',
    'page arguments' => array('agbnagscreen_settings_fapi'),
  );

  $items[AGBNAGSCREEN_NAGURL] = array(
    'title' => 'Allgemeine Geschaeftsbedingungen',
    'access arguments' => array('access content'),
    'page callback' => 'drupal_get_form',
    'page arguments' => array('agbnagscreen_fapi'),
    'type' => MENU_SUGGESTED_ITEM,
  );

  return $items;
}
...