表达式引擎2支持带有GET参数(查询字符串)的url


Support for URLs with GET parameters (query strings) in Expression Engine 2?

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

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

我正试图在表达式引擎插件中实现此逻辑,但似乎表达式引擎不喜欢带有查询字符串的url,因为当我提交表单时分页(它抛出404错误)。

表达式引擎是否支持url查询字符串?或者这会破坏内部路由吗?

我还应该提到这个附加组件是在许多网站上实现的(数量未知),如果可能的话,我想远离对Expression Engine核心文件(即PHP脚本)进行任何更改,以防万一。

提前感谢。

编辑:我想我应该澄清一下我想要达到的目标。

过去,我使用$_GET变量来驱动搜索表单。URL可以是:

http://example.com/search.php?size=large&颜色= red&页面= 1

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

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

我想用表达式引擎插件实现相同的功能。我想要一个表单,它接受用户提交的标准,然后返回一个可分页的记录集。我认为使用查询字符串是最好的选择,因为它是RESTful之类的,但是前面提到的表达式引擎不喜欢URL中存在查询字符串,将其视为不同的URL并抛出404错误。

如何创建一个生成表单的附加组件,然后使用提交的用户来查询数据库表,并将结果返回给用户,然后也可以是页面?

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

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

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

如果查询字符串中有多个参数,那么带有查询字符串的url似乎可以工作,这似乎完全是向后的。

所以http://example.com/?foo=bar&baz=1可以工作,但是http://example.com/?foo=bar不行

EE在前端不支持$_GET变量,不支持。建议:提交你的表单到你的模块的动作URL (http://yoursite.com/index.pjp?ACT=XX),然后把你提交的变量变成一个段,并重定向到那个