Как должен быть структурирован динамический веб-сайт?

#php #html #mysql #content-management-system

#php #HTML #mysql #content-management-system

Вопрос:

Я написал свою собственную CMS на PHP. Это довольно просто, но это не позволяет мне делать некоторые вещи, такие как перенаправление header() с динамической страницы.
Вот его структура (очень упрощенная):

 <?php
$db = new PDO...
try {
    //getting page info from database (by $_GET['id'])
    //and put results into $pageInfo
    $stmt->prepare
//.. catch etc...
?>
<!doctype html>
<html>
<head><title><?=$pageInfo['title'];?></title></head>
<body>
<?php
//this file below cannot contain a php redirect, because headers are already sent
include($pageInfo['content_path']);
?>
</body>
</html>
  

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

Я просмотрел Интернет, но я не знаю, как решить эту проблему.
Могу ли я создать a header.html и a footer.html и включить их на каждую страницу? Но если я включу файл заголовка перед включением содержимого, разве он не отправляет заголовки? Как?

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

Заранее спасибо.

Комментарии:

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

2. попробуйте добавить @ob_start() в начале вашего кода

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

4. Какое это имеет отношение к JavaScript?

5. Вывод содержимого всегда должен происходить в самом конце скрипта. При выводе контента вы уже должны знать, что вам не требуется перенаправление или что-то подобное. Включение статического html-кода в раздел вывода должно быть в порядке, но вся функциональность php должна быть включена в начало скрипта. Я не одобряю использование буферизации вывода, если это не абсолютно необходимо, потому что это скрывает действия скрипта и затрудняет отладку и модификацию другими.

Ответ №1:

Предпочтительный способ — разделить приложение на несколько частей: одна часть, которая выполняет код (контроллер или ядро), а другая, которая что-то отображает (представление или шаблон).

Например, в MVC (Model / View / Controller) ваша отдельная страница будет просто диспетчером, который вызывает контроллер, контроллер выполняет PHP-код и извлекает некоторые данные, используя вторую часть, модель, и, наконец, вызывает шаблон для отображения данных.

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