将自定义页面模板应用于Drupal 7模块中的内容

时间:2014-02-27 19:23:35

标签: drupal-7 drupal-modules drupal-theming drupal-fapi

我正在开发一个Drupal模块。部分内容会打开一个弹出窗口,在其中显示一些元素,并使用JavaScript将输入传输回主页。

由于这是一个小窗口,我不希望它显示网站主题的完整主题边框。

在Drupal 6中,我能够通过以下方式实现这一目标:

function MyPopupPageHandler() {
  @content = "Content...";
  //Add additional content to @content;
  print theme("page", @content);
}

然而,Drupal 7期望theme()函数的第二个参数是一个数组,我见过的所有例子都没有显示我如何设置页面的主要内容。

我想要的是模块中的自定义页面模板,如果提供的话,可以被网站主题覆盖。

我想知道:

  1. 我需要将哪些元素放入数组中,然后传递给theme()函数?
  2. 我应该如何调用我的模板文件?
  3. 如何告诉Drupal在哪里找到我的模板,因为它默认需要在模块中?
  4. 感谢您提供的任何帮助。

    詹姆斯

2 个答案:

答案 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)