Динамические страницы в PHP

Александр Кичатов

Динамическая страница - это 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) и подробно объясню, как это делается.

Комментарии