Вы здесь

Webform vs Entityform. Что выбрать?

3

Приветствую!
Задался недавно вопросом из сабжа.

Поясню: на одном проекте нужно было сделать форму, в которой (в том числе) была бы возможность прикрепления множественных файлов (картинки, документы, etc.) с последующей отправкой всего этого на почту админу (аттачи — в виде ссылок на файлы).

Решил сделать, логично, через Webform. Для мультиаплоада нашёл модули: Webform Multiple File Upload и Webform Multiple File. Да, подгружать много файлов можно, но только по одному.

То есть: нажал «Открыть файл», выбрал один файл, загрузил. И так до бесконечности. Как сделать так, чтобы можно было выделить сразу несколько файлов и загрузить их сразу все — не нашёл такой настройки в этих модулях.

С другой стороны, вспомнил, что есть подобное решение для обычных нод — модуль Multiupload Filefield Widget, который, естественно, не работает для Webform (нельзя выбрать этот тип поля при создании формы). Погуглил и нашёл модуль Entityform, который как раз позволяет получить всю пользу от Multiupload Filefield Widget и делать любые формы для отправки на почту.

В свою очередь, у Webform есть отличный модуль Webform Ajax, который позволяет отправлять сообщение без перезагрузки страницы. Такой же модуль есть и для Entityform — Ajax form entity, но судя по коммитам на d.org, модуль забросили — всё держится на патчах от сообщества (например, решение по ошибке Undefined index: #entityform in ajax_form_entity_entity_view_alter() было оставлено два года назад и до сих пор не перенесено в продакшен версию модуля).

Отсюда вопросы:
1. Насколько актуально использование Webform, если всё тоже самое (и даже больше) можно сделать с Entityform?
2. Что используете вы в своих проектах?

Версия Drupal: 
7.x
Категория: 
File API
Связанные проекты: 
WebformEntityform
Вопрос задан 26.08.2015 - 20:50

Мне в entityForm не хватало только функционала вебформы по созданию полей для админа.
Чтобы в итоге форма имела поле "Пример документа" и рядом поле "закачать документ"...

Комментарий оставлен 28.05.2016 - 14:08

Ответы

4

Использую Entityform уже года 2. Недавно видел новые вебформы, приятно, но не заманили.

Вообще вы должны выбрать модуль по задачам и вашим способностям. Entityform требует больше знаний и подготовки от разработчика, так как любая проблема - код

Плюсы и минусы Entityform:

  • +Гибкий и мощный.
  • +Работает со всеми полями. Поля в Entityform - это обычные поля как у типа содержимого.
  • +Не требует для своей работы создания типа содержимого (меня этот фактор заставил перейти на entityform).
  • +Отличная интеграция с Rules.
  • +Данные отправленные с формы - сущности, легко выводить вьюсами, грузить, менять, делать что угодно через стандартный Drupal API.
  • -При большом кол-ве полей в форме - лучше не использовать.
  • -Требует большей настройки. Отправка результатов делается в ручную через рулсы либо включением сабмодуля entityform, который потянет свои зависимости (не тестил его работу).
  • -Решений для него значительно меньше чем по webform.

Плюсы и минусы Webform:

  • +Включил и работай.
  • +Несколько типов полей для вебформ из коробки. Они легче в плане нагрузки, они не создают для себя таблиц, ибо это не Field API.
  • +Отлично годится для форм с 100+ полями, ибо поля не используют Field API и не плодят таблички в базе, тем самым снижая нагрузку.
  • +Отправка настраивается легко из самой формы.
  • -Требует для своей работы создание типа содержимого.
  • -Предоставляемые им поля ограничены, например, установив кастомный тип поля (допустим geofield) не появится, и следовательно если потребуется необходимость в подобном поле, вам придется написать приличное кол-во кода (не знаю можно ли там вообще интегрировать безболезненно, но это явно будет пляска с бубном).
  • -Данные форм хранит по своему, не используя Drupal API, доставать и работать с ними придется по своему.
  • -Так как отправки не сущности, интеграция с большинством модулей просто отсутствует.

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

Что касается Entityform и Ajax, тут всё куда похуже чем у вебформ, но реализуемо. Я в свое время задолбался этим в итоге написал свой кастомный модуль для аяксофикации. Включаете, в настройках выбираете какие ентитиформы сделать аяксовыми и пользуйтесь. Также там еще небольшой функционал для аякс подгрузки форм и их альтера в момент аякс подгрузки (чтобы впихнуть туда нужные данные). Не идеальный, но работает.

Ответ дан 28.08.2015 - 20:12
Аватар пользователя Niklan
Niklan
445
2

Года как 2 гоняю на Entityform.
А вот так делаю Entityform в ajax (ajax callback path):

function _entityform_ajax_callback($form, &$form_state) {
  module_load_include('inc', 'entityform', 'entityform.admin');
  list($form, $form_state) = ajax_get_form();
  drupal_process_form($form['#form_id'], $form, $form_state);

  $commands = array();
  $commands[] = ajax_command_html('#IDFORMHERE', theme('status_messages'));

  return array('#type' => 'ajax', '#commands' => $commands);
}
Ответ дан 26.08.2015 - 21:52
Аватар пользователя SAM
SAM
212

То, что надо, особенно когда требуется прикрутить особый ajax функционал к форме. Частый пример - не выводить форму, если все прошло удачно. Добавляем проверку на form_get_errors().

Комментарий оставлен 26.08.2015 - 22:03
1

Webform удобен для одной-двух среднестатистических форм - там "всё в коробке"
Быстро мышкой настраивается

Entityform как бэ полноценный модуль, в отличие от Webform
но блиииннн замучаешсо даже штатные плюшки прикручивать, если знаний нет
чегото-там альтерить надо и т.д. ))

Ответ дан 26.08.2015 - 22:07
Аватар пользователя Pavel
Pavel
-47
1

Использовал Webform, потом перешёл на Entityform, теперь снова использую Webform.

В Entityform не нравится, что из за пятка форм с десятью полями в бд мёртвым грузом лежит сотня таблиц field_data и field_revision. Ну и само по себе считать отправления юзеров "контентом" как то не очень правильно.

Ответ дан 27.08.2015 - 01:16
Аватар пользователя xandeadx
xandeadx
1542
1

entityform:
+ использование материальных типов полей
+ интеграция со многими модулями must be
+ большая скорость создания, изменения форм

Ответ дан 27.08.2015 - 15:07
0

Пробуйте с Entityform. Есть модуль Ajax Submit for Any Form. Должен работать с любой формой. Наверняка много подобных, ведь ajax для форм в друпале работает одинаково.
Вебформы не используют встроенный механизм прикрепления полей к сущности, поэтому нету стандартных настроек размножаемого поля.

P.S. Сейчас SAM придет - ругаться будет, что вебформы сравнили с Entity Form.

Ответ дан 26.08.2015 - 21:42

Entityform по сути - это вывернутая на изнанку нода. Так что всё нативно, и для друпала она как родная. По этому больше возможности интеграций без плясок с бубном.

Комментарий оставлен 26.08.2015 - 21:54