Предпочтительный способ объединить PHP и HTML?

Я изучил PHP путем взламывания далеко в phpBB2, даже представления нескольких модификаций их базе данных, которую другие загрузили и использовали. (Я не полагаю, что phpBB2 больше поддерживается с phpBB3 так долго теперь, таким образом, v2 база данных модификаций больше не.)

Одной из моих любимых вещей о phpBB была их шаблонная система, которые позволяют редактору, абсолютно отдельному HTML и PHP. Файлы PHP содержали PHP: логика, запросы базы данных и активация шаблонов. Файлы TPL содержали шаблоны: HTML, переменные шаблона и специализированные комментарии HTML для обеспечения условного выражения или повторяющихся блоков.

Однако любое время, которое я вижу, что чей-то PHP кодирует онлайн, это - или маленький отрывок, работающий с единственной функцией или такой, или PHP полон строк, содержащих HTML (или хуже, HTML с вкрапленным PHP). phpBB является единственным PHP, на который я посмотрел, который на самом деле разделяет язык и язык разметки, предлагая мне, чтобы немногие, если таковые имеются, другие кодовые базы PHP сделали такую вещь.

Я надеюсь начинать работать с некоторым PHP снова, но на этот раз это не будет phpBB форум, и это будет в команде. На основе моего опыта разделение PHP и HTML является редким (исправьте меня, если я неправ в этом!). Однако я так привык к той разделительной линии, я очень не хочу читать, смешал PHP и HTML.

В "реальном мире" программирования PHP, что является предпочтительным методом:

  • Файлы PHP со строками HTML
  • Файлы HTML разбиты с блоками PHP
  • PHP и абсолютно отдельный HTML (я желаю?)
  • Что-то еще?

10
задан Arseni Mourzenko 10 July 2010 в 20:24
поделиться

7 ответов

Если вы хотите отделить PHP от HTML, вы можете использовать шаблонизатор (например, smarty http://www.smarty.net/).

7
ответ дан 3 December 2019 в 16:08
поделиться

Мы используем настроенную базу Code Igniter для MVC и просто разделяем логику и макет. Это не обязательно означает, что в нашем html нет php, просто он не используется для логики. Имхо, вполне нормально просматривать набор записей с php-кодом в шаблоне, просто не пытайтесь общаться с бизнес-объектами и делать что-то в шаблонах верстки. Конечно, вы можете также рассмотреть что-то вроде tal или миллион других для шаблонов, если вы действительно хотите избавиться от всего php кода. Но я думаю, что это уже перебор, если только "вставьте здесь особые обстоятельства"

edit исправленная опечатка

4
ответ дан 3 December 2019 в 16:08
поделиться

каждый раз, когда я вижу чей-то PHP-код в Интернете, это либо небольшой фрагмент, работающий с одной функцией, либо что-то подобное, или PHP заполнен строками, содержащими HTML (или, что еще хуже, HTML с вкраплениями PHP).

Да, общее качество кода вызывает затруднения.

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

Если вы хотите по-прежнему писать обычный PHP, но без спагетти:

  1. Сохраните код действия в верхней части файла или в другом файле. Поместите сюда только логику приложения, а не какой-либо HTML или шаблоны. Любая информация, сгенерированная на этом этапе, которая должна отображаться шаблоном, должна быть включена в переменную, которая будет передана в шаблонную часть, не напечатана в процессе загрузки бизнеса. логика.

  2. Возьмите свои знания о шаблонах на основе тегов и примените их к PHP. Имейте единую иерархию кода с правильным отступом для логики представления HTML и PHP, как если бы вы писали «правильно сформированный» XML (независимо от того, используете ли вы XHTML или нет). Любой ценой избегайте вставки HTML в строки.

  3. Определите более простой способ вызова htmlspecialchars () , потому что в противном случае вводить это все время будет настоящей проблемой, и если вы не набираете это все время, вы собираетесь есть потенциально связанные с безопасностью ошибки.

Подводя итог, например:

<?php
    // active code here
    // do things
    // put any errors in a $errors array

    // this trivial function would presumably be in an include
    //
    function h($s) {
        echo htmlspecialchars($s, ENT_QUOTES);
    }
?>

<body>
    <?php if (count($errors)!=0) { ?>
        <ul id="errors">
            <?php foreach ($errors as $error) { ?>
                <?php h($error); ?>
            <?php } ?>
        </ul>
    <?php } ?>
    ...
</body>

В «реальном мире» программирования PHP, какой метод предпочтительнее:

О, в реальном мире программирования PHP средний проект имеет мешанина подходов, сброшенных вместе, не задумываясь. В реальном мире код не обслуживается, содержит ошибки и небезопасен. Вы не хотите смотреть на отраслевой стандарт, потому что отраслевой стандарт нужно нарушать всеми способами.

3
ответ дан 3 December 2019 в 16:08
поделиться

Исходя из моего опыта, разделение PHP и HTML - редкость

Верно. Но многие PHP-коды пишутся неопытными разработчиками. Кроме того, PHP не поощряет, а скорее препятствует написанию хорошего кода, и возможность смешивать HTML с программным кодом - один из примеров этого.

Если вы рассчитываете делать качественный код, иметь возможность легко поддерживать и расширять его, я настоятельно рекомендую использовать шаблонизатор или что-то подобное. Смешивание того и другого оказывает огромное влияние на читабельность вашего кода и приведет к тому, что со временем он будет становиться все хуже и хуже. Рефакторинг будет болезненным, если не невозможным.

Теперь у вас есть большой выбор способов отделения HTML от PHP

  • Самый очевидный из них - использовать существующий движок верстки. Их достаточно много, некоторые очень хорошо сделаны и имеют очень низкое влияние на производительность.

  • Вы также можете написать свой собственный движок. Это может быть не очень хорошей идеей для большого проекта (зачем изобретать колесо?), но может быть решением для маленького проекта или когда вам нужно что-то очень специфическое.

  • Последний способ, который я использую в большинстве проектов - это создание XML из бизнес-слоя (сериализация XML довольно проста в PHP), а затем использование XSLT для преобразования этого в HTML-страницу. Это позволяет делать сайты, которые намного проще поддерживать и легче понять, и, кстати, позволяет получить доступ к данным сайта программно (загружая XML вместо HTML-страницы), когда это необходимо. С другой стороны, он сильно снижает производительность, поэтому не предназначен для больших сайтов с тысячами запросов в секунду.

2
ответ дан 3 December 2019 в 16:08
поделиться

Лично я не вижу причин для добавления системы / языка шаблонов в смесь, когда PHP уже является идеальным решением.

Я предпочитаю отделить отображение от логики приложения. Это может принять форму полноценной инфраструктуры MVC. Однако это также может быть простой вопрос о том, как вы собираетесь писать свой код.

Расширение:

С тех пор, как я допустил ошибку, перемежая мой HTML с большим количеством кода ASP, я попытался отделить логику страницы от отображения. На одной странице это означает размещение всей логики страницы вверху, хранение информации, которая будет отображаться в переменных, а затем вывод их в HTML внизу файла PHP. Единственная логика, которая появляется в части HTML, - это логика отображения.Другими словами, простая обработка ошибок, if, циклы и т. Д. По сути, те же самые вещи, которые вы найдете в большинстве языков шаблонов.

Я избегаю языков шаблонов, потому что это еще одна форма синтаксиса, о которой мне нужно беспокоиться. В чем смысл? PHP предоставляет для этого больше, чем мне нужно.

Между тем, вы можете использовать простой подход MVC, разделив вещи:

controller.php

<?php
// some application logic
$data['message'] = 'Hello, World.';

include 'view.php';

exit;
?>

view.php:

<html>
<head>
<title>
A simple 'MVC' view
</title>
</head>
<body>
<p>
<?php

echo $data['message'];

?>
</p>
</body>
</html>

Здесь есть свои недостатки и проблемы. Однако, если вы думаете, что можете иметь полное и четкое разделение между логикой приложения и отображением, вы ошибаетесь.

5
ответ дан 3 December 2019 в 16:08
поделиться

По моему опыту, многие PHP-разработки, хорошо это или плохо, заканчиваются php-файлами, связанными друг с другом через include, которые выводят фрагменты HTML по мере необходимости.

Хотя, большинство моих опытов в PHP - это скорее решение типа "нам нужно что-то, что работает", чем "нам нужно самое элегантное и эффективное решение"

.
3
ответ дан 3 December 2019 в 16:08
поделиться

Я предпочитаю использовать систему шаблонов, чтобы минимизировать количество PHP-кода, содержащегося в HTML-файлах. Я действительно не вижу способа полностью отделить PHP от HTML, но я чувствую, что достаточно отделить бизнес-логику (базу данных) от логики представления.

Моя система шаблонов сделана в домашних условиях, но я уверен, что вы сможете найти множество подходящих вариантов, воспользовавшись поиском в Google.

2
ответ дан 3 December 2019 в 16:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: