Drupal 7 - 如何从模块加载模板文件?

时间:2011-03-14 22:01:21

标签: drupal drupal-theming

我正在尝试在Drupal 7中构建自己的模块。

所以我创建了一个名为'moon'的简单模块

function moon_menu() {
  $items = array();
      $items['moon'] = array(
      'title' => '',
      'description' => t('Detalle de un Programa'),
      'page callback' => 'moon_page',
      'access arguments' => array('access content'),
      'type' => MENU_CALLBACK
  );

  return $items;
}

function moon_page(){


$id = 3;

$content = 'aa';

}

在moon_page()函数中,我喜欢从我的主题文件中加载自定义模板“moon.tpl.php”。

这可能吗?

5 个答案:

答案 0 :(得分:15)

/*
 * Implementation of hook_theme().
 */
function moon_theme($existing, $type, $theme, $path){
  return array(
    'moon' => array(
      'variables' => array('content' => NULL),
      'file' => 'moon', // place you file in 'theme' folder of you module folder
      'path' => drupal_get_path('module', 'moon') .'/theme'
    )
  );
}

function moon_page(){

  // some code to generate $content variable

  return theme('moon', $content); // use $content variable in moon.tpl.php template
}

答案 1 :(得分:10)

对于你自己的东西(不是覆盖另一个模块的模板)?

当然,你只需要:

  • 使用hook_theme()

  • 注册模板
  • 致电主题('月亮',$ args)

$ args是一个数组,其中包含hook_theme()实现指定的模板参数。

答案 2 :(得分:3)

对于Drupal 7,它对我没用。我在hook_theme中替换了行

'file' => 'moon', by 'template' => 'moon' 

现在它正在为我工​​作。

答案 3 :(得分:3)

在drupal 7中,我在使用时遇到以下错误:

return theme('moon', $content);

导致“致命错误:第1071行drupal_install \ includes \ theme.inc中不支持的操作数类型”

使用以下方法解决了这个问题:

theme('moon', array('content' => $content));

答案 4 :(得分:0)

您可以使用moon_menu,使用hook_theme

<?php

/**
 * Implementation of hook_menu().
 */
function os_menu() {
  $items['vars'] = array(
    'title' => 'desc information',
    'page callback' => '_moon_page',
    'access callback' => TRUE,
    'type' => MENU_NORMAL_ITEM,
  );
  return $items;
}

function _moon_page() {    
  $fields = [];
  $fields['vars'] = 'var';

  return theme('os', compact('fields'));
}

/**
 * Implementation of hook_theme().
 */
function os_theme() {
  $module_path = drupal_get_path('module', 'os');

  return array(
    'os' => array(
      'template' => 'os',
      'arguments' => 'fields',
      'path' => $module_path . '/templates',
    ),
  );
}