我正在开发一个Drupal模块。部分内容会打开一个弹出窗口,在其中显示一些元素,并使用JavaScript将输入传输回主页。
由于这是一个小窗口,我不希望它显示网站主题的完整主题边框。
在Drupal 6中,我能够通过以下方式实现这一目标:
function MyPopupPageHandler() {
@content = "Content...";
//Add additional content to @content;
print theme("page", @content);
}
然而,Drupal 7期望theme()函数的第二个参数是一个数组,我见过的所有例子都没有显示我如何设置页面的主要内容。
我想要的是模块中的自定义页面模板,如果提供的话,可以被网站主题覆盖。
我想知道:
感谢您提供的任何帮助。
詹姆斯
答案 0 :(得分:2)
试试这个 首先在.module文件中创建一个菜单
function MYMODULE_menu()
{
$items['Demo'] =array(
'title' => 'Demo Page',
'page callback' => 'demo_page', // call a function
'access arguments' => array('access content'),
);
return $items;
}
创建函数后
function demo_page()
{
$select = db_select('node', 'n');
$select = $select->fields('n', array('id'))
->extend('PagerDefault');
$queried_nodes = $select->execute()
->fetchAllAssoc('id');
$pager = theme('pager');
return theme('demo_template', array('nodes' => $queried_nodes , 'pager' => $pager)); // call a theme or you have no pass any argument in theme to change a 'nodes'=> NULL or 'pager'=>NULL
}
创建主题函数后
function MYMODULE_theme()
{
return array(
'demo_template' => array(
'template' => 'demo-page',//this is file name of template file
'variables' => array('nodes' => NULL,'pager' => NULL), //this is pass avarible of templates file
'path' => drupal_get_path('module', 'MYMODULE_NAME').'/template' // set a path of file
),
);
}
在sites / all / modules / MYMODULENAME / template /
中创建文件名如demo-page.tpl.php之后并清除缓存
答案 1 :(得分:0)
1)theme()
函数的第二个参数必须是关联数组。您的功能应如下所示:
function MYMODULE_custom_function() {
$content = "Some stuff";
return theme('MYMODULE_custom_output', array('content' => $content));
}
2)我想你的意思是“我应该在哪里调用我的模板文件?”在同一hook_theme()
文件中的.module
函数中:
function MYMODULE_theme() {
return array(
'MYMODULE_custom_output' => array(
'variables' => array('content' => array()),
// You can also use template file here : 'template' => 'MYMODULE-template'
// OR use the following theme_function() if you don't want to create a new file
),
);
}
// If you don't use template file
function theme_MYMODULE_custom_output($variables) {
$output = // Arrange your html output here
return $output;
}
3)如果您决定使用自定义模板文件,请告诉您在哪里找到自定义模板文件,您可以阅读:https://drupal.org/node/715160,我希望它会有所帮助。
请保持放纵,因为我仍然是Drupal的新人,我确实尽力在这里:o)