Regex для исключения категорий из URL в Codeigniter. Как? - PullRequest
1 голос
/ 12 октября 2011

Я хотел бы иметь

эти URL-адреса в качестве категорий на моей странице:

http://example.com/en/articles        //for list of all
http://example.com/en/articles/cars    //for list of all cars articles
http://example.com/en/articles/nature  //for list of all nature acrticles
http://example.com/en/articles/sport    //for list of all sport articles

Я использую i18n, поэтому у меня есть и другие ссылки, такие как:

http://example.com/fr/articles        //for list of all
http://example.com/fr/articles/cars    //for list of all cars articles
http://example.com/fr/articles/nature  //for list of all nature acrticles
http://example.com/fr/articles/sport    //for list of all sport articles

Это просто, я называю контроллером article.php и внутри него у меня есть функции автомобили, природа, спорт и все работает хорошо.

Однако я хочу иметь статьи, независимо от того, к какой категории они относятсявот так:

http://example.com/en/articles/article-about-cars http://example.com/en/articles/article-about-nature

Итак, категория выпала из URL при просмотре полной статьи.

Я использую i18n, поэтому мои маршрутыдля этого выглядят так:

$route[’^en/articles/(.+)$’] = “articles/show_full_article/$1”;
$route[’^fr/articles/(.+)$’] = “articles/show_full_article/$1”;

Но этот вызов каждый раз вызывает функцию show_full_article, потому что она находится во 2-м сегменте.

Итак, мне как-то нужно пересобрать регулярное выражение в:

$ route ['^ en / article /(.+)$'] = «article / show_full_article / $ 1»;

для исключения функций автомобилей, природы и спорта.У меня есть только 3 категории, поэтому набирать его вручную не составляет особого труда.

Пожалуйста, если вы знаете, как ввести регулярное выражение в router.php, чтобы исключить эти три категории, чтобы codeigniter больше не видел их в качестве названий статей., дай мне знать.Я буду очень признателен.

Заранее благодарю за любой совет.

1 Ответ

0 голосов
/ 12 октября 2011

Возможно, вы захотите использовать для этого отрицательный прогноз (?!...).
В вашем случае:

 $route['^en/articles/(?!(?:cars|nature|sport)$)(.+)$'] =

Это гарантирует, что (.+) не может быть одним из этих слов. Его нужно заключить в (?:..)$, чтобы он также совпадал с концом строки, так как в противном случае утверждение также заблокировало бы natureSMTHNG и подобные более длинные термины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...