Шаблоны HTML-разметки в PHP - PullRequest
0 голосов
/ 17 ноября 2011

Когда я пишу код PHP для веб-сайтов, мне не нравится смешивать бизнес-логику со слоем представления, и поэтому я склонен создавать шаблоны разметки.Я написал очень легкий шаблонный движок, чтобы облегчить это, так как я действительно не хочу переходить на полноценный шаблонный фреймворк, такой как Smarty.

Вот упрощенный пример того, что я делаю:

function renderTemplatePage($page, $params)
{
    $page = readTemplateFile("templates/{$page}");
    $tokens = getTemplateTokens($page);
    foreach($tokens as $token)
    {
        if(substr($token, 0, 6) == "%_TPL_")
        {
            $subPage = renderTemplatePage(tokenToPageName($token), $params);
            $page = str_replace($token, $subPage, $page);
        }
        else
        {
            $page = str_replace($token, $params[$token], $page);
        }
    }
    return $page;
}

Пример страницы:

<html>
    <head><title>%_PageTitle_%</title></head>
    <body>
        <div id="header">%_TPL_Header_%</div>
        <div id="content">%_TPL_Homepage_%</div>
        <div id="footer">%_TPL_Footer_%</div>
    </body>
</html>

При вызове renderTemplatePage("index", array("PageTitle" => "Home")) будет создана страница, озаглавленная «Домашняя страница», с содержимым из шаблонов «Верхний колонтитул», «Домашняя страница» и «Нижний колонтитул».

Я выполняю всю свою логику (включая запросы к базе данных и т. Д.) Перед вызовом рендеринга, поэтому я могу собрать большой массив $params и просто выполнить один вызов для его рендеринга.

Есть ли недостаткив этой методологии?Есть ли более стандартный способ сделать это?

Ответы [ 3 ]

2 голосов
/ 17 ноября 2011

Его недостатки. Как вы справляетесь с шаблонной логикой. Просто из любопытства, как бы вы справились с ifs или loops

0 голосов
/ 17 ноября 2011

Проблема со всеми этими шаблонами доморощенного кофе - отсутствие реальных испытаний.
Вместо того, чтобы делать такой тест, вы приходите сюда, чтобы спросить других людей.
В общем, это не такая мудрая стратегия, так как ваш собственный опыт необходим, в то время как у профессионалов не так много поводов, чтобы иметь достаточно времени, чтобы написать вам расширенный ответ. Хотя всегда есть много неопытных пользователей, готовых ответить.

Есть ли недостатки в этой методологии?

Да, конечно.

Вы заявляете, что вы don't like mixing business logic with the presentation layer.
Но что такое содержание %_TPL_ и где оно написано? В той же старой бизнес-логике, я полагаю. Итак, где же ваше желаемое разделение?

0 голосов
/ 17 ноября 2011

Существует несколько способов достижения разделения между логикой и представлением (это формально известно как часть методологии MVC - модель-представление-контроллер).

В одном из направлений, на которое я хотел бы указать, это XML + XSLT.,Идея состоит в том, чтобы собрать всю необходимую информацию в виде строки XML (например, взглянуть на выходные данные следующего URL: http://www.whiteoctober.co.uk/?dumpXML), а затем выполнить преобразование XSLT для него (см. http://www.w3schools.com/xsl/xsl_transformation.asp).

).

Создание шаблонов в PHP - это религиозная дискуссия, в которую я бы предпочел не вмешиваться. Достаточно сказать, что я категорически против Smarty - она ​​громоздкая и ничего не делает, чего не делает стандартный PHP.

...