Объединение нескольких файлов HTML в один и возвращение вывода - PullRequest
1 голос
/ 15 октября 2011

Я пытаюсь найти самый простой способ объединить несколько файлов HTML в один файл HTML.Таким образом, я могу легко изменять части HTML или показывать их только на определенных страницах.Список файлов выглядит следующим образом:

  1. page.tpl (заголовок, нижний колонтитул, информация заголовка)
  2. sidebar.tpl (содержит блоки боковой и боковой панелей)
  3. 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>&copy; 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, это работает.

1 Ответ

0 голосов
/ 15 октября 2011

Лично мне просто нравится делать файл для отдельных частей. а затем включите их.

<?php include('relative/link.php'); ?>

если вы хотите редактировать содержимое раздела, я бы использовал переменные.
header.php

echo $foo;

index.php

$foo='bar';
include('header.php');

когда мы включаем файл, он захватывает содержимое и вставляет его в текущий файл, а затем обрабатывает его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...