2009-08-12 145 views
3

即时通讯使用自定义模块在example.com/frontpage创建我的主页内容。drupal 6:如何从自定义模块中获取数据到模板文件

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

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

我意识到它是一个非常普遍的问题,但在2个小时的努力的事情了,阅读教程,香港专业教育学院变得不是很远都...

感谢

回答

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; 
} 
+0

选项1工作,没有意识到var名称必须是$内容。现在我在我的主页上看到Array。所以我需要在mymodule_option1函数中构建完整的html?是不是你的意思是把PHP中的HTML不在PHP中的HTML? – stef 2009-08-12 14:27:46

+0

选项2工作更好;谢谢ceejayoz! – stef 2009-08-12 14:32:19

+1

如果你想使它成为真正的Drupalish,你应该制作一个主题函数,使得实际的HTML,而你的菜单回调做的逻辑。这是contrib模块可以覆盖它们的输出。但是,在一个自定义站点模块中,这个功能并不重要。除此之外,好的回应+1 – googletorp 2009-08-12 14:52:39

0

你可能是比一个自定义模块“若干意见”,unles查询的网页更好的是很奇怪的,观点应该比那种事情的自定义模块更好。

如果你有自己的主题(或愿意创建一个),你还可以使用网页front.tpl.php(如解释here

+0

面板+视图在许多情况下会更好。 – ceejayoz 2009-08-12 14:15:01

+0

与一位同事一起尝试使用,而不是工作。我需要一些其他的逻辑,这是不可能的。 – stef 2009-08-12 14:20:57

+0

本应该是“使用意见,不工作” – stef 2009-08-12 14:22:54

0

是什么在你的模板文件?这些元素是否有可能被呈现两次,因为它们被包含两次,即一次在主题的page.tpl.php中,另一次在$content变量(它看起来是由您的模块生成的)中?

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

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

相关问题