Πολλαπλές παράμετροι στις διαδρομές της μηχανής σε PHP
Ας υποθέσουμε ότι τώρα ο ιστότοπός μας έχει κατηγορίες και σελίδες που ανήκουν σε αυτές τις κατηγορίες. Ας δημιουργήσουμε έναν πίνακα με τις κατηγορίες:
| id | slug | name |
|---|---|---|
| 1 | first-category | name1 |
| 2 | second-category | name2 |
Και έναν πίνακα με τις σελίδες:
| 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 |
Στον ιστότοπό μας επιτρέπουμε τα slugs
των σελίδων από διαφορετικές κατηγορίες να συμπίπτουν. Αυτό
σημαίνει ότι στο URL πρέπει πρώτα να καθορίσουμε το slug
της κατηγορίας και μετά το slug της σελίδας σύμφωνα
με το ακόλουθο σχήμα: /page/:category/:page,
όπου με άνω και κάτω τελεία υποδεικνύονται οι θέσεις στις οποίες
θα υπάρχουν μεταβαλλόμενες παράμετροι.
Ας γράψουμε τις διαδρομές για τον ιστότοπό μας:
<?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';
}
?>
Σ τον χειριστή της πρώτης διαδρομής θα εμφανίζουμε τη ζητούμενη σελίδα:
<?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;
?>
Σ τον χειριστή της δεύτερης διαδρομής θα εμφανίζουμε τη λίστα των σελίδων από την καθορισμένη κατηγορία:
<?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' => 'λίστα όλων των σελίδων της κατηγορίας ' . $catSlug,
'content' => $content
];
return $page;
?>
Ας υποθέσουμε ότι έχετε έναν ιστότοπο με πόλεις και χώρες.
Ας υποθέσουμε ότι στη διεύθυνση / εμφανίζεται μια λίστα
όλων των χωρών, στη διεύθυνση /:country
εμφανίζεται μια λίστα των πόλεων της καθορισμένης στη παράμετρο
χώρας, και στη διεύθυνση /:country/:city
η περιγραφή της καθορισμένης πόλης.