#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-части (контроллера).