Форум русской поддержки Joomla!® CMS
02.12.2016, 22:06:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Посоветуйте, как организовать форму

 (Прочитано 423 раз)
0 Пользователей и 1 Гость смотрят эту тему.
asuran
Новичок
*

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 5


« : 07.05.2015, 00:28:36 »

Здравствуйте!

Стоит задача сделать форму для регистрации большого количество людей. По моей задумке выглядеть это должно примерно так https://jsfiddle.net/asuran/kec8ag7d/embedded/result/
Для каждого человека несколько полей, есть кнопка для добавления новой строки. Регистрируется сразу несколько групп и все это потом отправляется. Данные из разных частей формы (делегации, участники и т.п.) могут попадать в разные таблицы БД. Также должна быть возможность потом открыть эту форму для редактирования.

Я сейчас умею создавать только простые формы - 1 контроллер, 1 модель, 1 таблица, 1 форма. Примерно понимаю как отправлять данные больше чем в одну таблицу из одной модели. Здесь как я понимаю нужно или как-то хитро составлять файл формы или выводить на страницу сразу несколько форм.

Подскажите, пожалуйста, как лучше запрогать требуемую форму, максимально используя api Joomla. Какие классы/функции использовать, какие переопределить?  Smiley
Записан
SeBun
Практически профи
*******

Репутация: +134/-3
Offline Offline

Пол: Мужской
Сообщений: 2271



« Ответ #1 : 07.05.2015, 10:18:36 »

Это даже не совет, это мое видение организации. Я бы сделал на манер журнала с листами. Пусть журнал - сама форма, страницы - поля формы. Работа формы обслуживается аяксом. В приведенном вами примере три группы, но их может быть больше. А сколько участников? Человек 20, 40? Поэтому я бы сделал одну форму и одну доп. таблицу в базе. Смотрите, как работает: вы открываете страницу, у вас только одна форма. Начинаете формировать группу, выбираете через select "лидеры", "сопровождающие", "участники" и т.д., эти данные могут быть заранее заданы в админке. Далее заполняете стандартные для всех поля, например ФИО, можете добавить доп. поля (пол, наличие собаки), и нажимаете добавить. Происходит аякс-запрос. Данные уходят в таблицу временных данных в базу, форма обновляется. Вы видите некую информацию, например "Участники: 1 чел", и чистые поля формы. Добавляете таким же образом следующего. Как только будет сформирована группа, нажимаете "Зарегистрировать" к примеру. И данные из временной таблицы переносятся в таблицу групп. Можно писать и не во временную, а сразу в основную, добавив, к примеру, какой то идентификатор, что бы знать, что группа не сформирована/сформирована. Как то так... По аналогии с журналом вы заполняете его страницы, а потом ложите журнал в шкаф.

По поводу организации таблиц в БД: вам потребуется таблица групп, таблица ролей ("лидеры", "сопровождающие", "участники"), таблица участников. Участники имеют роли и принадлежат группе. Группа имеет название или просто номер (тот же id).

Приведенный вами пример хорош, но когда вы его начнете заполнять, получится огромная форма с большим объемом отправляемых данных. А если ошибка? Забили человек 40, а потом сбой, и сидите забиваете по новому...

ИМХО  Roll Eyes
« Последнее редактирование: 07.05.2015, 10:28:40 от sebun » Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #2 : 07.05.2015, 10:37:48 »

Я сейчас умею создавать только простые формы - 1 контроллер, 1 модель, 1 таблица, 1 форма. Примерно понимаю как отправлять данные больше чем в одну таблицу из одной модели. Здесь как я понимаю нужно или как-то хитро составлять файл формы или выводить на страницу сразу несколько форм.
Вам не особо поможет JForm ибо она заточена под работу с одной записью!
На самом деле такая форма делается очень просто, вы можете динамично добавлять поля в нужном вам количестве через JS!
Но потом вам нужно будет их обработать в цикле!
А дальше уже решать что нужно вам делать!
+ Судя по вашему функционалу вы уверенны что вам нужно создавать пользователей? Пользователи будут заходить в какие то разделы под своим логином и паролем, и после что то  редактировать/изменять/создавать? Если нет то вам не нужно все это делать! Ибо в той форме что вы показали нет ввода логина для юзера или пароля!
+ нужна будет сводная таблица в которой вы будете писать нестандартные поля типа "дата рождения", "номер паспорта", "фото" и т.д.

Происходит аякс-запрос. Данные уходят в таблицу временных данных в базу, форма обновляется.
Происходит эпик фейл ) Ибо файлы аяксом не отправляются )))
Записан
robert
Профи
********

Репутация: +342/-11
Offline Offline

Пол: Мужской
Сообщений: 3566


« Ответ #3 : 07.05.2015, 10:44:24 »

Ибо файлы аяксом не отправляются )))
Почему нет? Есть же FormData().
Другое дело, целесообразно ли использовать AJAX?
Записан
SeBun
Практически профи
*******

Репутация: +134/-3
Offline Offline

Пол: Мужской
Сообщений: 2271



« Ответ #4 : 07.05.2015, 10:51:08 »

Другое дело, целесообразно ли использовать AJAX?
В принципе да, можно отправлять каждого участника в таблицу, пока не наберется группа. Потом регистрировать группу. Как я и писал, только без аякса.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #5 : 07.05.2015, 12:45:35 »

Другое дело, целесообразно ли использовать AJAX?
не есть небольшая целесообразность ) Во первых не будет перезагрузки, во вторых если ошибка вдруг в введенных данных - не надо будет заботится о валидации и новой вставке их по полям после перезагрузки )

Почему нет? Есть же FormData().
Честно говоря первый раз слышу о FormData, и как раз тут пишу AJAX форму, в которой мне нужно отправлять файл ) Думаю пригодится )
« Последнее редактирование: 07.05.2015, 12:48:43 от Istaan » Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #6 : 07.05.2015, 15:09:14 »

Писал уже неоднократно, гемор конечно. У formdata проблема с кроссбраузерностью, ie до 10 версии не поддерживает вообще (это вобще html5 приблуда). Но есть еще много плагинов кроссбраузерных вроде plupload, я бы советовал их юзать.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #7 : 07.05.2015, 15:24:08 »

Писал уже неоднократно, гемор конечно. У formdata проблема с кроссбраузерностью, ie до 10 версии не поддерживает вообще (это вобще html5 приблуда). Но есть еще много плагинов кроссбраузерных вроде plupload, я бы советовал их юзать.
Вот где собака зарыта ) Да пофиг! кто сейчас тот IE юзает ))
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #8 : 07.05.2015, 15:35:37 »

Корпоративный сектор юзает. Причем во многих конторах есть даже правило использовать только ie, и юзеры не могут себе ничего другого поставить. Там просто интеграция с AD и групповыми политиками домена в ie. А так да, для обычного сайта можно и забить на него.
Записан
robert
Профи
********

Репутация: +342/-11
Offline Offline

Пол: Мужской
Сообщений: 3566


« Ответ #9 : 07.05.2015, 15:50:29 »

кто сейчас тот IE юзает ))
Вот я тоже так думал.
Недавно прикрутил форму добавления видео и pdf-файлов к VM 1.0 на Joostina(!) Shocked, с использованием JS, конечно. Все проверял, причесал, а заказчик говорит: не работает. Оказалось, что у него IE, и ни на что другое не согласится поменять Sad.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #10 : 07.05.2015, 17:13:29 »

Да сроки сжатые делаю пока как быстро ) а быстро через FormData ) если к ИЕ придолбутся, допилю )
Записан
asuran
Новичок
*

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 5


« Ответ #11 : 07.05.2015, 17:37:02 »

Всем спасибо за ответы! Не ожидал, что развернется такая дискуссия)

Вам не особо поможет JForm ибо она заточена под работу с одной записью!
Т.е. вы предлагаете полностью отказаться от JForm и собирать форму, грубо говоря, в HTML?
Правильно ли я понимаю, что без JForm, то станет невозможно работать через JControllerForm и JModelForm/JModelAdmin? До этого я использовал именно через них.

+ Судя по вашему функционалу вы уверенны что вам нужно создавать пользователей? Пользователи будут заходить в какие то разделы под своим логином и паролем, и после что то  редактировать/изменять/создавать? Если нет то вам не нужно все это делать! Ибо в той форме что вы показали нет ввода логина для юзера или пароля!

Совершенно верно: пользователи сначала проходят авторизацию и получают доступ к форме. Позже они могу внести в эту форму изменения.

