我正在尝试找到将多个html文件合并为一个html文件的最简洁方法。这样我就可以轻松更改部分HTML或仅在某些页面上显示它们。文件列表如下:
page.tpl文件如下所示:
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="Brandon" />
<meta name="robots" content="noindex,nofollow" />
<meta name="keywords" content="" />
<meta name="description" content="" />
<?php print $stylesheets; ?>
<?php print $scripts; ?>
</head>
<body>
<section id="wrapper">
<header>Header Title</header>
<nav><?print $nav; ?></nav>
<section><?php print $content; ?></section>
<aside> <?php print $sidebar; ?><aside>
<footer>© 2011 Brandon License: GPLv2</footer>
</section>
</body>
</html>
我必须包括一切的主要功能是:
function theme($tpl, $vars = array()) {
extract($vars);
ob_start();
require($tpl);
$template = ob_get_contents();
ob_end_clean();
return $template;
}
$ tpl设置为page.tpl文件。
我在主题函数上方尝试$vars['nav'] = file_get_contents('nav.tpl');
只是为了给它一些数据。如果我删除$ tpl变量和require()
函数,我会看到UL导航列表,但是当我将page.tpl文件重新添加回来时,我收到此错误:
Warning: extract() expects parameter 1 to be array, null given
这有效(显示UL导航列表):
$vars['nav'] = file_get_contents('nav.tpl');
function theme($vars = array()) {
extract($vars);
ob_start();
$template = ob_get_contents();
ob_end_clean();
return $template;
}
这不是:
$vars['nav'] = file_get_contents('nav.html');
theme('page.html', $vars) //page.html is set to correct directory.
function theme($tpl, $vars = array()) {
extract($vars);
ob_start();
require($tpl);
$template = ob_get_contents();
ob_end_clean();
return $template;
}
任何有关让它正常工作的帮助将不胜感激。
UPDATE :这是我当前的index.php文件:
<?php
define('ROOT_DIR', getcwd());
require_once(ROOT_DIR . '/core/includes/boot.inc');
boot_start(BOOT_FULL);
// Based off of Drupal's drupal_bootstrap(). Set's ini_set's, database
//and starts sessions. This works just fine and I haven't coded any
//theme/template code into it. The only thing boot_start() does for theme is
//load the .inc file that has the theme() function. The .inc gets included
// otherwise I would have gotten a "call to unknown function" error.
$vars['nav'] = file_get_contents(ROOT_DIR . '/core/templates/nav.tpl');
theme('./core/templates/page.tpl', $vars);
我不太明白为什么我从extract()
收到错误。当我添加$vars['nav']
而不包括'include($ tpl)'时,提取工作正常。直到我尝试包含page.tpl文件。
应该在每个输出任何内容的页面请求上加载page.tpl文件。所以我认为我只需要主题($ vars)而不是主题($ tpl,$ vars = array())
有没有办法可以包含page.tpl而不将其传递给theme(),同时传递$ vars以便$ vars ['nav']覆盖page.tpl中的<?php print $nav; ?>
标记?感谢。
已解决:伙计,我不敢相信我花了很长时间才解决这个问题。由于theme()返回并且没有回显数据,我不得不分配$theme = theme('page.tpl', $vars);
然后echo $theme;
除了一些PHP通知,它还可以。
答案 0 :(得分:0)
我个人只想为各个部分制作一个文件。然后包括它们。
<?php include('relative/link.php'); ?>
如果你想编辑一个部分中的内容,我会使用变量
的header.php
echo $foo;
的index.php
$foo='bar';
include('header.php');
当我们包含一个文件时,它会抓取内容并将其注入当前文件中,然后进行处理。