Предпочитаемый способ объединить PHP и HTML? - PullRequest
10 голосов
/ 11 июля 2010

Я выучил 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 полностью разделены (я желаю?)
  • Что-то еще?

Ответы [ 8 ]

7 голосов
/ 11 июля 2010

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

5 голосов
/ 11 июля 2010

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

Мой предпочтительный подход состоит в том, чтобы отделить отображение от логики приложения.Это может принять форму полноценного MVC-фреймворка.Тем не менее, это также может быть простой вопрос о том, как вы пишете свой код.

Расширение:

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

Моя причина избегать шаблонных языков в том, что это еще одна форма синтаксиса, о которой мне нужно беспокоиться.В чем смысл?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>

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

4 голосов
/ 11 июля 2010

Мы используем настраиваемую базу воспламенителя кода для MVC и просто разделяем логику и компоновку. это не обязательно означает, что в нашем html нет php, просто это не используется для логики. Совершенно нормально циклически перебирать набор записей с php-кодом в шаблоне imho, просто не пытайтесь общаться с бизнес-объектами и фактически делать вещи в шаблонах макета. Конечно, вы также можете найти что-то вроде tal или миллион других шаблонов, если вы действительно хотите избавиться от всего php-кода. Хотя я думаю, что это в основном излишне, если только «не вставить сюда особые обстоятельства»

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

3 голосов
/ 11 июля 2010

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

Да, общее качество кода там смущает.

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

Если вы все еще хотите писать обычный PHP, но без спагетти:

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

  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>

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

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

3 голосов
/ 11 июля 2010

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

Имейте в виду, что большая часть моего опыта работы с PHP связана скорее с решением «нам просто нужно что-то, что работает», чем с «нам нужно самое элегантное и эффективное решение»

2 голосов
/ 11 июля 2010

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

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

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

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

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

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

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

2 голосов
/ 11 июля 2010

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

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

0 голосов
/ 05 марта 2013

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

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