Это даже не совет, это мое видение организации. Я бы сделал на манер журнала с листами. Пусть журнал - сама форма, страницы - поля формы. Работа формы обслуживается аяксом. В приведенном вами примере три группы, но их может быть больше. А сколько участников? Человек 20, 40? Поэтому я бы сделал одну форму и одну доп. таблицу в базе. Смотрите, как работает: вы открываете страницу, у вас только одна форма. Начинаете формировать группу, выбираете через select "лидеры", "сопровождающие", "участники" и т.д., эти данные могут быть заранее заданы в админке. Далее заполняете стандартные для всех поля, например ФИО, можете добавить доп. поля (пол, наличие собаки), и нажимаете добавить. Происходит аякс-запрос. Данные уходят в таблицу временных данных в базу, форма обновляется. Вы видите некую информацию, например "Участники: 1 чел", и чистые поля формы. Добавляете таким же образом следующего. Как только будет сформирована группа, нажимаете "Зарегистрировать" к примеру. И данные из временной таблицы переносятся в таблицу групп. Можно писать и не во временную, а сразу в основную, добавив, к примеру, какой то идентификатор, что бы знать, что группа не сформирована/сформирована. Как то так... По аналогии с журналом вы заполняете его страницы, а потом ложите журнал в шкаф.

По поводу организации таблиц в БД: вам потребуется таблица групп, таблица ролей ("лидеры", "сопровождающие", "участники"), таблица участников. Участники имеют роли и принадлежат группе. Группа имеет название или просто номер (тот же id).

Приведенный вами пример хорош, но когда вы его начнете заполнять, получится огромная форма с большим объемом отправляемых данных. А если ошибка? Забили человек 40, а потом сбой, и сидите забиваете по новому...

ИМХО  Roll Eyes

Спасибо за развернутый ответ! Возможно мой пример не самый лучший с точки зрения юзабилити и проверки ошибок, но сроки сжатые, поэтому сейчас разбираться еще и с AJAX в Joomla не очень хочется...
Сейчас нужно как можно быстрее как-то начать отправлять данные, иметь возможность загрузить их потом обратно в эту же форму. При этом я пытаюсь разобраться как писать такой компонент максимально используя готовые классы/функции Joomla, понять, как такое вообще пишется.
Записан
SeBun
Практически профи
*******

Репутация: +134/-3
Offline Offline

Пол: Мужской
Сообщений: 2271



« Ответ #12 : 07.05.2015, 17:47:31 »

Сейчас нужно как можно быстрее как-то начать отправлять данные, иметь возможность загрузить их потом обратно в эту же форму. При этом я пытаюсь разобраться как писать такой компонент максимально используя готовые классы/функции Joomla, понять, как такое вообще пишется.
Тогда делайте без аякса. Маленькая формочка на одного человека, после того, как соберется вся группа, зарегистрируете группу... Я думаю другого решения и не будет. И в случае сбоя не придется кучу народа переписывать.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #13 : 07.05.2015, 17:51:46 »

Всем спасибо за ответы! Не ожидал, что развернется такая дискуссия)
Т.е. вы предлагаете полностью отказаться от JForm и собирать форму, грубо говоря, в HTML?
Правильно ли я понимаю, что без JForm, то станет невозможно работать через JControllerForm и JModelForm/JModelAdmin? До этого я использовал именно через них.
Ну если у вас будет форма в HTML то зачем вам нужен будет  JModelForm/JModelAdmin?) Но вы можете комбинировать все это ) Часть данных (которые одиночные поля) передавать через JForm, а остальные (динамичные поля) в модели/контроллере обработать и сохранить как нужно!


Совершенно верно: пользователи сначала проходят авторизацию и получают доступ к форме. Позже они могу внести в эту форму изменения.
Ну тогда все очень просто, создать динамичные поля(Которых вы сможете добавлять неограниченное количество), и в модели/контроллере отлавливать эти поля, обработать и посоздавать юзеров с рандомными именами и паролями!
Записан
asuran
Новичок
*

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 5


« Ответ #14 : 07.05.2015, 18:04:51 »

Ну если у вас будет форма в HTML то зачем вам нужен будет  JModelForm/JModelAdmin?) Но вы можете комбинировать все это ) Часть данных (которые одиночные поля) передавать через JForm, а остальные (динамичные поля) в модели/контроллере обработать и сохранить как нужно!

В моей примере что вы называете одиночными полями, а что динамичными? А JModelAdmin мне нужен хотя бы для того, чтобы потом выводить эту форму в админке компонента))

Ну тогда все очень просто, создать динамичные поля(Которых вы сможете добавлять неограниченное количество), и в модели/контроллере отлавливать эти поля, обработать и посоздавать юзеров с рандомными именами и паролями!

Совершенно не гарантируется, что пользователи, указанные в полях, были или будут зарегистрированы на сайте. Регистрация требуется только тому, кто будет эту форму заполнять, грубо говоря, "самому главному лидеру делегации". Возможно понадобится потом сделать какую-то связь с реальными пользователями, но это скорее задача на будущее)

Т.е. в итоге надо делать пользовательскую часть через JControllerLegacy, JModelLegacy и в них полностью самому прописывать методы сохранения и загрузки формы, правильно понял?
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet