Я заинтересован во внедрении формы виджета поля вне контекста формы редактирования всего узла.
В прошлом я отображал полные формы с использованием drupal_get_form, но это не относится к отдельным полевым формам.
Возможно ли отображение рабочей формы виджета поля? Каков будет лучший способ сделать это?
И виджеты полей, и «нормальные» формы кажутся очень похожими, поэтому, если это невозможно, что потребуется для «изменения» формы виджета на нормальную форму?
Этот вопрос, кажется, задает нечто подобное, но я не понимаю ответа. Этот ответ указывает использование hook_field_widget_form_alter ; я не понимаю, как заставить отображаться форму поля, а не как подключить ее после создания.
#access = FALSE
которая казалась хакерской в этом контексте.Я интенсивно использовал функцию, предложенную ttk, но я думаю, что недавнее обновление испортило вещи ...
Вот новая версия предыдущего решения, которая хорошо работает с Drupal 7.22 и ctools 7.x-1.3.
Итак, как и в предыдущем посте, вы вызываете свою пользовательскую функцию следующим образом:
Обратите внимание, что пакет сущностей теперь является параметром. Я сделал это, потому что я также использовал эту функцию для редактирования пользователей. Таким образом, он также может быть использован для термина таксономии или любого другого субъекта.
И
my_field_attach_form
определяется как:Эта функция сэкономила мне много времени, надеюсь, она будет и для вас!
источник
Вот решение с использованием
ctools_field_invoke_field()
метода. В вашей пользовательской функции формы добавьте:где
my_field_attach_form
функция определяется какОбратите внимание, что на вашем сайте должен быть включен ctools. Плохо, что Drupal по умолчанию не имеет такой вспомогательной функции.
источник
Я не смог заставить работать метод ctools и решил сделать это таким образом.
Этот код будет внутри функции формы, поэтому $ form и $ form_state уже будут переданы.
Сначала создайте пустой узел типа, который имеет поле, которое вы хотите визуализировать.
Я продублировал переменные формы, чтобы не загромождать оригинал.
Вытащите поле, которое вы ищете, и добавьте его в форму.
Я использовал этот метод для отображения виджета выбора таксономии, виджета флажков таксономии и виджета Иерархический выбор в пользовательской форме. (Виджет таксономии автозаполнения отображается, но выдает ошибку при отправке)
Наконец рендер и печать
источник
ctools_field_invoke_field()
описанный выше метод работает также.Я создал формы из отдельных полей, используя
это должно вернуть требуемую форму виджета, которую можно использовать в любой форме, например
Чтобы получить значения для параметра 2 выше, используйте:
Для других параметров вы можете проверить ссылку API здесь
Это возвращает форму виджета по умолчанию, определенную в поле типов контента.
Надеюсь, это поможет кому-то :)
источник