Включая файлы шаблонов и динамически изменяемые в них переменные - PullRequest
1 голос
/ 21 декабря 2009

Чтобы сделать жизнь немного проще для себя, я хотел бы создать очень простой шаблонизатор для своих проектов. Что-то, что я имел в виду, - это наличие в каталоге файлов .html, которые включаются на страницу с использованием PHP, когда я этого хочу. Таким образом, типичный index.php будет выглядеть так:

<?php

IncludeHeader("This is the title of the page");
IncludeBody("This is some body content");
IncludeFooter();

?>

Что-то в этом роде, и тогда в моих файлах шаблонов будет:

<html>
<head>
    <title>{PAGE_TITLE}</title>
</head>
<body>

Но я не могу понять, как это сделать - передать параметр в функции и заменить {PAGE_TITLE} на него.

У кого-нибудь есть решение или, возможно, лучший способ сделать это? Спасибо.

Ответы [ 5 ]

1 голос
/ 21 декабря 2009

Почему бы просто не использовать php?

<html>
<head>
    <title><?=$pageTitle; ?></title>
</head>
<body>
1 голос
/ 21 декабря 2009

Для простоты, почему бы не использовать файлы .php с ярлыками PHP вместо {PAGE_TITLE} или тому подобное?

<html>
<head>
    <title><?=$PAGE_TITLE?></title>
</head>
<body>

Затем, чтобы изолировать пространство переменных, вы можете создать функцию загрузки шаблона, которая работает следующим образом:

function load_template($path, $vars) {
    extract($vars);
    include($path);
}

Где $ vars - это ассоциативный массив, ключи которого равны именам переменных, а значения равны значениям переменных.

0 голосов
/ 21 декабря 2009

Это трюк, который я видел в некоторых фреймворках:

// Your function call
myTemplate('header',
    array('pageTitle' => 'My Favorite Page',
          'email' => 'joe@bob.com',
    )
);

// the function
function myTemplate($filename, $variables) {
    extract($variables);
    include($filename);
}

// the template:
<html>
<head>
    <title><?=$pageTitle?></title>
</head>
<body>
    Email me here<a href="mailto:<?=$email?>"><?=$email?></a>
</body>
</html>
0 голосов
/ 21 декабря 2009

Как вы понимаете, PHP сам по себе является механизмом шаблонов. Тем не менее, есть несколько проектов, которые добавляют тип шаблонов, который вы описываете. Один из них, который вы, возможно, захотите исследовать: Smarty Templates . Возможно, вы также захотите ознакомиться с статьей , опубликованной на SitePoint , описывающей движки шаблонов в целом.

0 голосов
/ 21 декабря 2009

Самое простое, что можно сделать, это примерно так:

<?php
function IncludeHeader($title)
{
    echo str_replace('{PAGE_TITLE}', $title, file_get_contents('header.html'));
}
?>
...