Предпочтительный способ комбинирования PHP и HTML?

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

Одна из моих любимых вещей в 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 полностью разделены (желаю?)
  • Что-то еще?

Ответ 1

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

Ответ 2

Мы используем настраиваемую базу воспламенителя кода для MVC и просто разделяем логику и макет. это не обязательно означает, что в нашем html нет php, просто чтобы его не использовали для логики. Совершенно нормально перебирать набор записей с php-кодом в шаблоне imho, просто не пытайтесь говорить с бизнес-объектами и на самом деле делать что-то в шаблонах макета. Вы также можете подумать о чем-то вроде tal или о миллионе других для шаблонов, если вы действительно хотите избавиться от всего PHP-кода там, Я вроде бы думаю, что в основном перебор, хотя, если "вставить здесь особое обстоятельство"

редактировать фиксированная опечатка

Ответ 3

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

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

расширения:

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

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

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

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

Ответ 5

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

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

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

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

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

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

  • Определите более простой способ вызова 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 средний проект имеет путаницу подходов, брошенных вместе без всякой мысли. В реальном мире код не поддается контролю, исправлен ошибкам и небезопасен. Вы не хотите смотреть на отраслевой стандарт, потому что отраслевой стандарт должен быть разбит во всех отношениях.

Ответ 6

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

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

Ответ 7

Основываясь на моем опыте, разделение PHP и HTML необычно

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

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

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

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

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

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

Ответ 8

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