我使用自定义模块在example.com/frontpage创建我主页的内容。
在模块中我运行一个查询,在数组中获取我需要的数据。当我返回主题('page',$ my_array)时,我得到“主页内的主页”,即默认的drupal徽标和网站名称在主要内容区域中第二次显示。
最好的方法是什么,创建一个特定的tpl.php文件,其内容应该是......?
我意识到这是一个非常普遍的问题,但是在2小时的尝试中,阅读教程我已经不是很远......
感谢
答案 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