Как я могу подойти к реализации следующего в Drupal 7?
То, что мне нужно сделать, это создать модуль, который определяет новую полевую сущность, называемую «Компания». У меня есть список, скажем, 20 полей, которые должны быть заполнены каждым экземпляром компании. Эти вопросы предварительно определены, а некоторые могут содержать пользовательские проверки.
В настоящий момент я могу добавить новые поля в сущность Company. Это отлично работает в данный момент. Моя проблема в том, что мне нужно, чтобы все эти поля были там, как только модуль будет установлен, поэтому добавить их через интерфейс не вариант.
Мне было интересно, как я могу подойти к этому? Я предполагаю, что это сводится к возможности делать то, что можно сделать с помощью пользовательского интерфейса «Управление полями» программно.
node_type_set_defaults()
иnode_type_save()
, а также, конечно,hook_install()
.Ответы:
Используйте field_create_field (), чтобы создать само поле, и field_create_instance (), чтобы иметь экземпляр для данного набора сущностей.
При создании полей как части пользовательского модуля вы можете или не хотите удалять поле при удалении модуля. Для этого вы можете использовать field_delete_field (), если вы хотите удалить поле и весь экземпляр поля, или если вы хотите удалить конкретные экземпляры, вы можете использовать field_delete_instance () .
источник
Пример того, как программно добавлять поля в профиль пользователя и как использовать их или нет в форме регистрации пользователя.
источник
Если вам нужно быстро создать / удалить поля из существующего типа контента или объекта, не используя ни интерфейс, ни программирование, вы можете использовать эти малоизвестные команды Drush:
Например: создайте два новых поля для статьи:
Другие команды:
источник
Как указывалось другими, вы можете использовать функции Field API из реализации hook_install () вашего модуля для создания полей и их экземпляров для вашего типа контента. См. Node_example_install () для примера использования функции.
Другим решением является использование модуля функций . Функции могут экспортировать различные компоненты сайта в код в модуле. Типы содержимого и поля относятся к числу этих экспортируемых. Вы можете сгенерировать модуль Feature и переопределить существующий код, который будет делать все возможное, чтобы не нарушить ваш код. Или вы можете сгенерировать фиктивный модуль и скопировать. / Вставить код, связанный с полями, в свой модуль. Это требует базового понимания работы функций.
источник
В вашем установочном файле вам нужно определить и «hook_install», и «hook_uninstall». Пример включен, но читайте все о дополнительных ключах в ссылках API (код не проверен, поэтому там могут быть опечатки).
В
hook_install
вы можете добавить поля, используя:field_create_field , эта функция создает шаблон для поля.
field_create_instance Может использоваться после создания поля для добавления его в content_types (также известный как связки).
ПРИМЕЧАНИЕ. Имена различных типов полей можно найти в генерирующих их модулях (это ключ элемента массива в их hook_field_info). Вы можете найти все основные модули реализации полей в папке modules / field / modules.
Настройки также могут быть получены из полевых модулей. Установки, которые вы установили в,
field_create_field
являются общесистемными. Те, которые вы устанавливаете,field_instance_create
являются специфичными для node_typeв
hook_uninstall
field_delete_instance и field_delete_field могут быть использованы для их повторного удаления,
field_delete_field
вызывается автоматически, если вы удаляете последний экземпляр (обычно).источник
У меня недавно была похожая потребность в проекте, вот как я подошел к нему, надеюсь, он кому-нибудь поможет.
По сути, вы создадите необходимые поля с помощью пользовательского интерфейса полей, экспортируете их в код и затем включаете их в свой пользовательский модуль. Вам понадобится модуль Devel.
Я также создал Gist с этой информацией.
Вот так....
Установите первые 3 переменные и затем нажмите «Выполнить»
Вы получите 2 массива, что-то вроде этого, надеюсь, со всеми заполненными свойствами.
Теперь добавьте следующий код в ваш файл .install. Замените все экземпляры модуля на действительное имя модуля. Вставьте код из вывода devel в _mymodule_field_data и _mymodule_instance_data, как указано в соответствующих функциях ниже. Вы можете сделать это для любого количества полей, просто поместив все массивы $ fields в функцию _mymodule_field_data и все экземпляры $ в функцию _mymodule_instance_data.
источник
Вы также можете рассмотреть возможность использования модуля Features для создания полей во время установки.
Поскольку Feature генерирует код для полей, можно просто использовать модуль Feature, чтобы сгенерировать код в фиктивном модуле, а затем скопировать и вставить в файл .install вашего модуля.
Преимущество заключается в том, что модуль не зависит от модуля «Функции» в вашей целевой среде.
источник
Вы можете использовать код модуля customcompany, приведенный ниже, чтобы программно создать тип контента с его различными полями.
Вы можете добавить этот код в файл .install своего пользовательского модуля. Он программно добавит тип контента с названием «company» и различные типы полей (текст, число, дата) (примечание: вам нужно установить модуль Date, так как поле Date по умолчанию не предусмотрено), изображение, список).
Я также добавил код удаления, который удалит тип контента «компания» вместе со всеми его полями и данными, когда вы удалите свой модуль «customcompanymodule».
Вы можете изменить / удалить эти поля в соответствии с вашими потребностями:
источник