⊗ppPmSDRSP 446 of 447 menu

Plusieurs paramètres dans les routes du moteur en PHP

Supposons maintenant que notre site ait des catégories et des pages appartenant à ces catégories. Créons une table pour les catégories :

categories
id slug name
1 first-category name1
2 second-category name2

Et une table pour les pages :

pages
id slug title content category_id
1 my-first-page title1 <div> content1 </div> 1
2 my-second-page title2 <div> content2 </div> 1
3 my-third-page title3 <div> content3 </div> 2

Sur notre site, nous permettons que les slugs des pages de différentes catégories coïncident. Cela signifie que dans l'URL, nous devons d'abord spécifier le slug de la catégorie, puis le slug de la page selon ce schéma : /page/:category/:page, où les deux-points indiquent les emplacements des paramètres variables.

Écrivons les routes pour notre site :

<?php $route = '^/page/(?<catSlug>[a-z0-9_-]+)/(?<pageSlug>[a-z0-9_-]+) ; if (preg_match("#$route#", $url, $params)) { $page = include 'view/page/show.php'; } $route = '^/page/(?<catSlug>[a-z0-9_-]+) ; if (preg_match("#$route#", $url, $params)) { $page = include 'view/page/category.php'; } $route = '^/ ; if (preg_match("#$route#", $url, $params)) { $page = include 'view/page/all.php'; } ?>

Dans le gestionnaire de la première route, nous afficherons la page demandée :

<?php $catSlug = $params['catSlug']; $pageSlug = $params['pageSlug']; $query = "SELECT pages.title, pages.content FROM pages LEFT JOIN category ON category.id=pages.category_id WHERE pages.slug='$pageSlug' AND category.slug='$catSlug'"; $res = mysqli_query($link, $query) or die(mysqli_error($link)); $page = mysqli_fetch_assoc($res); return $page; ?>

Dans le gestionnaire de la deuxième route, nous afficherons la liste des pages de la catégorie spécifiée :

<?php $catSlug = $params['catSlug']; $query = "SELECT pages.slug, pages.title FROM pages LEFT JOIN category ON category.id=pages.category_id WHERE category.slug='$catSlug'"; $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/' . $catSlug . '/' . $page['slug'] . '">' . $page['title'] . '</a> </div> '; } $page = [ 'title' => 'liste de toutes les pages de la catégorie ' . $catSlug, 'content' => $content ]; return $page; ?>

Supposons que vous ayez un site avec des villes et des pays. Que l'adresse / affiche la liste de tous les pays, que l'adresse /:country affiche la liste des villes du pays spécifié dans le paramètre, et que l'adresse /:country/:city affiche la description de la ville spécifiée.

bydeenesfrptru