Просты роўтынг у рухавіку на PHP
У папярэднім уроку на нашым сайце была толькі адна група ўрлаў. Вядома ж, звычайна на сайце бывае некалькі тыпаў адрасоў.
Кожная група адрасоў будзе апрацоўвацца свой рэгулярны выраз, якія называюцца роўтамі. Адпаведна працэс супастаўлення маршрутаў і кода для іх апрацоўкі называецца роўтынгам.
Хай, напрыклад, у нас ёсць два тыпы адрасоў. Давайце для кожнай групы напішам свой роўт:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
// адна старонка па слагу
}
if (preg_match('#^/page/all$#', $url, $params)) {
// спіс усіх старонак
}
?>
Для зручнасці вынясем код апрацоўкі кожнага роўта ў асобны файл:
<?php
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
$page = include 'view/page/show.php';
}
if (preg_match('#^/page/all$#', $url, $params)) {
$page = include 'view/page/all.php';
}
?>
Свой вынікам файлы, што падключаюцца, павінны вяртаць масіў з тайтлам і кантэнтам старонкі.
Давайце напішам код першага файла, які выводзіць адну старонку па яе слагу:
<?php
$slug = $params[1];
$query = "SELECT * FROM pages WHERE slug='$slug'";
$res = mysqli_query($link, $query) or die(mysqli_error($link));
$page = mysqli_fetch_assoc($res);
return $page;
?>
А цяпер напішам код другога файла, які выводзіць спіс спасылак на ўсе старонкі:
<?php
$query = "SELECT slug, title FROM pages";
$res = mysqli_query($link, $query) or die(mysqli_error($link));
for ($data = []; $row = mysqli_fetch_assoc($res); $data[] = $row);
$content = '';
foreach ($data as $page) {
$content .= '
<div>
<a href="/page/' . $page['slug'] . '">' . $page['title'] . '</a>
</div>
';
}
$page = [
'title' => 'all pages',
'content' => $content
];
return $page;
?>
Пасля выканання аднаго з умоў у зменнай
$page заўсёды будзе масіў з адной
структуры. Выкарастаем гэты масіў, каб
падставіць тайтл і кантэнт у шаблон сайта:
<?php
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Сабяром усё разам і атрымаем наступны код:
<?php
$url = $_SERVER['REQUEST_URI'];
if (preg_match('#^/page/([a-z0-9_-]+)$#', $url, $params)) {
$page = include 'view/page/show.php';
}
if (preg_match('#^/page/all$#', $url, $params)) {
$page = include 'view/page/all.php';
}
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Хай у вас ёсць сайт з карыстальнікамі. Зрабіце старонку для паказу аднаго карыстальніка, старонку для вываду ўсіх карыстальнікаў і старонку з формай для дадання новага карыстальніка.