Динамическое создание ссылок на страницы для CMS - PullRequest
1 голос
/ 21 мая 2011

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

Я использую PHP и mysql для этого проекта.

Я создаю CMS.Это чрезвычайно просто, и я понимаю каждую концепцию, которая мне понадобится, кроме как динамически генерировать страницы и ссылки на страницы.Я хочу сделать это, имея таблицу базы данных, в которой хранится название страницы и основное содержимое страницы.Это все.Тогда я бы просто вызвал скрипт, чтобы перетащить основное содержимое страницы на любую страницу, которую я случайно вызвал.Ничего страшного, правда?Неправильно.

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

В идеале должен быть скрипт, который создает ссылки на страницы на основе строки имени страницы таблицы БД по мере создания страниц.Но как получить эти ссылки с ?=pageName в конце?Если бы я просто знал, как это работает, я мог бы понять все остальное.

ОБНОВЛЕНИЕ Второй ответ действительно подтвердил все, что я думал, что должен был сделать, но есть один улов.Мой план теперь состоит в том, чтобы разделить весь код на ряд функций и включить или потребовать их в разных шаблонах, которые будут использоваться для форматирования отображения страниц.Мне нужен один внешний вид для домашней страницы и еще один дизайн для остальных страниц.Я думаю, что у меня будет функция, которая говорит, что если ID равен 0, тогда вызовите эту страницу template.php, иначе вызовите этот другой шаблон file.php.Но как передать необходимые переменные в эти новые файлы?Я просто включаю в них страницу index.PHP?

Ответы [ 2 ]

4 голосов
/ 21 мая 2011

Билл на самом деле на правильном пути.Практически все веб-программы сегодня выполняют обширную обработку 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 |
    1 голос
    / 21 мая 2011

    Я думаю, вам нужно прочитать о $_GET.

    Я также рекомендую достойную книгу по PHP. Забудьте онлайн-уроки; они (по большей части) совершенно бесполезны.

    ...