страницы модуля Drupal - PullRequest
       13

страницы модуля Drupal

6 голосов
/ 18 марта 2011

У меня концептуальное препятствие. Итак, я хотел бы создать собственный модуль Drupal с несколькими различными страницами, каждая из которых «делает вещи».

Я не понимаю, как создавать / интегрировать разные страницы в мой модуль и каковы их URL-адреса.

У меня есть это:

 /* FILE : mymodule.module */
 function mymodule_menu() { 

   $items = array(); 
   $items['mymodule/landingpage'] = array( 
    'page callback' => 'mymodule_landing',
    'access arguments' => array('access content'),
    'type' => MENU_NORMAL_ITEM,
   );  
   return $items; 
 }

 function mymodule_landing() { 

   $title = 'Hello World'; 
   $content ='This is a simple Hello World Proof of Concept'; 
   return theme_box($tile, $content); 
 }

И когда я перехожу на mysite.com/mymodule/landingpage, я вижу контент, сгенерированный mymodule_landing().

Но это не похоже на то, что я хочу сделать, потому что контент для landingpage генерируется внутри mymodule.module, и это сильно запутывает меня в отношении того, как я буду делать свои mysite.com/mymodule/step2, .., mysite.com/mymodule/step99 страниц

У меня есть ощущение, что код для каждой страницы должен быть в своем собственном соответствующем файле, и я не понимаю, как это сделать, это не похоже на правильный путь.

Можете ли вы объяснить, как я должен это делать, куда должен идти файл (вместе с другими файлами моего модуля, верно?) И по какому URL он будет доступен для просмотра?

1 Ответ

10 голосов
/ 18 марта 2011

То, что вы делаете до сих пор, в основном правильно (клавиша «title» требуется для каждого элемента, поэтому обязательно включите ее). Так как page callback направлено на mymodule_landing(), содержимое, возвращаемое этой функцией, будет отображаться как ваше содержимое на странице.

Чтобы создать больше страниц (например, step2, step99 и т. Д.), Вы должны продолжить создавать дополнительные пути в mymodule_menu(), например:

$items['mymodule/step2'] = array( 
  'title' => 'Step 2',  // Required
  'page callback' => 'mymodule_step2',
  'access arguments' => array('access content'),
  'type' => MENU_NORMAL_ITEM,
); 

И так далее ... Вы могли бы использовать один и тот же обратный вызов страницы mymodule_landing() и просто передавать "аргументы страницы", или каждый из них может иметь свой собственный обратный вызов страницы.

Чтобы поместить вашу функцию mymodule_landing() в отдельный файл, вы можете использовать клавиши file и path * (см. Ниже)

 $items['mymodule/landingpage'] = array( 
   'title' => 'Landing Page',  // Required
   'page callback' => 'mymodule_landing',
   'access arguments' => array('access content'),
   'type' => MENU_NORMAL_ITEM,
   'file' => 'mymodule.pages.inc',
   'file path' => drupal_get_path('module', 'mymodule'),
 );  

Вы должны поместить эти файлы в каталог вашего модуля (или в подкаталог внутри каталога модуля и указать правильный путь к файлу ) и иметь доступ к каждой странице в mysite.com/mymodule/landingpage, mysite.com/mymodule/step2 и т. Д.

Рекомендации по включению файлов обработчика страниц (подробнее на http://drupal.org/node/146172):

Разработчики модулей могут по своему усмотрению разделять обработчики страниц для своих модулей. Тем не менее, рекомендуется следующее руководство и стандарты:

  • Любой модуль, имеющий более ~ 50 строк кода для функций обработчика страниц (включая функции обработки форм, если применимо), должен разбивать их на отдельный файл. Это уменьшает накладные расходы на PHP при загрузке модулей и, следовательно, ускоряет каждый запрос на сайте.
  • Включаемые файлы страниц должны быть названы в форме modulename.key.inc, где «modulename» - это имя модуля, а «ключ» - это однословный описательный термин для типов обработчиков страниц, которые он включает.
  • Для большинства модулей достаточно разбить обработчики страниц на два файла - example.admin.inc (для страниц только для администратора) и example.pages.inc (для страниц, доступных пользователям без прав администратора), и является достаточным рекомендуемая практика. Если в модуле нет страниц без прав администратора, у него должен быть только один файл example.admin.inc. Если у модуля нет страниц, предназначенных только для администратора, у него должен быть только один файл example.pages.inc.
  • Модули, которые имеют большое количество обработчиков страниц, могут разделить обработчики страниц еще дальше. Если это так, каждый файл должен быть логически сгруппирован по функциям (например, страницы администратора, связанные с тематикой, страницы администратора, связанные с ведением журнала, другие страницы администратора и страницы, доступные для пользователя) и четко помечены. Помните, что разделение обработчиков страниц модуля слишком далеко усложняет обслуживание, и загружается только один включаемый файл обработчика страниц, независимо от того, насколько тонко разделены функции обработчика.

Добавлено только для справки: Документация hook_menu ()

Вам также может помочь page_example.module .

...