drupal模块页面

时间:2011-03-17 21:27:35

标签: drupal drupal-6 module

我有一个概念性的障碍。 所以,我想制作一个自定义的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内部生成的,这让我对如何制作我的{我感到非常困惑{1}},...,mysite.com/mymodule/step2页面

我有直觉,每个页面的代码都应该在它自己的相应文件中,我不知道怎么做,这似乎不是正确的方法。

你能解释一下我应该怎么做,文件应该去哪里(和我的其他模块文件一样,对吗?),以及它可以查看的URL?

1 个答案:

答案 0 :(得分:10)

到目前为止,您所做的事情大多是正确的(每个项目的“标题”键必需,因此请务必加入)。由于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()放在单独的文件中,您可以使用文件文件路径键(见下文)

 $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处的每个页面,{{1}等等。

页面处理程序包含文件的最佳做法(详情请见http://drupal.org/node/146172):

  

模块开发人员可以自由地为他们选择的模块拆分页面处理程序。但是,建议遵循以下准则和标准:

     
      
  • 对于页面处理函数(包括表单处理函数,如果适用)具有超过约50行代码的任何模块应将它们拆分为单独的文件。这样可以减少加载模块时PHP的开销,从而加快网站上的每一个请求。
  •   
  • 页面包含文件应以modulename.key.inc的形式命名,其中“modulename”是模块的名称,“key”是它包含的页面处理程序类型的单字描述术语。
  •   
  • 对于大多数模块,将页面处理程序拆分为两个文件 - example.admin.inc(仅适用于管理员页面)和example.pages.inc(适用于非管理员用户可访问的页面) - 已足够,并且推荐的做法。如果模块没有非管理员页面,它应该只有一个example.admin.inc文件。如果模块没有仅限管理员的页面,则它应该只有一个example.pages.inc文件。
  •   
  • 具有大量页面处理程序的模块可以选择进一步分离页面处理程序。如果是这样,每个文件应按功能进行逻辑分组(例如,与主题相关的管理页面,与日志记录相关的管理页面,其他管理页面和用户可访问的页面)并清楚地标记。请记住,将模块的页面处理程序拆分太多会使维护变得更加困难,并且只需要加载一个页面处理程序包含文件,无论处理程序函数的细分程度如何。
  •   

仅供参考:hook_menu() documentation

page_example.module也可能对您有所帮助。