【问题标题】:How can I have Code Igniter URI segments for multiple variables?如何拥有多个变量的 Code Igniter URI 段?
【发布时间】:2010-02-16 11:29:06
【问题描述】:

我正在编写一个允许您根据位置和类别过滤数据库结果的应用程序。

如果有人要在高尔夫类别下搜索利物浦,则 URI 将为 /index.php/search/Liverpool/Golf

如果有人想按位置而不是类别搜索,他们将被发送到/index.php/search/Liverpool

但是,如果有人只想按类别进行过滤,他们将无法使用/index.php/search/Golf,因为这会被位置搜索捕获。

是否有最佳实践方法可以识别/index.php/search/Golf?关于向 URI 添加什么以使这两个查询不同的一些最佳实践? /index.php/search/category/Golf 或许?

尽管这开始显示出/index.php?search&category=Golf 的特征,这正是我想要避免的。

【问题讨论】:

  • 看来/index.php/search/category/Golf 已经足够好了。就像标签

标签: php url codeigniter uri


【解决方案1】:

尝试使用 $this->uri->uri_to_assoc(n) 此处描述http://codeigniter.com/user_guide/libraries/uri.html(页面一半)

基本上你会像这样构建你的网址:

mysite.com/index.php/search/location/liverpool/category/golf

注意:参数是可选的,所以你不必一直都在里面。你也可以这样做

mysite.com/index.php/search/location/liverpool/ 和

mysite.com/index.php/search/category/golf

这样,如果您要查找的元素不存在,它将返回 FALSE

【讨论】:

  • 这是最好的方法,因为它维护了 GET 变量的键/值对而没有讨厌的语法。
【解决方案2】:

无论他们在搜索什么,最好都让你的 URI 段保持相关性。

index.php/LOCATION/CATEGORY

如果他们对某个位置不感兴趣,则将填充物传递给系统:

index.php/anywhere/golf

然后在您的代码中,您只需检查 ANYWHERE 的特定字符串以确定他们是否只想查看活动。我假设您将使用链接或论坛重定向它们(并且它们自己不会输入 URI 字符串),因此您应该安全地传递您期望的信息并针对该信息进行测试。

【讨论】:

  • 我要去index.php/search/All/All/Golf
  • @Matt - 我想你这样做会很满意。你的 uri 位置(1st/2nd/3rd)基本上替换了旧学校 GET 字符串 key=value 对中的键。跨度>
【解决方案3】:

我使用上面Tom建议的格式,然后按照下面的几行来确定参数的值。

$segment_array = $this->uri->segment_array();        
$is_location_searched = array_search('location', $segment_array);
if($is_location_searched && $this->uri->segment($is_location_searched +1))
{
    $location = $this->uri->segment($is_sorted+1);
}

【讨论】:

  • 错过了 Toms 关于使用 $this->uri->uri_to_assoc(n) 的建议,这似乎比我上面的代码更简洁,但最终的 URL 结构相同。
【解决方案4】:

查看http://lucenebook.com/#/p:solr/s:wiki 并在左侧导航中单击一下。当您这样做时,请密切注意 url 中发生的情况。我真的很喜欢这个方案有很多原因。

  1. 它对 SEO 友好。
  2. “好奇”的人可以混合/匹配网址,但仍然可以正确搜索。
  3. 看起来不错!

当然,诀窍在于代码,在于您如何构建事物。我花了几个星期来整理它,但我终于有了我自己的那个网站版本。只是不是基于 ajax,因为我比 ajax 更喜欢搜索引擎。 Ajax 不支付账单。

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    相关资源
    最近更新 更多