Как структурировать php, который генерирует html

У меня есть файл php и куча элементов HTML, которые включают:

  1. заголовок
  2. css
  3. элемент "спейсер", используемый повторно, статический
  4. куча шаблонов, которые будут брать аргументы из PHP-кода, что вставлять

В основном мне интересно, как правильно учитывать все эти файлы. Я предполагаю, что у меня должен быть файл .css в моей папке, который php будет поглощать в память и добавлять информацию заголовка. Должен ли элемент spacer быть сохранен как «spacer.html», и PHP будет поглощать одну его копию в строку и по мере необходимости добавлять ее в HTML? Или все это должно существовать как строковые константы в PHP?

Это немного сложнее для динамических элементов «шаблона», потому что я не уверен, как разделить HTML и позволить ему иметь маркеры, в которые попадают аргументы.


person djechlin    schedule 24.05.2012    source источник


Ответы (3)


Вам следует изучить MVC. В настоящее время популярным является CodeIgniter. Идея в том, что вы берете эти «шаблоны» HTML и создаете (V) представления. PHP использует (C)контроллер, чтобы направлять пользователя и вызывать (M)модели для извлечения данных, а затем отправлять соответствующие переменные в (V)views для браузера.

person AlienWebguy    schedule 24.05.2012
comment
Другие варианты фреймворка включают Agavi, Symfony2, Нетте, Yaf, Zend Framework, QCodo, литий, Yii и многие другие. - person Treffynnon; 25.05.2012
comment
MVC — один из наиболее распространенных шаблонов, используемых в веб-разработке. Перейдите сюда: ootips.org/mvc-pattern.html для получения дополнительной информации об этом. - person bitfox; 25.05.2012
comment
Все это звучит хорошо и хорошо, но не могли бы вы указать мне правильное направление, как использовать это для решения моей проблемы с шаблонным HTML-кодом? - person djechlin; 25.05.2012
comment
Джехлин: Каждый шаблон — это представление. Ваш уровень контроллера, вероятно, будет тем, что обрабатывает JSON в объекты для передачи в ваше представление. - person hsanders; 25.05.2012

Я заметил, что некоторые из других ответчиков (SP) упомянули MVC. MVC невероятно важен, потому что он позволяет вам отделить вашу бизнес-логику от уровня отображения/интерфейса «представления» и логику вашей базы данных от вашей бизнес-логики.

Например, AlienWebguy, я бы порекомендовал Code Igniter, но для PHP существует ряд других хороших фреймворков.

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

view/include/header.php и view/include/footer.php

Файл заголовка обычно содержит тег <html>, ссылки на таблицы стилей, любые распространенные файлы сценариев javascript и общий заголовок (например, логотип и навигацию). Файл нижнего колонтитула обычно содержит информацию об авторских правах, любые ссылки нижнего колонтитула и файл </body></html>.

Как правило, при эффективном создании представлений вы должны стремиться к тому, чтобы они обрабатывали объекты модели для отображения HTML и не генерировали абсолютно никакого HTML на уровне вашего контроллера. НАПРИМЕР.

<table>
<?php
foreach ($users as $user) {
    printf('<tr><td>%s</td><td>%s</td></tr>', $user->id, $user->user_name);
}
?>
</table>

Это делает вещи намного чище, избегая вкраплений проблем на неправильном «слое».

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

person hsanders    schedule 24.05.2012
comment
@Joy: рассмотрите возможность добавления форматирования кода только к вещам, которые на самом деле являются кодом (теги HTML, пути, имена классов и т. д.). Добавление его к каждому модному слову очень отвлекает. - person eldarerathis; 26.05.2012
comment
@eldarerathis Спасибо за предложение. Я буду иметь это в виду с этого момента. - person Prasenjit Kumar Nag; 26.05.2012

Я обычно предлагаю использовать некоторые старые добрые php-инструменты для решения этой проблемы.

Что касается файловой структуры, у меня, вероятно, был бы файл index.php, который (не зная многого о ваших шаблонах в # 4) обрисовывал бы страницу. Вы можете вызвать страницу header.html или поместить заголовок прямо в файл index.php.

Файл css лучше всего назвать: style.css (это довольно стандартно), и вы можете вызвать его из своего заголовочного файла.

Не уверен, что вы поняли это, но вы можете включить HTML в файл .php. Вы просто назовете файл примерно так: index.php и тогда ваш код может быть:

<p>This is HTML.</p>

<?php echo("This is PHP."); ?>

И смешивайте их повсюду.

person matthewvb    schedule 24.05.2012
comment
Я согласен с @AlienWebguy по поводу использования фреймворка MVC. Если у вас есть большое или сложное PHP-приложение, это то, что вам нужно. Мой ответ предполагает, что у вас всего несколько файлов и вы делаете что-то простое. - person matthewvb; 25.05.2012
comment
Существует динамическое количество шаблонов, ввод которых будет указан строкой JSON, хранящейся в базе данных, если это дает вам представление о том, несколько строк это или что-то простое: P - person djechlin; 25.05.2012
comment
Если вам нужен только 1 файл php для выполнения всех шаблонов и извлечения базы данных (анализ JSON и вывод всего, что нужно шаблону), то я бы сказал, что это просто и придерживайтесь простого макета. Если вам понадобится несколько файлов PHP для обработки различных типов шаблонов из вашей БД, используйте структуру MVC. - person matthewvb; 25.05.2012