我正在为具有搜索功能的Expression Engine开发一个附加组件。
对于过去的搜索表单,我使用了标准HTML <form>
,其method
属性设置为GET
,然后服务器端我将解析此GET
1}}变量为数据库查询的某种形式的WHERE
条件。
我正在尝试在Expression Engine附加组件中实现此逻辑,但似乎Expression Engine不喜欢带有查询字符串的URL,因为当我提交表单时,页面中断(它会引发404错误)。 / p>
Expression Engine是否支持带有查询字符串的URL?或者这会破坏内部路由吗?
我还应该提一下,这个附加组件将在许多站点上实现(数量未知),如果可能的话,我不想对Expression Engine核心文件(即PHP脚本)进行任何更改,只是如果有人建议的话。
提前致谢。
编辑:我想我会对我想要实现的目标进行一些澄清。过去,我使用$_GET
变量来驱动搜索表单。所以我可能有一个像:
如您所见,我的查询字符串包含名称和值对作为参数(包括page
的一个参数),这些参数将使用action
属性设置为{{1}的表单创建}。
如果存在GET
个参数,那么$_GET
将解析它,将它们表达为SQL或XPATH查询或其他任何内容;然后返回匹配的记录。然后,用户可以通过更新URL中存在的search.php
参数来浏览这些记录;查询将仅返回结果集的另一部分,因为其他page
参数仍将在URL中。
我希望使用Expression Engine附加组件实现相同的功能。我想要一个采用用户提交的标准的表单,然后返回一个可分页的记录集。我认为使用查询字符串将是最好的选择,因为它是RESTful和诸如此类的,但正如前面提到的Expression Engine不喜欢URL中存在的查询字符串,将其视为不同的URL并抛出404错误。 / p>
如何创建生成表单的加载项,然后将提交的用户用于查询数据库表,并将结果返回给用户,该结果也可以是页面?
答案 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
没有。