Комментарии пользователя «JustViktor»

0
И все-таки был использован вариант, который предложил pitbull.

Создан сниппет [[GetStringMod]], который преобразует полученный методом GET значения параметров, в вид, приемлемый для ditto, т.е. поочередно, через запятые;
В моем примере три параметра формы priority, place, style (принимают значения из input selelct'а).


$Priority = isset($_GET["priority"]) ? $_GET["priority"] : false;
$Place = isset($_GET["place"]) ? $_GET["place"] : false;
$Style = isset($_GET["style"]) ? $_GET["style"] : false;

if ($Priority=="priority") $Priority="";
if ($Place=="place") $Place="";
else $Place=','.$Place;
if ($Style=="style")$Style="";
else $Style=','.$Style;

echo $Priority.$Place.$Style;


Таким образом запрос например
index.php?tags=priority1&tags=style1&tags=place1
преобразуется в priority1,style1,place1

Далее он(сниппет) помещен в вызов ditto

[!Ditto? &startID=`id` &tpl=`list-output` &display=`all` &tagDelimiter=`,` &tags=`[!GetStringMod!]` &tagData=`priority,style,place` &tagMode=`onlyTags`  &sortBy=`createdon` &sortDir=`ASC` &extenders=`request`!]

И дитто выбирает значения подкаталога только пришедшим, с помощью расширения request, тэгам (параметр &tags)
Всё, надеюсь это кому-нибудь пригодится :)
avatar

JustViktor

  • 14 сентября 2009, 02:06
0
Вообще я вижу только два эфективных решения.
1. Переделать request.extender.inc.php так, чтоб он смог нормально обработать POST массив из html формы (как?).
2. С помощью способа, предложенного Temus (jquery.form.js) преобразовывать параметры перед отправкой html формы.
(я остановился на втором варианте, т.к. по задаче можно использовать javascript, но если по уму, то лучше (а главное универсальнее) конечно проработать первый.)
Кстати, подобной «многопараметровой» формой можно было бы сделать афтоконфигуратор сниппетов для MODX.
Например была бы колонка параметров (допустим для того же ditto), а по нажатию одного из них, раскрывается форма ввода возможные значений (checkbox, multiple select, select, input). И опубликовать бы такой конфигуратор на modx-cms.ru :-)
В revolution, вроде уже организована подобная штука.
avatar

JustViktor

  • 20 августа 2009, 17:41
0
Нет, GET не передаёт массив в нужном виде.
Но я пробывал и с POST и вот что вышло.
В переменную $_REQUEST (файл request.extender.inc.php ) приходит массив в нормальном виде
Array ( [id] => 6 [ditto_tags] => Array ( [0] => one [1] => two [2] => three )...
но далее обработка запроса уже не подходит для такого массива. Это как раз строка 56 (request.extender.inc.php) и ditto возвращает «No documents found».
avatar

JustViktor

  • 20 августа 2009, 15:03
0
Вот нашел еще способ www.mredkj.com/tutorials/tutorial004.html, только не могу совместить обработку значений в массив и отправку формы. В javascript не силён…
avatar

JustViktor

  • 20 августа 2009, 11:11
0
Просто, если следовать такому способу, то лучше уже перехватить пришедший GET запрос в файле request.extender.inc.php
На строке 56 начинается преобразование, сейчас думаю, как лучше всего заместить.
Но появилась другая проблема. $_REQUEST приходит в виде
Array ( [id] => 6 [ditto_tags] => param3 [QE_linksShown] => 1 [SN1a44e02f18d0a] => f1f8923beac5e5d7bb16349d217c90c33 [__utma] => 10015269.1256337980858517400.1246546026.1250718271.1250750525.95 [__utmz] => 10015269.1247416797.47.2.utmcsr=goodsite.ru|utmccn=(referral)|utmcmd=referral|utmcct=/away.php [SN4a436f5689b0f] => 2b9780c39b4b021efbd6e1b7f82bf0d2 [__utmb] => 10015269.1.10.1220750525 [__utmc] => 10014269 ) 

Здесь только одна переменная ([ditto_tags] => param3 ), что означает, что это не дитто не принимает разделённые параметры, а это GET передаёт только последний из одинаковых. Верно?
avatar

JustViktor

  • 20 августа 2009, 10:55
0
Понятно, но я всё же надеюсь, что найдутся и другие решения.
Просмотрел дополнение tvexplorer, он вроде очень гибкий, но пока находится в бета версии.
Ктстати, в передаче &ditto_filter=pole,criteria,match (если пользоваться встроеным фильтром ditto) такая же проблема. Автоматически запрос через html-форму не сгенирировать.
avatar

JustViktor

  • 20 августа 2009, 00:10
0
Но в таком случае корректировать приходящий GET запрос нужно внутри кода самого сниппета, а не в запросе.
Хотя, если честно, то я немного не понял, Вашего решения.
avatar

JustViktor

  • 19 августа 2009, 20:51