如何在Drupal 7中制作模块的模板文件?

时间:2011-08-05 21:48:30

标签: drupal drupal-7 drupal-views drupal-modules

我觉得我必须非常接近,但我只是稍微没有正确渲染我的第一个Drupal模块(当然下一步是通过ajax提交和处理表单,猜猜我不是相当远离树林)

无论如何,从“Pro Drupal Development 7”开始,阅读并在堆栈上询问一些问题,我已经达到了设置Drupal模块的程度。

 \sites\all\modules\custom\mymodule
  ---- mymodule.info
  ---- mymodule.css
  ---- mymodule.js
  ---- mymodule.tpl
  ---- mymodule.module

所有要求似乎都能正常运行,以便将模块放入我的阻止列表,CSS和&如果我选择查看源代码,则JS在页面上可见。

出于测试目的,我的TPL文件中包含以下内容。

 <h1> HERE </h1>

模块文件(根据我的理解,它是我编写主题钩子的地方)具有以下(从我收集的内容)关键功能。

function mymodule_theme($existing, $type, $theme, $path){
  return array(
    'mymodule' => array(
        'variables' => array('content' => "FOO"),
        'file'      => 'mymodule', 
        'path'      => drupal_get_path('module', 'mymodule') 
    )
  );
}

function mymodule_page(){

  $content = "";
  return theme('mymodule', $content); 
}

我很确定我只是有一个小的,相对简单的问题 - 但是我自己已经打了一个小时。有谁知道答案,我在这里错过了什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

嘿,未来发现这个的人...事实证明,在drupal中呈现页面视图的函数是<modulename>_block-view该块的内容是什么被渲染。

function mymodule_block_view($delta = '') {
$build['mymodule'] = array(
    '#theme' => 'mymodule',
    '#title' => "FOO"
);

$block['subject'] = t('Title of second block (example_empty)');
// $block['content'] = drupal_render($build); // this was wrong
$block['content'] = $build;

return $block;

}

我通过下载和单步执行

中的代码找到了示例

http://drupal.org/project/examples

专门解压缩并将此http://ftp.drupal.org/files/projects/examples-7.x-1.x-dev.zip安装到/sites/all/modules,您可以在自己的drupal网站上看到实时示例,而单步执行代码。

注意:以下NMC的答案是正确的,因为模块文件必须重命名为mymodule.tpl.php

编辑根据下面的评论,不需要在注释掉的行上进行drupal_render调用。它在一个环境中工作,但在另一个环境中不工作。最好不要为了一致性而这样做。

答案 1 :(得分:1)

尝试

function mymodule_theme($existing, $type, $theme, $path){
  return array(
    'mymodule' => array(
        'variables' => array('content' => "FOO"),
        'template'  => 'mymodule', 
    )
  );
}

并将您的mymodule.tpl重命名为mymodule.tpl.php