1

我正在使用 CodeIgniter 实现一个搜索框,但我不确定我应该如何传递搜索参数。我有三个参数:搜索字符串;产品分类; 和排序顺序。它们都是可选的。目前,我将参数发送$_POST到一个临时方法,该方法将参数转发到常规 URI 表单。这工作正常。不过,我使用的是一种奇怪的 URI 格式:

http://site.com/products/search=computer,sort=price,cat=laptop

有没有人有更好/更清洁的传递方式?我正在考虑将它作为参数传递给 products 方法,但由于参数是可选的,所以事情会变得混乱。我应该把它吸起来,然后打开$_GET方法吗?提前致谢!

4

3 回答 3

3

查询字符串

您可以在 CodeIgniter 中启用查询字符串以允许更标准的搜索功能。

配置文件

$config['enable_query_strings'] = FALSE;

启用后,您可以在应用中接受以下内容:

http://site.com/products/search?term=computer&sort=price&cat=laptop

这样做的好处是用户会发现很容易编辑 URL 以快速更改他们的搜索,并且您的搜索使用常见的搜索功能。

这种方法的缺点是您违背了 CodeIgniter 开发团队的设计决策之一。但是,我个人的看法是,只要查询字符串不用于您的大部分内容,仅用于搜索查询等特殊情况,这是可以的。

于 2009-04-03T08:47:44.660 回答
1

一种更好的方法,也是 CI 开发人员想要的方法,是将所有搜索参数添加到 URI,而不是像这样的查询字符串:

http://site.com/products/search/term/computer/sort/price/cat/laptop

uri_to_assoc($segment)然后,您将使用 URI 类中的函数将第 3 段(“术语”)中的所有 URI 段解析为键 => 值对数组。

Class Products extends Controller {
...

    // From your code I assume you are calling a search method.
    function search()
    {
        // Get search parameters from URI.
        // URI Class is initialized by the system automatically.
        $data->search_params = $this->uri->uri_to_assoc(3);
        ...
    }
    ...
}

这将使您可以轻松访问所有搜索参数,并且它们可以在 URI 中按任何顺序排列,就像传统的查询字符串一样。

$data->search_params现在将包含一个 URI 段数组:

Array
(
    [term] => computer
    [sort] => price
    [cat] => laptop
)

在此处阅读有关 URI 类的更多信息:http: //codeigniter.com/user_guide/libraries/uri.html

于 2010-11-27T17:32:48.203 回答
0

如果您使用固定数量的参数,您可以为它们分配一个默认值并发送它,而不是根本不发送参数。例如

 http://site.com/products/search/all/somevalue/all

接下来,在控制器中您可以忽略参数 if (parameter == 'all'.)

 Class Products extends Controller {
 ...

     // From your code I assume that this your structure.
     function index ($search = 'all', $sort = 'price', $cat = 'all')
     {
         if ('all' == $search)
         {
            // don't use this parameter
         }
         // or
         if ('all' != $cat)
         {
            // use this parameter
         }
         ...
     }
     ...
 }
于 2009-04-03T04:48:25.733 回答