Я пытаюсь найти самый простой способ объединить несколько файлов HTML в один файл HTML.Таким образом, я могу легко изменять части HTML или показывать их только на определенных страницах.Список файлов выглядит следующим образом:
- page.tpl (заголовок, нижний колонтитул, информация заголовка)
- sidebar.tpl (содержит блоки боковой и боковой панелей)
- nav.tpl (содержит ссылки навигации во вложенном UL)
Файл 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 nav list):
$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;
}
Любая помощь по правильной работе будет принята с благодарностью.
ОБНОВЛЕНИЕ: Это мой текущий файл 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), extract работает просто отлично.Пока я не попытаюсь включить файл page.tpl.
Файл page.tpl должен загружаться при каждом запросе страницы, который выводит что-либо.Поэтому я думаю, что мне нужна только тема ($ vars) вместо темы ($ tpl, $ vars = array ())
Есть ли способ, которым я могу включить page.tpl, не передавая его в theme (), в то время какпередать $ vars, чтобы $ vars ['nav'] переопределял тег <?php print $nav; ?>
в page.tpl?Спасибо.
решено : Чувак, я не могу поверить, что мне потребовалось так много времени, чтобы это исправить.Поскольку theme () возвращал данные и не отображал их, мне пришлось назначить $theme = theme('page.tpl', $vars);
, а затем echo $theme;
Кроме нескольких уведомлений PHP, это работает.