0

我创建了一个网站,其中包含带有 url 的产品:http://somesite.com/controller/function/brand_id/product_id。我想将这些 ID 更改为更易于搜索的名称。所有这些 ID 都在带有名称的数据库中。是否可以从数据库中获取这些名称并将它们放入 URL 中?这是因为我无法使用路由工具。产品和品牌是动态的,可以随时删除或(名称)更改。所以不能把它硬编码到路线中。

谢谢你的努力

4

2 回答 2

1

您可以使用_remapCodeigniter 内置函数在 url 中使用多个函数:在控制器中使用以下函数:

public function _remap($method){
if ($method == 'project-name')
{
   //display project1
}
elseif($method == 'project-name2')
{
   //display project2
}

另一个使用参数的例子:

public function _remap($method, $params = array())
{
    $method = 'process_'.$method;
    if (method_exists($this, $method))
    {
        return call_user_func_array(array($this, $method), $params);
    }
    show_404();
}

$methodfunction您的网址中: http ://somesite.com/controller/function/brand_id/product_id

您可以通过从数据库中提取它们来对不同的方法执行相同的操作

看看这里:http ://codeigniter.com/user_guide/general/controllers.html#remapping

于 2012-05-06T22:57:06.170 回答
0

brand_id您应该能够通过为和设置一些通配符路由来完成此操作product_id。当您对产品执行查询时,您只需检查 URI 段是整数(ID)还是字符串(名称)并相应地查询数据库。我将存储产品名称的 URL 友好版本(替换空格和特殊字符),然后对其进行查询,并将其用于在整个应用程序中生成链接。

更新:这是您在路由所有内容的方法中所需的逻辑的代码示例:

public function search($brand, $product)
{
    if (is_int($brand))
    {
        // Look up the brand using an ID
        $this->db->where('id', $brand);
    }
    else
    {
        // Look up the brand based on the URI segment
        $this->db->where('uri_friendly_name', $brand);
    }

    // Do the same with adding conditionals for $product and then run the query
}

这是您需要的路线示例:

$route['controller/function/(:any)/(:any)'] = "controller/search";
于 2012-05-05T19:21:02.923 回答