rlb*_*usa 6 drupal module drupal-6
我有一个概念性的障碍.所以,我想制作一个自定义的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);
}
Run Code Online (Sandbox Code Playgroud)
当我去的时候mysite.com/mymodule/landingpage,我看到了生成的内容mymodule_landing().
但这似乎不是我想要做的,因为内容landingpage是在内部产生的mymodule.module,这让我对如何制作我的mysite.com/mymodule/step2......,mysite.com/mymodule/step99页面感到非常困惑.
我有直觉,每个页面的代码应该在它自己的相应文件中,而我不知道如何去做,这似乎不是正确的方法.
你能解释一下我应该怎么做,文件应该去哪里(用我的其他模块文件,对吗?),以及它可以查看的URL?
Lax*_*n13 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,
);
Run Code Online (Sandbox Code Playgroud)
等等......您可以使用相同的页面回调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'),
);
Run Code Online (Sandbox Code Playgroud)
你应该把你的模块目录到这些文件(或模块目录内的子目录,并设置了正确的文件路径),并可以在访问的每一页mysite.com/mymodule/landingpage,mysite.com/mymodule/step2等等.
页面处理程序包含文件的最佳实践(更多信息,请访问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()文档
该page_example.module也可能对你有所帮助.
| 归档时间: |
|
| 查看次数: |
3090 次 |
| 最近记录: |