我正在使用CodeIgniter实现一个搜索框,但我不确定如何通过搜索参数。我有三个参数:搜索字符串;产品分类;和排序顺序。他们都是可选的。目前,我通过$_POST
将参数发送到临时方法,该方法将参数转发到常规URI表单。这很好用。我使用了一种奇怪的URI格式:
http://site.com/products/search=computer,sort=price,cat=laptop
有没有人有更好/更清晰的传递内容?
我正在考虑将它作为参数传递给products方法,但由于参数是可选的,所以事情会变得混乱。我应该吮吸它,只需打开$_GET
方法吗?提前谢谢!
答案 0 :(得分:3)
您可以enable query strings in CodeIgniter允许更标准的搜索功能。
<强> CONFIG.PHP 强>
$config['enable_query_strings'] = FALSE;
启用后,您可以在应用中接受以下内容:
http://site.com/products/search?term=computer&sort=price&cat=laptop
此处的好处是,用户可以轻松编辑URL以快速更改其搜索,并且您的搜索使用常用搜索功能。
这种方法的缺点是你违反了CodeIgniter开发团队的一个设计决策。但是,我的个人意见是,只要查询字符串不用于大部分内容,仅适用于搜索查询等特殊情况,这是可以的。
答案 1 :(得分:1)
更好的方法和CI开发人员想要的方法是将所有搜索参数添加到URI而不是像这样的查询字符串:
http://site.com/products/search/term/computer/sort/price/cat/laptop
然后,您将从第3段(“term”)向前解析所有URI段到key =&gt;数组中。 URI类中带有uri_to_assoc($segment)
函数的值对。
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
答案 2 :(得分: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
}
...
}
...
}