Всегда делал так в index.php
<?php
// Если главная страница
if ($url == '/') {
require('templates/pageMain.php');
}
// Если страница категории
elseif (preg_match ('|^/category/([0-9]+)$|', $url, $var)) {
require('templates/pageCategory.php');
}
// Если страница статьи
elseif (preg_match ('|^/article/([0-9]+)/([0-9]+)$|', $url, $var)) {
require('templates/pageArticle.php');
}
// Если страницы не существует
else {
require('templates/404.php');
}
?>
Кто может показать решение проще и изящнее? А то когда 200 шаблонов страниц, получается слишком большая обойма регулярок.
<?php
$routes = array (
'|^/$|' => 'templates/pageMain.php',
'|^/category/([0-9]+)$|' => 'templates/pageCategory.php',
'|^/article/([0-9]+)/([0-9]+)$|' => 'templates/pageArticle.php',
'|^.|' => 'templates/404.php'
);
foreach ($routes as $regexp => $route)
{
if (preg_match ($regexp, $url, $var))
{
require ($route);
exit;
}
}
?>
Писал на коленке, на работоспособность не проверял. Думаю суть тут ясна ;) 404 страница должна быть последней в массиве она срабатывает вконце, когда другие условия не сработали. Както так ...
Почему бы просто не выкусывать первую часть пути и по этой части подгружать соответствующий шаблон?
// Если главная страница
if ($url == '/') {
$file = 'templates/pageMain.php';
} elseif (preg_match ('|^/(\w+)/|', $url, $var)) {
$file = 'templates/page' . ucfirst($var[1][0] . '.php');
} else
$file = '';
if (file_exists($file))
require($file);
else {
require('templates/404.php');
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости