Поддержка URL с параметрами GET (строки запроса) в Expression Engine 2? - PullRequest
3 голосов
/ 18 октября 2011

Я разрабатываю дополнение для Expression Engine, в котором есть средство поиска.

Для поисковых форм в прошлом я использовал стандартный HTML <form> с атрибутом method, установленным на GET, а затем на стороне сервера я бы проанализировал эти GET переменные в некоторой форме WHERE условие для запроса к базе данных.

Я пытаюсь реализовать эту логику в дополнении Expression Engine, но, похоже, Expression Engine не любит URL-адреса со строками запроса, как при отправке формы разрыв страницы (выдает ошибку 404).

Поддерживает ли Expression Engine URL-адреса со строками запроса? Или это нарушает внутреннюю маршрутизацию?

Я должен также упомянуть, что это дополнение должно быть реализовано на многих сайтах (число неизвестно), и я хотел бы избежать внесения любых изменений в основные файлы Expression Engine (например, PHP-скрипты), если это возможно, просто на случай, если это будет предложено.

Заранее спасибо.

РЕДАКТИРОВАТЬ: Я думал, что я бы добавил некоторые разъяснения о том, что я пытаюсь достичь.

В прошлом я использовал $_GET переменных для управления поисковыми формами. Поэтому у меня может быть такой URL:

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

Как видите, моя строка запроса содержит пары имен и значений в качестве параметров (включая одну для page), и они будут созданы с формой, атрибут action которой установлен в GET.

Если присутствуют $_GET параметры, то search.php проанализирует это, сформулирует их в запрос SQL или XPATH или что-то еще; а затем вернуть соответствующие записи. Затем пользователь может пролистать эти записи, обновив параметр page, присутствующий в URL; запрос вернет просто еще одну часть результирующего набора, так как остальные параметры GET все еще будут в URL.

Я хочу добиться того же с помощью дополнения Expression Engine. Я хочу форму, которая принимает критерии, представленные пользователем, а затем возвращает набор записей, который можно просматривать на странице. Я подумал, что использование строки запроса будет лучшим вариантом, учитывая, что она является RESTful и так далее, но, как уже упоминалось, Механизм выражений не любил строку запроса, присутствующую в URL, рассматривал ее как другой URL и выдавал ошибку 404.

Как создать надстройку, которая генерирует форму, отправленный пользователь затем используется для запроса таблицы базы данных, а результаты возвращаются пользователю, который также может быть страницей?

Ответы [ 3 ]

5 голосов
/ 22 ноября 2011

Обратите внимание, что хотя это и не является основной целью дополнения, SuperGlobals от BoldMinded позволяет вам получать доступ к переменным GET и POST непосредственно в ваших шаблонах с помощью ключевых слов {get:MYVAR} или {post:MYVAR}.Это действительно удобная функциональность, и я использовал ее несколько раз для результатов поиска и т. Д. Используемый в сочетании с SuperSearch, это довольно разумный способ построения поиска для EE.

Еще одно дополнение, позволяющее получить доступ к GET и POSTvars is Mo 'Variables от Rob Sanchez, это бесплатно.Он использует тот же синтаксис {get:MYVAR} и {post:MYVAR}.

Одно предостережение: если ваш хост является одним из дешевых общих хостов, для которого вы должны заставить строки запросов заставить EE работать, то параметры GETплохая идеяПоэтому убедитесь, что у вас есть достойный веб-хостинг.:)

2 голосов
/ 02 ноября 2011

Похоже, что URL-адреса со строками запроса работают, если в строке запроса имеется более одного параметра, что выглядит совсем наоборот.

Так что http://example.com/?foo=bar&baz=1 работает, а http://example.com/?foo=bar - нет.

2 голосов
/ 18 октября 2011

EE не поддерживает переменные $ _GET на внешнем интерфейсе, нет.Предложение: отправьте форму на URL-адрес действия вашего модуля (http://yoursite.com/index.pjp?ACT=XX),, затем превратите отправленную переменную в сегмент и перенаправьте на нее.

...