⊗ppPmSDRSP 446 of 447 menu

Mai mulți parametri în rutele motorului în PHP

Să presupunem că acum avem pe site categorii și pagini care aparțin acestor categorii. Să creăm un tabel cu categorii:

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

Și un tabel cu pagini:

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

Pe site-ul nostru permitem ca slug-urile paginilor din categorii diferite să coincidă. Aceasta înseamnă că în URL trebuie să indicăm mai întâi slug-ul categoriei, iar apoi slug-ul paginii după următoarea schemă: /page/:category/:page, unde prin două puncte sunt indicate locurile în care vor fi parametrii care se schimbă.

Să scriem rutele pentru site-ul nostru:

<?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'; } ?>

În procesorul primei rute vom afișa pagina solicitată:

<?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; ?>

În procesorul celei de-a doua rute vom afișa lista paginilor din categoria indicată:

<?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' => 'lista tuturor paginilor categoriei ' . $catSlug, 'content' => $content ]; return $page; ?>

Să presupunem că aveți un site cu orașe și țări. Să se afișeze la adresa / lista tuturor țărilor, la adresa /:country să se afișeze lista orașelor țării indicate în parametru, iar la adresa /:country/:city descrierea orașului indicat.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge