Познаем Drupal вместе. Drupal создать страницу
Программное создание страницы в Drupal 7 >Познаем Drupal вместе
Наконец то продолжу рассказ про хуки. Что главное в любом сайте? Конечно же контент! А где контент находится? На страничках! Вот о создании страниц и поговорим.
В отличии от программного создания блоков, здесь все будет немного посложней, в первую очередь за счет большой функциональности используемого хука.
Для программного создания страницы нам прежде всего понадобится создать пустой модуль, после чего весь код будет писаться в файле modulename.module.
hook_menu()
Именно с помощью этого хука можно создать страничку в Drupal 7. Кроме того он же отвечает за элементы меню. Хук не принимает никаких аргументов, а возвращает ассоциативный массив элементов меню, каждый элемент такого массива содержит массив с атрибутами конкретного элемента меню, они могут быть следующими:
- title - заголовок элемента меню. Строка, которая будет отображаться в заголовке страницы и названии меню. Для неё не надо использовать функцию t(), но заголовок должен быть на английском языке. Обязательный элемент.
- title callback - функция обратного вызова для генерации заголовка. По умолчанию используется функция t(). Удобна для создания динамических заголовков.
- title arguments - аргументы для функции обратного вызова, генерации заголовка.
- description - описание элемента меню.
- page callback - название функции обратного вызова, для генерации страницы.
- page arguments - массив аргументов, которые будут переданы функции обратного вызова.
- delivery callback - функция доставки html в браузер. По умолчанию drupal_deliver_html_page().
- access callback - функция обратного вызова для определения прав доступа к странице/ элементу меню. По умолчанию user_access()
- access arguments - аргументы для функции определения прав доступа к элементу меню.
- theme callback - функция возвращающая машинное имя темы, которая будет использованная на странице.
- theme arguments - аргументы для "theme callback".
- file - название файла, в котором находится функция page callback.
- file path - путь к вышеназванному файлу. По умолчанию текущая директория модуля.
- load arguments - аргументы для функции загрузки. Об этом подробней в ближайшее время:)
- weight - вес элемента меню. Чем меньше, тем элемент выше.
- menu_name - название меню, в котором будет размещен новый элемент.
- context - определяет как будет отображаться ссылка в меню локальных задач, если является локальной задачей (local task). Может принимать одно из значений:
- MENU_CONTEXT_PAGE - только на странице материала.
- MENU_CONTEXT_INLINE - только как контекстная ссылка.
Так же можно использовать конструкцию 'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE
- tab_parent - родительский элемент для локальной задачи. По умолчанию это элемент на уровень выше.
- tab_root - ближайший элемент не являющийся локальной задачей. По умолчанию содержит значение заданное в tab_parent.
- position - позиция блока для этого элемента на странице администраторского меню ('left' или 'right').
- type - тип элемента меню. Может принимать следующие значения:
- MENU_NORMAL_ITEM - обычный элемент меню.
- MENU_CALLBACK - простая регистрация обратного вызова страницы, без создания элемента меню.
- MENU_SUGGESTED_ITEM - пункт меню, который необходимо включить администратору.
- MENU_LOCAL_ACTION - элемент меню является локальным действием.
- MENU_LOCAL_TASK - элемент меню является локальной задачей
- MENU_DEFAULT_LOCAL_TASK - локальная задача по умолчанию.
Если значение не заданно, то используется MENU_NORMAL_ITEM.
- options - массив опций для функции l(), с помощью которой генерируется html ссылки.
Конечно же подробную информацию об этом хуке можно найти в англоязычной официальной документации, на сайте Drupal.org
Реализация хука, создание страницы
С хуком немного разобрались, теперь можно его реализовать. Для этого в файле modulename.module, в простейшем случае, пишем следующий код:
/** * Implements hook_menu(). */function modulename_menu() { $items['mytestpage'] = array( 'title' => 'My test page', 'access callback' => TRUE, 'page callback' => 'mymodule_page_callback', 'type' => MENU_CALLBACK, );}
Такая реализация хука значит следующее - по адресу site.ru/mytestpage (или site.ru/?q=mytestpage) будет отображаться страничка с заголовком 'My test page', доступная для всех. Элемента меню для неё заданно не будет, а содержимое новой страницы возвращает функция mymodule_page_callback(). Теперь необходимо написать саму функцию обратного вызова, например так:
/*** Page callback.**/function mymodule_page_callback() { return t('Hello! I\'m your first page!');}
Теперь если зайти по адресу site.ru/mytestpage (если включены "чистые ссылки", если нет, то заходим по адресу site.ru/?q=mytestpage) , то можно увидеть страничку с надписью "Hello! I'm your first page!". Элементарная страничка создана.
В функцию обратного вызова можно передавать параметры. Все следующие за указанным в хуке адресом параметры автоматически будут переданы в функцию обратного вызова. И если, например, изменить callback функцию так:
/*** Page callback.**/function mymodule_page_callback($arg = 'Hello') { return t('@arg! I\'m your first page!', array('@arg' => $arg));}
То зайдя на сайт по ссылке site.ru/mytestpage/yo, на странице появится "yo! I'm your first page!". Кроме того, массив аргументов можно передать в хуке, элементу page arguments и использовать таким же образом.
Это далеко не все возможности hook_menu() - с его помощью можно установить контроль доступа к странице, управлять ссылками меню, создавать страницы с динамическими адресами (например как node/1, node/2 и т.д.), но обо всем этом в следующий раз. А на сегодня всё, успехов и до скорых встреч!
t-mail.spb.ru
Друпал как CMS. Создание страниц и меню
Я уже писал в прошлом уроке, что Друпал - это две связанных части CMS и CMF. В этом уроке мы рассмотрим как создаются простейшие сайты с помощью CMS Drupal.
Начну с того на какие части обычно разбивается сайт:
Header (верхняя, головная часть), это заголовок сайта, верхний блок. Здесь обычно размещается логотип и название сайта, контактная информация, имя пользователя или что-либо еще.
Left sidebar (Левая колонка сайта) и Right sidebar (Правая колонка сайта). Эти части сайта обычно используются для размещения меню, полей авторизации, новостей, информации о пользователе или любой другой текущей информации.
Content (Содержимое сайта, центральный блок с контентом). Эта часть основная, сюда выводится вся главная информация сайта: статьи, подробные описания новостей, списки информации и все остальное, что нужно разместить на сайте.
Footer (подвал, нижняя часть сайта). В этой части располагаются обычно копирайты и данные о создателя сайта, а также здесь может дублироваться полностью или частично основное меню.
Весь материал который мы будем размещать появляется в блоке сайта content, ссылки на размещаемый материал мы будем выкладывать в меню в левый sidebar. Создадим наш первый материал, тип материала выберем Page:
Вообще Page и Story не сильно отличаются, у них есть Заголовок (Title), содержание (Body) и другие схожие поля. Разница между Page и Story в том что Page нельзя комментировать, а Story можно.
Заполним поля Title и Body, а также раскроем поле меню и заполним его, родительским пунктом выберем Navigation. Нажимаем "сохранить" и наша новая страница создана.
Теперь ссылка на на страницу "О Сайте Друпал" появилась в меню слева. Это меню и есть Navigation. Если вы посмотрите в адресную строку, то наша новая страница имеет адрес имя_сайта/node/1. Давайте сделаем эту страницу главной на сайте. Для этого зайдем в Настройка сайта-О сайте и сделаем главную страницу с адресом node/1.
Теперь страница с адресом node/1 наша главная страница сайта. Давайте теперь добавим еще страниц на сайт и выберем ссылки на них в другом меню.
Заходим в Содержание-Создание материала-Page
Теперь вместо Navigation выберем Родительский пункт Primary links:
Теперь в header'е появилось меню Primary links, с пунктом Страница 2:
Создадим еще одну страницу и в настройках меню выберем родительский пункт Secondary links и у нас появится еще одно меню под Primary links.
Таким образом мы наполняем сайт материалами. Если Вам необходимо удалить пункт меню или добавить новый, поменять местами существующие пункты, то это можно сделать в настройках меню: Конструкция сайта-Меню-Список меню. Редактировать материал можно через Содержание-Содержимое-Список
В следующей статье мы рассмотрим как менять внешний вид нашего сайта.
drupalbook.ru
Использование hook_menu() для создания страниц в Drupal 7
hook_menu() используется для программного создания страниц и ссылок меню.
Разберем пример на основе модуля Menu example (машинное имя me) в котором мы создадим тестовую страницу для демонстрации работы с hook_menu().
Первым делом создадим файл cm.info:
name = Menu example description = Examples of using hook_menu() core = 7.x package = CustomДалее создадим файл cm.module и объявим в нем hook_menu():
/** * Implements hook_menu(). */ function me_menu() { $items['simple_page'] = array( 'title' => 'Simple page', 'page callback' => 'me_simple_page_content', 'access callback' => TRUE, 'menu_name' => 'main-menu', 'file' => 'me.pages.inc', 'options' => array('attributes' => array('class' => array('test-class'))), ); return $items; }Каждой объявленной странице мы передаем некоторый набор настроек. Рассмотрим представленные в этом примере:
- title - Заголовок страницы. Передаваемое значение не должно быть завернуто в функцию t().
- page callback - функция возвращающая содержимое страницы (ее мы определим в файле me.pages.inc.
- access callback - функция определяющая доступ к данной странице. Если эта функция возвращает TRUE значит пользователь имеет доступ, если FALSE - нет. В нашем случае мы сразу передаем TRUE, что означает что все пользователи имеют доступ.
- menu_name - машинное имя меню в котором будет создана ссылка на эту страницу.
- file - имя файла в котором содержится функция объявленная в page callback, если не указано значит функция содержится в том же файле что и hook_menu(), но по правилам хорошего тона следует выносить все подобные функции в файл MODULENAME.pages.inc.
- options - массив с параметрами которые будут переданы в функцию l() при генерации ссылки в меню.
Теперь создадим файл me.pages.inc и объявим в нем функцию me_simple_page_content:
/** * Simple page content. */ function me_simple_page_content() { return 'Content of simple page'; }В данном случае мы в качестве содержимого страницы возвращаем простую строку.
Включаем модуль:
Видим что в главном меню появилась новая страница Simple page
Теперь рассмотрим как создать табы для страницы Simple page. Для этого добавим в hook_menu() еще два элемента:
$items['simple_page/main-tab'] = array( 'title' => 'Simple page (main tab)', 'page callback' => 'me_simple_page_content', 'access callback' => TRUE, 'menu_name' => 'main-menu', 'file' => 'me.pages.inc', 'type' => MENU_DEFAULT_LOCAL_TASK, ); $items['simple_page/sub-tab'] = array( 'title' => 'Simple page (sub tab)', 'page callback' => 'me_simple_page_content', 'access callback' => TRUE, 'menu_name' => 'main-menu', 'file' => 'me.pages.inc', 'type' => MENU_LOCAL_TASK, );Тут надо обратить внимание на свойство type оно может иметь следующие значения:
- MENU_NORMAL_ITEM - страница со ссылкой в меню (ссылка может быть скрыта администратором). Этот тип является типом по умолчанию, поэтому для страницы Simple page мы его не указывали.
- MENU_CALLBACK - станица без ссылки в меню.
- MENU_SUGGESTED_ITEM - тоже что MENU_NORMAL_ITEM но создаваемая в меню ссылка по умолчанию отключена.
- MENU_LOCAL_ACTION - создает ссылку на страницу какого-то действия связанно с контекстом текущей страницы (например ссылка Добавить блок в разделе Блоки).
- MENU_LOCAL_TASK - используется для создания таба
- MENU_DEFAULT_LOCAL_TASK - используется для создания таба по умолчанию
При создании табов один из них всегда должен иметь тип MENU_DEFAULT_LOCAL_TASK (таб по умолчанию), а остальные MENU_LOCAL_TASK. Также они должны иметь одинаковый базовый путь (в нашем случае это simpe_page).
Чистим кэш и смотрим как изменилась наша страница:
Теперь создадим страницу локального действия, для этого добавим еще один элемент в hook_menu():
$items['simple_page/sub-tab2'] = array( 'title' => 'Simple page (local action)', 'page callback' => 'me_simple_page_content', 'access callback' => TRUE, 'menu_name' => 'main-menu', 'file' => 'me.pages.inc', 'type' => MENU_LOCAL_ACTION, );Чистим кэш и смотрим на результат:
Напоследок рассмотрим список остальных настроек для страниц:
- title callback - имя функции возвращающей заголовок страницы, по умолчанию это t().
- title arguments - массив аргументов передаваемых в функцию объявленную в title callback.
- description - описание создаваемой ссылки меню.
- page arguments - массив аргументов передаваемых в page callback.
- access arguments - массив аргументов передаваемых в access callback.
- weight - вес создаваемой ссылки меню
drupal-learning.com