Храните веб-формы Drupal 7 в коде

8

Мне интересно, есть ли какое-либо решение для хранения веб-форм в коде. Так что вы можете легко скопировать их на другие сайты и связать их с вашими собственными модулями. Я смотрю на что-то похожее на API представлений.

Если это не доступно, сколько людей заинтересованы в такой функциональности? Я мог бы разработать модуль, который мог бы обрабатывать хранение веб-форм в коде. И есть ли у вас какие-либо опасения по поводу создания такого модуля?

Спасибо яап

Яап Янсма
источник
Вы имеете в виду формы, созданные с помощью модуля Webform?
Молот
1
Да, я имею в виду формы, созданные с помощью модуля webform
Jaap Jansma
1
На самом деле это очень просто, просто взгляните на то, как Webform Share делает это. ( webform_share_export()и webform_share_node_insert()есть денежные функции). Не могу сказать, что я одобряю использование eval(), но вы могли бы так же легко преобразовать это, чтобы использовать вместо этого объект JSON / сериализованную строку. Единственная (небольшая) трудность, которую вам нужно преодолеть, заключается в том, как / когда ваша веб-форма применяется к новому узлу, причем, конечно же, требуется узел, чтобы присоединить веб-форму.
Клайв

Ответы:

1

Не совсем, и в этом нет необходимости

  1. Если вам нужна форма, доступная из кода, формы API форм не так сложно написать с нуля. В отличие от представлений, вы можете использовать только те веб-формы, которые имеют идентификатор узла, и это будет меняться от сайта к сайту, поэтому формы веб-форм, связанные с модулем, не будут удобными.

  2. Если вы хотите связать формы с вашими модулями и по какой-либо причине вы не можете использовать API форм, интеграция функций UUID и общий доступ к веб-формам предоставляют способы сделать это. Это не будет кодекс в чистом смысле, но он должен работать.

  3. Это относительно легко использовать hook_form_alterдля получения представления API формы конкретной веб-формы. Конечно, вы не сможете изменить это легко в будущем, но опять же, вопреки взглядам, это хорошо. Модуль не повредит, если некоторые данные не отображаются. Данные, не предоставленные или предоставленные таким образом, которого модуль не ожидает, могут привести к поломке. Поэтому, если модулю нужна форма, его не должно быть легко редактировать . В любом случае редактирование формы потребует внесения изменений в код модуля, поэтому код API формы упрощает, а не усложняет в долгосрочной перспективе, в таких ситуациях.

МОЛОТ
источник
1
Хотя это хороший ответ для альтернативы, я думаю, что желание сохранить веб-формы в коде является довольно разумным требованием (я не согласен с тем, что в этом нет необходимости или что это на самом деле невозможно). Например, если вы хотите предоставить базовую контактную форму с модулем, который затем могут быть расширены пользователями через пользовательский интерфейс, веб-форма была бы идеальной. Создание такого пользовательского интерфейса было бы настоящей болью. Поскольку webformобъект (или массив?) В любом случае находится на объекте узла, он может быть легко сериализован и повторно применен
Клайв
@Clive Но для простого контакта, зачем кому-то нужен настоящий код? Почему недостаточно экспортируемого узла (с помощью интеграции функций UUID вы можете экспортировать узел в модуль)?
Молот
Этот модуль также синхронизирует объект Webform?
Клайв
@ Clive Насколько я помню, с некоторыми проблемами, но да. О, и если пользовательскому коду нужны данные из формы, не станет ли это опасным для веб-формы? Я не знаю способа сделать поля устойчивыми к удалению в Webform (но я признаю, что не выглядел так уж сложно).
Молот
1
Действительно, есть даже патч для веб-формы, чтобы сделать интеграцию работающей. Я забираю это назад :)
Клайв