parserALT
Страницы форума: ← Назад | 1 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 600 | Дальше →

Порядок полей form:fields

#1Николай Л.
26.02.10 13:37
www.parser.ru → | ответить → | в избранное →

Порядок полей form:fields

Вопрос к знатокам.

Подскажите, как организован порядок (получения внутри Парсера) полей для $form:fields.

Например, тело запроса выглядит как:
proceed=1&list_133=1&list_0=18&list_134=2
,

по идее, ^form:fields.foreach должен возвратить их в таком же порядке,
т. е. proceed, list_133, list_0, list_134, а на деле возвращается list_0, proceed, list_133, list_134.

Разве нет варианта чтобы получить их в порядке тела запроса, кроме как вручную разбивать в таблицу тело запроса по разделителю и потом разбирать через меню?
#2Николай Л.
→ Николай Л. [#1] | 26.02.10 14:03
www.parser.ru → | ответить → | в избранное →

...а если форма вдобавок кодируется как multipart/form-data и совместно посылается несколько файлов размером этак 10 МБ...

Как-то не совсем комильфо будет разбирать эти поля :-)
#3Vint
→ Николай Л. [#2] | 26.02.10 14:14
www.parser.ru → | ответить → | в избранное →

А зачем нужен порядок _разноимённых_ полей?

Для файлов есть $form:files
#4Николай Л.
→ Vint [#3] | 26.02.10 14:44
www.parser.ru → | ответить → | в избранное →
Файлы не нужны.

Нужен порядок для следующего.

Есть некие абстрактные поля. Имена полей вида abstract_17238, где 17238 -- идентификатор в базе.

Порядок в базе определяется не идентификатором (автоинкрементным), а полем sort_order, например.

В форме с помощью javascript происходит модификация полей, какие-то из них удаляются, добавляются новые (между ними, перед или после них).
Для новых полей создаются имена вида abstract_0 + случайное число (чтобы таблицы не было из них).

Так как у нас в базе данных для автоинкрементных полей не предусмотрено нулей впереди, все такие поля считаются новыми (добавляются).
Другие -- обновляются (если пришли с формы, те что не пришли - удаляются).

Вот тут самое интересное.
Думал, что для ^form:fields.foreach будет порядок полученный из тела запроса -- тогда не вопрос.

А нет, батенька, не выйдет. Или запроса разбирать или в js синхронизировать (не вопрос).
#5Olax
→ Николай Л. [#4] | 26.02.10 15:11
www.parser.ru → | ответить → | в избранное →

И все равно не увидел причины строгой последовательности

if вам в помощь
у меня примерно такой же вопрос - приходят переменные с динамическими именами - все чудесно обрабатывается - если надо могу кинуть кусок кода или логику (личка), но по сути этот вопрос у меня вообще не вызвал затруднений.
#6Olax
→ Николай Л. [#4] | 26.02.10 15:20
www.parser.ru → | ответить → | в избранное →
Самое главное группировка обьектов и ключи к группам(набор полей обьекта обьеденные одним идентификатором (инкремент)) и типам групп(новые, редактируемые, удаленные - три отдельных списка в скрытых полях).
В общем как-то так.
#7Николай Л.
→ Olax [#6] | 26.02.10 15:24
www.parser.ru → | ответить → | в избранное →

Вопрос не про то, как сделать...

А про то, почему с порядком в $form:fields получается такая история.

Это вопрос Мише, скорее всего.
#8Николай Л.
→ Olax [#5] | 26.02.10 15:25
www.parser.ru → | ответить → | в избранное →

Не понял, причем тут ^if?

#9Olax
→ Николай Л. [#7] | 26.02.10 15:34
www.parser.ru → | ответить → | в избранное →

Какая разница? вода в ступе!

#10Sumo
→ Николай Л. [#7] | 26.02.10 15:36
www.parser.ru → | ответить → | в избранное →

Парсер получает поля в том порядке, который выдает веб-сервер...

... при этом протокол HTTP не настаивает на некотором "правильном" порядке следования данных (более того - предполагается, что параметры могут следовать в любом порядке). Соответственно требовать от Парсера некоторого "порядка" следования полей не стоит и алгоритм перебора параметров надо строить так, чтобы он не зависел от этого порядка. Кроме того, надо помнить, что поддержка порядка следования элементов в хеше появилась в Парсере только с версии 3.4.0.
#11Николай Л.
→ Sumo [#10] | 26.02.10 15:45
www.parser.ru → | ответить → | в избранное →

Изменю вопрос

Как Парсер заполняет $form на уровне ядра. Последовательность заполнения ведь прослеживается! Не на основе генератора случайных чисел ;-)
#12Sumo
→ Николай Л. [#11] | 26.02.10 15:48
www.parser.ru → | ответить → | в избранное →

http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/types/pa_vform.C?rev=HEAD&content-type=text/vnd.viewcvs-markup

#13Николай Л.
→ Sumo [#12] | 26.02.10 16:00
www.parser.ru → | ответить → | в избранное →

Как раз там и ищу

Вроде все последовательно. Хм.
#14Николай Л.
→ Olax [#9] | 26.02.10 16:02
www.parser.ru → | ответить → | в избранное →

В супе вода, ага.

#15Misha v.3
→ Николай Л. [#4] | 26.02.10 16:38
www.parser.ru → | ответить → | в избранное →

я бы не стал рассчитывать на порядок полей в запросе

т.к. это не гарантирует работоспособность, и решается добавлением ещё одного поля, в котором списком передаётся корректная последовательность полей (например: "abstract_0111,abstract_17238,abstract_0222")
#16Misha v.3
→ Николай Л. [#1] | 26.02.10 16:40
www.parser.ru → | ответить → | в избранное →

версия parser?

#17Николай Л.
→ Misha v.3 [#16] | 26.02.10 16:42
www.parser.ru → | ответить → | в избранное →

3.4.0

#18Николай Л.
→ Misha v.3 [#15] | 26.02.10 16:46
www.parser.ru → | ответить → | в избранное →

Михаил, уточните...

Поля, насколько я понял из cvs-хранилища заполняются последовательным разбором разделителей?

Почему тогда в хэше они расположены иначе? Апач ведь не может изменять порядок следования значений в теле запроса?
#19Misha v.3
→ Николай Л. [#18] | 26.02.10 16:49
www.parser.ru → | ответить → | в избранное →

вы действительно считаете, что я весь код помню? :)

не знаю, надо разбираться.

вряд-ли сервер меняет порядок полей, скорее всего в form используется хеш, который не помнит порядка добавления элементов.
#20Николай Л.
→ Misha v.3 [#19] | 26.02.10 16:51
www.parser.ru → | ответить → | в избранное →

«Порядок полей form:fields [http://cvsview.parser.ru/cgi/viewcvs.cgi/parser3/src/types/pa_vform.C?rev=HEAD&content-type=text/vnd.viewcvs-markup]»

Последнее очевиднее. В @todo?
#21Николай Л.
→ Николай Л. [#20] | 26.02.10 16:55
www.parser.ru → | ответить → | в избранное →

Hash::put_dont_replace

http://cvsview.parser.ru/cgi/viewcvs.cgi/*checkout*/parser3/src/main/Attic/pa_hash.C

Оно?
#22MoKo
→ Николай Л. [#1] | 24.07.10 23:58
www.parser.ru → | ответить → | в избранное →

исправлено в head

Спасибо, что заметили. Конструктор копирования хеша (не парсерный, а в исходном коде) не сохранял порядок.
#23max_rip
→ MoKo [#22] | 25.07.10 20:36
www.parser.ru → | ответить → | в избранное →

значит ли это, что в $form:files (при одинаковом name) файлы тоже будут приходить в порядке их загрузки?

#24Misha v.3
→ max_rip [#23] | 26.07.10 03:17 / 03:18
www.parser.ru → | ответить → | в избранное →

очень вероятно. проверите? :)

P.S. наверное "в порядке их загрузки" следует понимать как "в порядке их отправки браузером".
#25max_rip
→ Misha v.3 [#24] | 27.07.10 01:42
www.parser.ru → | ответить → | в избранное →

вроде бы да +)

Страницы форума: ← Назад | 1 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 600 | Дальше →