Динамическая страница - это PHP скрипт, который в зависимости от URL отображает разный контент.
В этом уроке мы сделаем такую страницу с помощью GET-параметров.
Создание динамической страницы
Чтобы показывать пользователю разные страницы, сначала нужно подготовить контент для каждой из них. Пусть все страницы лежат в двумерном массиве:
<?php
$articles = [
[
'title' => 'Создание динамических страниц',
'content' => 'Текст статьи про динамические страницы.'
],
[
'title' => 'Как поймать котёнка',
'content' => 'Текст статьи про котят.'
]
];
Контент готов, теперь определимся с навигацией по страницам.
Представим, что URL нашего скрипта /index.php. Нам необходимо сделать уникальный URL для каждой страницы.
Для этого мы добавим в URL GET-параметр под названием id, который будет содержать в себе номер статьи. Например /index.php?id=5 будет означать, что нужно отобразить пятую статью.
В качестве номеров мы можем использовать ключи массива со статьями. У нас ведь сейчас есть 2 статьи, одна с индексом 0, другая с индексом 1, верно?
Array
(
[0] => Array
(
[title] => Создание динамических страниц
[content] => Текст статьи про динамические страницы.
)
[1] => Array
(
[title] => Как поймать котёнка
[content] => Текст статьи про котят.
)
)
Вот эти числа у нас и будут идентификаторами. Теперь напишем простенькое меню с новыми URL-адресами:
<!-- Выводим меню -->
<a href="/">Главная</a>
<br>
<?php foreach($articles as $id => $article): ?>
<a href="/index.php?id=<?= $id ?>"><?= $article['title'] ?></a>
<br>
<?php endforeach; ?>
В коде выше мы выводим ссылку на главную статью и по персональной ссылке для каждой статьи.
Теперь нам нужно при наличии GET-параметра id отобразить контент соответствующей статьи. Сам id у нас лежит в переменной $_GET['id'].
Получить статью по id очень просто:
$article = $articles[$_GET['id']];
echo $article['title'];
Т.е. мы по идентификатору статьи получаем массив с этой самой статьёй.
Далее есть смысл добавить 2 условия: на наличие id в URL и на существование статьи с конкретным id. Если id нет - тогда укажем, что это главная страница, а если id есть, но некорректный - можно показать сообщение с ошибкой:
<?php
// Если id нет в URL - отображаем главную страницу
if(!isset($_GET['id']))
echo '<h1>Главная</h1>';
// Если id есть, но нет статьи с таким id - показываем ошибку
elseif(!isset($articles[$_GET['id']]))
echo '<h1>Ошибка: страница не существует.</h1>';
// Если id есть и статья с таким id существует - выводим статью
else
{
$article = $articles[$_GET['id']];
echo '<h1>' . $article['title'] . '</h1>';
echo '<p>' . $article['content'] . '</p>';
}
Динамическая страница готова! Ещё раз весь код:
<?php
$articles = [
[
'title' => 'Создание динамических страниц',
'content' => 'Текст статьи про динамические страницы.'
],
[
'title' => 'Как поймать котёнка',
'content' => 'Текст статьи про котят.'
]
];
?>
<!-- Выводим меню -->
<a href="/">Главная</a>
<br>
<?php foreach($articles as $id => $article): ?>
<a href="/index.php?id=<?= $id ?>"><?= $article['title'] ?></a>
<br>
<?php endforeach; ?>
<?php
// Если id нет в URL - отображаем главную страницу
if(!isset($_GET['id']))
echo '<h1>Главная</h1>';
// Если id есть, но нет статьи с таким id - показываем ошибку
elseif(!isset($articles[$_GET['id']]))
echo '<h1>Ошибка: страница не существует.</h1>';
// Если id есть и статья с таким id существует - выводим статью
else
{
$article = $articles[$_GET['id']];
echo '<h1>' . $article['title'] . '</h1>';
echo '<p>' . $article['content'] . '</p>';
}
Теперь вы можете создавать динамические сайты, на которых количество страниц зависит только от количества элементов массива, и никаких десятков html-файлов. :)
Если на сайте должны быть разные типы страниц, например статья и товар, можно добавить ещё один GET-параметр, отвечающий за тип страницы: /index.php?type=article&id=5.
Конечно, эта система не идеальна. Гораздо интересней смотрелись бы URL вида /articles/5 или /dinamicheskie-stranicy-v-php (как у статьи, которую вы сейчас читаете).
В ближайшее время я добавлю новую статью про полноценное ЧПУ (человеко-подобные URL) и подробно объясню, как это делается.