drupal 6:如何从自定义模块获取数据到模板文件

时间:2009-08-12 14:04:56

标签: drupal

我使用自定义模块在example.com/frontpage创建我主页的内容。

在模块中我运行一个查询,在数组中获取我需要的数据。当我返回主题('page',$ my_array)时,我得到“主页内的主页”,即默认的drupal徽标和网站名称在主要内容区域中第二次显示。

最好的方法是什么,创建一个特定的tpl.php文件,其内容应该是......?

我意识到这是一个非常普遍的问题,但是在2小时的尝试中,阅读教程我已经不是很远......

感谢

3 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,您只需返回内容而不通过theme_page运行。 theme_page获取您的内容并将其包装在网站模板中,因此在您的情况下手动调用它会复制模板。

另一种解决方案是让页面的回调函数不返回任何内容,而是打印 theme_page的输出。如果回调函数未返回任何文本,则不会自动包含该网站的模板。

<?php

function mymodule_menu() {
  $items = array();

  $items['option1'] = array(
    'title' => 'Front page option #1',
    'access arguments' => array('access content'),
    'page callback' => 'mymodule_option1',
    'type' => MENU_CALLBACK,
  );

  $items['option2'] = array(
    'title' => 'Front page option #2',
    'access arguments' => array('access content'),
    'page callback' => 'mymodule_option2',
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function mymodule_option1() {
  // build HTML content here
  return $content;
}

function mymodule_option2() {
  // build HTML content here
  print theme('page', $content);
  return null;
}

答案 1 :(得分:0)

使用'views'可能比自定义模块更好,unles查询主页真的很奇怪,视图应该比自定义模块更好。

如果您有自己的主题(或愿意创建主题),您可以使用page-front.tpl.php(如here所述)

答案 2 :(得分:0)

模板文件中有什么内容?这些元素是否可能被渲染两次,因为它们被包含两次,即一次在主题的page.tpl.php中,再一次在$content变量中(看起来由模块生成)? / p>

许多模板文件具有以下结构:

print $head;
print $logo, $search, $navbar, $messages;
print $content;
print $footer, $closure;

如果theme('page', $my_array)负责创建$content变量,并且$content已经包含$logo和朋友,那么它们将会被渲染两次。

我将在这个实例中采取的第一步是在我的主题的template.php文件中实现hook_preprocess_page(),并抛出一些dsm()调用(如果你安装了devel模块 - 你应该这样做) ,或print_r(),以确切了解页面模板的内容 HTH