Drupal API

page_example_menu

  • Drupal 5
  • Drupal 6
Хочешь помочь с переводом? Это очень просто и быстро. Лишь зарегистрируйся, и можешь тут же начать переводить.

developer/examples/page_example.module, строка 65

Версии
5
page_example_menu($may_cache)
6
page_example_menu()

Реализация hook_menu().

Вам необходимо реализовать hook_menu(), чтобы разместить свои страницы в системе меню Друпала. Это дает Друпалу понять, какая функция (page callback) формирует контент по заданному URL-у.

Приведенные ниже определения элементов меню интерпретируются следующим образом:

Если пользователь посетит страницу http://example.com/foo, система меню ищет функцию, которая соответствует адресу 'foo'. В данном случае, page_example_foo. Затем система меню проверит, есть ли у пользователя разрешение 'access foo', и лишь потом, если у пользователя есть это разрешение, система меню запустит фукцию page_example_foo() и выведет ее результат.

Если пользователь посетит страницу http://example.com/bar, соответствия в системе меню не будет найдено и будет возвращена страница 404.

Если пользователь посетит страницу http://example.com/bar/baz/hello/123, система меню в первую очередь поищет точное соответствие с 'bar/baz/hello/123'. Не найдя его, она попытается поискать соответствие с 'bar/baz/hello/%' (где "процентик" может быть равен любому значению, кроме слеша или быть пустым). Не найдя и такого, она продолжит с 'bar/baz/%/123'. Опять не найдя, попробует 'bar/baz/%/%', и здесь уже найдет наш элемент меню с коллбеком page_example_baz(). При этом, обратите внимание на аттрибут 'page arguments', который определяет какие данные следует передать в 'page callback'. Цифры означают индексы составных частей адреса между слешами. В конечном итоге, мы вызовем page_example_baz('hello', 123). Это является основным методом передачи параметров элементу меню через адрес страницы в системе меню Друпала.

Примечательно также, что если пользователь посетит страницу http://example.com/bar/baz, соответствие тоже будет найдено (page_example_baz). Резонный вопрос — почему, ведь в определении элемента меню прописан не совсем такой путь? Однако, все просто — "процентики" не обязывают присутствие данных в них.

Ну и конечно же, перед запуском и отдачей page_example_baz(), пройдет проверка разрешения 'access baz'.

Код

<?php
function page_example_menu() {
  // This is the minimum information you can provide for a menu item.
  $items['foo'] = array(
    'title' => 'Foo',
    'page callback' => 'page_example_foo',
    'access arguments' => array('access foo'),
  );
  // By using the MENU_CALLBACK type, we can register the callback for this
  // path but not have the item show up in the menu; the admin is not allowed
  // to enable the item in the menu, either.
  //
  // Notice that the 'page arguments' is an array of numbers. These will be
  // replaced with the corresponding parts of the menu path. In this case a 0
  // would be replaced by 'bar', a 1 by 'baz', and like wise 2 and 3 will be
  // replaced by what ever the user provides. These will be passed as arguments
  // to the page_example_baz() function.
  $items['bar/baz/%/%'] = array(
    'title' => 'Baz',
    'page callback' => 'page_example_baz',
    'page arguments' => array(2, 3),
    'access arguments' => array('access baz'),
    'type' => MENU_CALLBACK,
  );
  return $items;
}
?>

Пользовательские комментарии

вместо % может быть не только число, а что угодно. аргументы нумеруются с 0, т.е.

bar - 0
baz - 1
%   - 2
%   - 3

Однако, все просто — "процентики" не обязывают присутствие данных в них. --- Однако, не работает.Никто не в курсе в чём проблемма?

Перевод вроде верный.Но тем не менее, без данных в % - страница не найдена.

Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вход в систему

Что такое OpenID?
  • Регистрация
  • Забыли пароль?

Документация

  • Drupal 6
  • Константы
  • Файлы
  • Функции
  • Глобальные переменные
  • Разделы