CodeIgniter, переписать URL, вызвать пользовательский контроллер - PullRequest
1 голос
/ 06 июня 2011

Я закончил CMS. Эта CMS имеет много контроллеров: новости, контент, статьи и т. Д. Также есть такие модули, как «modules / shop / controllers / cart.php», «modules / shop / controllers / items.php».

URL банкомата:

  • / магазин / некоторые-категория /
  • / магазина / Nokia / n73.html
  • / содержание / о-company.html
  • / статьи / телефоны / полный / 1.html

Теперь мне нужны такие URL, как: - /nokia.html - /my/super/article-about-phones.html

Итак, мне нужны настраиваемые URL-адреса для любых элементов управления (магазин, новости, контент и т. Д.). Как я знаю, я не могу запустить контроллер с контроллера.

Как я могу решить проблему? Я понятия не имею, как переписать основной класс маршрутизатора. Есть идеи? Для меня у меня есть 1 способ - переписать архитектуру полного продукта, но у меня нет времени :( Большое спасибо.

P.S. ATR route.php - это:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$lang_prefix = '(([a-z]{2}/)?)';

$route[$lang_prefix.'ajax/shop/(.*)'] = "shop/ajax/$3";

$route['cron/(.*)'] = "cron/$1";

$route[$lang_prefix.'content/(.*)'] = "content/index";
$route[$lang_prefix.'faq/ask/(.*)'] = "faq/ask";
$route[$lang_prefix.'faq/(.*)'] = "faq/index";

$route[$lang_prefix.'sitemap'] = "sitemap/index";
$route[$lang_prefix.'contact'] = "contacts/index";

$route[$lang_prefix.'news/(.*?)/full/[0-9]+'] = "news/full";
$route[$lang_prefix.'news/(.*)'] = "news/index";



$route[$lang_prefix.'compare/[0-9]+[0-9\/]+'] = "shop/compare";
$route[$lang_prefix.'cart/(.*?)'] = "shop/cart/$3";
$route[$lang_prefix.'cart'] = "shop/cart";

$route[$lang_prefix.'order'] = "shop/order";
$route[$lang_prefix.'order/check'] = "shop/order";
$route[$lang_prefix.'order/successful/[A-z_\-0-9]+'] = "shop/order/successful";

$route[$lang_prefix.'search/(name|price|rating)/(asc|desc)(.*)'] = "shop/search";

$route[$lang_prefix.'shop/(.*)/(name|price|rating)/(asc|desc)(.*?)'] = "shop/items/index";
$route[$lang_prefix.'shop/(.*?)/(.*?)/add-comment'] = "shop/items/add_comment";
$route[$lang_prefix.'shop/(.*?)/(.*?)'] = "shop/items/details";
$route[$lang_prefix.'shop/(.*)'] = "shop/items/index";



$route[$lang_prefix.'feedback'] = "feedback/index";
$route[$lang_prefix.'callback'] = "feedback/index";

$route[$lang_prefix.'article/(.*?)/full/(.*)'] = "articles/full";
$route[$lang_prefix.'article/(.*)'] = "articles/index";

$route[$lang_prefix.'gallery/(.*?)/full/(.*)'] = "gallery/full";
$route[$lang_prefix.'gallery/(.*)'] = "gallery/index";


$route[$lang_prefix.'admin/ajax/(.*)'] = "admin/ajax/$3";
$route[$lang_prefix.'admin'] = "admin/main/index";


$route[$lang_prefix.'admin/login'] = "admin/auth/login";
$route[$lang_prefix.'admin/logout'] = "admin/auth/logout";

$route[$lang_prefix.'admin/(.*)'] = "admin/$3";

$route['default_controller'] = "shop/showcase";

1 Ответ

0 голосов
/ 19 июля 2011

Вы можете использовать mod_rewrite для направления всех запросов в файл .html, чтобы перейти к специальному контроллеру статического содержимого.Итак:

my/super/article-about-phones.html

будет перенаправлять на:

/content/static/article-about-phones/

Это может выглядеть примерно так:

Options +FollowSymLinks 
RewriteBase / 
RewriteEngine On

RewriteRule  ^(.+)/([^/]+)\.html$ /content/static/$1/ [NC,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...