Я создал собственную систему шаблонов PHP, и то, как я ее создал, кажется неэффективным. Тремя основными целями для моего шаблона было:
- Извлечение всех элементов HTML всего сайта из файла template.tpl.
- Уметь динамически назначать контент в template.tpl (например,
<title>
или <script>
)
- Будьте максимально эффективными и масштабируемыми.
В итоге моя система шаблонов выглядела примерно так:
randomPage.php
<?php
// declare any page specific resources
$pageTitle = "Random Sub-Title";
$pageResources = "/css/someRandomCSS.css"
$pageContent = "/randomPage.tpl"
// include the generic page template
include dirname($_SERVER['DOCUMENT_ROOT']).'/includes/template.tpl'
?>
randomPage.tpl
<h1><?=$pageTitle?></h1>
<p>Some random page's content</p>
template.tpl
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Site -- <?=$pageTitle?></title>
<link href="/css/styles.css" rel="stylesheet" type="text/css">
<link href="<?=pageResources?>" rel="stylesheet" type="text/css">
</head>
<body>
<? include $pageContent ?>
</body>
</html>
Основная проблема этой системы заключается в том, что для каждой веб-страницы мне нужно управлять двумя файлами: один для логики / данных, а другой для шаблона страницы. Это кажется мне в значительной степени неэффективным и не похоже на очень масштабируемый подход.
Недавно я наткнулся на интеллектуальную среду, которая позволила бы мне объединить мою систему из randomPage.php и randomPage.tpl в нечто вроде:
randomSmartyPage.php
{extends file="template.tpl"}
{block name=pageTitle}My Page Title{/block}
{block name=pageResources}
<link href="/css/someRandomCSS.css" rel="stylesheet" text="text/css">
{/block}
{block name=pageContent}My HTML Page Body goes here{/block}
Увидев этот подход, я поднял три главных вопроса:
- Есть ли какие-то фундаментальные недостатки в том, как я подхожу к моей системе шаблонов?
- Можно ли изменить исходный код php, чтобы мне не приходилось создавать два файла для каждой веб-страницы?
- Было бы неплохо в этом случае использовать smarty (или, возможно, альтернативную платформу)?