Вам повезло. Я сам разрабатываю CMS, и мне понадобились годы, чтобы найти жизнеспособное решение для этого. Позвольте мне объяснить, чтобы убедиться, что мы находимся на той же странице здесь, но я вполне уверен, что мы области.
Ваши URL могут быть отформатированы следующими способами:
http://www.mydomain.com/about - страница верхнего уровня без категории
http://www.mydomain.com/services/maintenance - страница с родительской категорией
http://www.mydomain.com/services/maintenace/server-maintenance - страница с категорией и подкатегорией.
В моем контроллере страниц я использую функцию _remap, которая в основном захватывает все запросы к вашим контроллерам и позволяет вам делать с ними все, что вы хотите.
Вот мой код, прокомментированный для вашего удобства:
<?php
class Pages extends Controller {
// Captures all calls to this controller
public function _remap()
{
// Get out URL segments
$segments = $this->uri->uri_string();
$segments = explode("/", $segments);
// Remove blank segments from array
foreach($segments as $key => $value) {
if($value == "" || $value == "NULL") {
unset($segments[$key]);
}
}
// Store our newly filtered array segments
$segments = array_values($segments);
// Works out what segments we have
switch (count($segments))
{
// We have a category/subcategory/page-name
case 3:
list($cat, $subcat, $page_name) = $segments;
break;
// We have a category/page-name
case 2:
list($cat, $page_name) = $segments;
$subcat = NULL;
break;
// We just have a page name, no categories. So /page-name
default:
list($page_name) = $segments;
$cat = $subcat = NULL;
break;
}
if ($cat == '' && $subcat == '') {
$page = $this->mpages->fetch_page('', '', $page_name);
} else if ($cat != '' && $subcat == '') {
$page = $this->mpages->fetch_page($cat, '', $page_name);
} else if ($category != "" && $sub_category != "") {
$page = $this->mpages->fetch_page($cat, $subcat, $page_name);
}
// $page contains your page data, do with it what you wish.
}
?>
Вам, конечно, потребуется изменить функцию модели выборки страниц, принять 3 параметра и затем передать информацию в зависимости от того, какой тип страницы вы просматриваете.
В вашем файле application / config / rout.php просто укажите, какие конкретные URL-адреса вы хотите направить, и в самом низу укажите:
/* Admin routes, login routes etc here first */
$route['(:any)'] = "pages"; // Redirect all requests except for ones defined above to the pages controller.
Дайте мне знать, если вам нужно больше разъяснений или загружаемый пример кода.