在Expression Engine 2中支持带有GET参数(查询字符串)的URL?

时间:2011-10-18 10:20:53

标签: php html forms expressionengine

我正在为具有搜索功能的Expression Engine开发一个附加组件。

对于过去的搜索表单,我使用了标准HTML <form>,其method属性设置为GET,然后服务器端我将解析此GET 1}}变量为数据库查询的某种形式的WHERE条件。

我正在尝试在Expression Engine附加组件中实现此逻辑,但似乎Expression Engine不喜欢带有查询字符串的URL,因为当我提交表单时,页面中断(它会引发404错误)。 / p>

Expression Engine是否支持带有查询字符串的URL?或者这会破坏内部路由吗?

我还应该提一下,这个附加组件将在许多站点上实现(数量未知),如果可能的话,我不想对Expression Engine核心文件(即PHP脚本)进行任何更改,只是如果有人建议的话。

提前致谢。

编辑:我想我会对我想要实现的目标进行一些澄清。

过去,我使用$_GET变量来驱动搜索表单。所以我可能有一个像:

这样的网址
  

http://example.com/search.php?size=large&color=red&page=1

如您所见,我的查询字符串包含名称和值对作为参数(包括page的一个参数),这些参数将使用action属性设置为{{1}的表单创建}。

如果存在GET个参数,那么$_GET将解析它,将它们表达为SQL或XPATH查询或其他任何内容;然后返回匹配的记录。然后,用户可以通过更新URL中存在的search.php参数来浏览这些记录;查询将仅返回结果集的另一部分,因为其他page参数仍将在URL中。

我希望使用Expression Engine附加组件实现相同的功能。我想要一个采用用户提交的标准的表单,然后返回一个可分页的记录集。我认为使用查询字符串将是最好的选择,因为它是RESTful和诸如此类的,但正如前面提到的Expression Engine不喜欢URL中存在的查询字符串,将其视为不同的URL并抛出404错误。 / p>

如何创建生成表单的加载项,然后将提交的用户用于查询数据库表,并将结果返回给用户,该结果也可以是页面?

3 个答案:

答案 0 :(得分:5)

请注意,虽然这不是插件的主要用途,但BoldMinded的SuperGlobals可让您通过{get:MYVAR}{post:MYVAR}关键字直接在模板中访问GET和POST变量。这是非常方便的功能,我已经多次使用它来搜索结果等。与SuperSearch结合使用,这是构建EE搜索的一种非常合理的方式。

允许访问GET和POST变量的另一个插件是Rob Sanchez的Mo' Variables,它是免费的。它使用相同的{get:MYVAR}{post:MYVAR}语法。

有一点需要注意的是,如果您的主机是廉价共享主机之一,您必须强制查询字符串才能使EE工作,那么GET参数是一个坏主意。所以要确保你有一个体面的网络主机。 :)

答案 1 :(得分:2)

EE不支持前端的$ _​​GET变量,没有。建议:将表单提交到模块的操作URL(http://yoursite.com/index.pjp?ACT=XX),然后将提交的变量转换为段,并重定向到该段。

答案 2 :(得分:2)

如果查询字符串中有多个参数,看起来绝对是倒退的,那么带有查询字符串的URL似乎有效。

因此http://example.com/?foo=bar&baz=1有效,但http://example.com/?foo=bar没有。