Билл на самом деле на правильном пути.Практически все веб-программы сегодня выполняют обширную обработку URL.Традиционно у вас есть php-страницы в вашем веб-корне, а затем используется строка запроса в URL-адресе для уточнения вывода страницы.Вы уже поняли, почему это может быть нежелательно.Поэтому популярной альтернативой является шаблон проектирования Front Controller .По сути, мы направляем каждый запрос на вашу страницу index.php, а затем направляем запрос на внутренние страницы или в приложения вне корневого веб-каталога.Это может быстро усложниться, и каждый, кажется, реализует этот шаблон уникальными способами.
Мы можем использовать этот шаблон без маршрутизации, просто поместив наше приложение на страницу индекса.Сценарий ниже показывает пример того, что вы пытаетесь сделать самым простым способом.У нас есть одна страница с нашим скриптом.Мы можем запросить виртуальные страницы, изменив строку запроса id в нашем URL.Например, www.demo.net/?id=0 может использоваться как указатель на ваш сайт.Это должно быть то же самое, что и www.demo.net без запроса 'id'.Просто продолжайте решать эти проблемы одну за другой, даже если вы не знаете, в чем проблема.Как только вы начнете просматривать код других людей, вы сможете увидеть, как другие люди решали те же проблемы, что и у вас.
Приведенное ниже решение поможет вам начать, но затем, что вы будете делать, когда захотите страницу администратора?Как вы аутентифицируете пользователя?Вы дублируете много кода для еще одной страницы?Если вы серьезно относитесь к вашей CMS, то вы захотите внедрить какую-то платформу под нее.Среда для обработки URL, маршрутизации к вашему приложению, загрузки файлов конфигурации и, возможно, управления подключением к базе данных.Да, это становится сложным, но не тогда, когда вы решаете каждую проблему по одному.Используйте классы или функции для совместного использования кода для запуска.По крайней мере, включите общий файл «начальной загрузки» вверху вашей страницы, чтобы инициализировать общие функции, такие как соединение с базой данных.Читайте Stack Overflow, чтобы быть в курсе происходящего.Вы можете выучить много терминов и, возможно, найти ответы на вопросы, которые вы даже не знали, что хотели задать.
Ниже предположим, что у нас есть таблица со следующими полями:
- page_id
- имя_страницы
- page_title
- page_body
<code><?php
//<--------Move outside of web root-------------->
define('DB_HOST', 'localhost');
define('DB_USER', 'cms');
define('DB_PASS', 'changeme');
define('DB_DB', 'cms');
define('DB_TABLE', 'cms_pages');
//<---------------------------------------------->
//Display errors for development testing
ini_set('display_errors','On');
//Get the requested page id
if(isset($_GET['id']))
{
$id = $_GET['id'];
}
else
{
//Make page id '0' an index page to catch all
$id = 0;
}
//Establish a connection to MySQL
$conn = mysql_connect(DB_HOST,DB_USER,DB_PASS) or die(mysql_error());
//Select the database we will be querying
mysql_select_db(DB_DB, $conn) or die(mysql_error());
//Lets just grab the whole table
$sql = "SELECT * FROM ".DB_TABLE;
$resultset = mysql_query($sql, $conn) or die(mysql_error());
//The Select Query succeeded, but returned 0 result.
if (mysql_num_rows($resultset)==0)
{
echo "<pre>Add some Pages to my CMS
"; exit;} // Это наш целевой массив, который мынужно заполнить массивами страниц $ result = array (); // Преобразовать результат в массив ассоциативных массивов while ($ row = mysql_fetch_assoc ($ resultset)) {$ result [] = $ row;} // Теперь у нас естьвся информация, необходимая для создания нашего приложения // Название страницы - краткое имя для кнопок и т. д. $ name = ""; // Заголовок страницы - заголовок содержимого страницы $ title = ""; // Тело страницы - содержимое, которое у вас естьхранится в таблице $ body = ""; // Навигация по страницам - массив отформатированных ссылок $ nav = array (); // Обрабатывать все страницы за один проход foreach ($ result as $ row) {// Логика в соответствии с запрошеннымid страницы if ($ row ['page_id'] == $ id) {// Запрошенная страница $ name = $ row ['page_name']; $ title = $ rвл [ 'page_title'];$ body = $ row ['page_body'];$ page = "
$ name ";} else {// Не запрашиваемая страница $ page = $ row ['page_name'];} // Построить навигационный массив, предварительно отформатированный с элементами списка $ url = "./?id=".$ Строки [ 'PAGE_ID'];$ nav [] = " $ page ";}?> SimpleCMS |