1

我在我的项目中使用 codeigniter 作为模块来将信息显示为类别及其项目。

我想要的网址如下

  1. sitename.com/module/ 将以随机顺序显示所有项目。
  2. sitename.com/moduel/categoryname/ 将显示该特定类别中的所有项目
  3. sitename.com/module/categoryname/title-of-the-item/ 这将显示该特定项目的详细信息

这里 sitename.com/module/ 是 codeigniter 的根目录,默认控制器是 home。

我的问题是如何为一段或 uri 和两段 uri 设置路线

  1. sitename.com/module/ 应该加载默认控制器(在我的例子中是 home)
  2. sitename.com/module/categoryname/ 应该加载 home/category/categoryname
  3. sitename.com/module/categoryname/title-of-the-item 应该加载 index/title/title-of-the-item

我将定义我的功能如下

  1. 函数索引() ...
  2. 函数类别($categoryname) ....
  3. 函数标题($title)....

所以,要么我想根据段数创建一个路由,要么如果有任何其他替代方案可以通过路由来完成这个,那很好。

我想使用路由而不是通过将 2 个段作为参数传递给 Index 函数来做到这一点。

所以, ?

4

2 回答 2

6

将站点的基本 url 设置为sitename.com/module

您可以尝试数据库驱动的路由。
这通过使用数据库表为您编写路线来工作。

示例数据库表;

CREATE TABLE IF NOT EXISTS `app_routes` (
  `id` bigint(20) NOT NULL auto_increment,
  `category` varchar(192) collate utf8_unicode_ci NOT NULL,
  `controller` varchar(64) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `category` (`category`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;

示例路线;

$route[ 'default_controller' ]  = 'home';
$route[ '404_override' ]        = 'error404';

require_once( BASEPATH .'database/DB'. EXT );
$db =& DB();
$query = $db->get( 'app_routes' );
$result = $query->result();
foreach( $result as $row )
{
    $route[ $row->slug ]                 = 'home/category_lookup/'.$row->slug;
    $route[ $row->slug.'/:any' ]         = 'home/item_lookup/'$row->slug/$1;
    $route[ $row->controller ]           = 'error404';
    $route[ $row->controller.'/:any' ]   = 'error404';
}

链接将为您提供完整的详细信息(这不是我的工作 - Google 只是我的朋友)。

于 2013-01-04T13:58:30.027 回答
6
$route['page/(:any)'] = "home/page/$1";
$route['page'] = "home/index";
$route['(:any)/page/(:any)'] = "home/category/$1/page/$2";
$route['(:any)/page'] = "home/category/$1";
$route['page'] = "home/index";

$route['(:any)/(:any)'] = "home/title/$2";
$route['(:any)'] = "home/category/$1";

最后两行(7 和 8)是我需要的......这符合我的目的

最后两行(1,2,3,4,5)之前的行是我对最后两行(7和8)使用分页的方式

只有 home/category 和 home/ 有分页,而没有 home/title 是结束页面。

同时,如果有人发现代码可能有问题或需要完善,请添加答案以便我更新。

于 2013-01-04T14:08:39.783 回答