¿Cómo puedo abordar la implementación de lo siguiente en Drupal 7?
Lo que necesito hacer es crear un módulo que defina una nueva entidad de campo, llamada 'Compañía'. Tengo una lista de, digamos, 20 campos que debe completar cada instancia de la Compañía. Estas preguntas están predefinidas y algunas pueden contener validación personalizada.
En este momento, estoy en el punto en que puedo agregar nuevos campos a la entidad de la Compañía. Esto funciona bien en este momento. Mi problema es que necesito que todos estos campos estén allí tan pronto como se instale el módulo, por lo que agregarlos a través de la interfaz no es una opción.
Me preguntaba cómo puedo abordar esto? Supongo que se reduce a poder hacer lo que se puede hacer usando la interfaz de usuario 'Administrar campos' mediante programación.
node_type_set_defaults()
ynode_type_save()
, por supuesto, tambiénhook_install()
.Respuestas:
Use field_create_field () para crear el campo en sí mismo y field_create_instance () para tener una instancia para el paquete de entidad dado.
Al crear campos como parte de un módulo personalizado, es posible que desee o no eliminar el campo cuando se desinstala el módulo. Para hacerlo, puede usar field_delete_field () si desea eliminar el campo y todas las instancias de campo, o si desea eliminar instancias específicas, puede usar field_delete_instance () .
fuente
Ejemplo sobre cómo agregar campos mediante programación al perfil de usuario y cómo aprovecharlos, o no, en el formulario de registro de usuario.
fuente
Si necesita crear / eliminar rápidamente campos de un tipo de contenido o entidad existente, sin usar la interfaz de usuario ni la programación, puede usar estos comandos Drush poco conocidos:
Por ejemplo: cree dos nuevos campos para el artículo:
Otros comandos:
fuente
Como señalaron otros, puede usar las funciones de API de campo desde la implementación hook_install () de su módulo para crear campos y sus instancias para su tipo de contenido. Consulte node_example_install (), por ejemplo, el uso de la función.
Otra solución es usar el módulo Características . Las características pueden exportar varios componentes del sitio para codificar en un módulo. Los tipos de contenido y los campos se encuentran entre estos exportables. Puede generar un módulo de Características y anular su código existente, las Características harán todo lo posible para evitar romper su código. O puede generar un módulo ficticio y copiarlo. Pegar el código relacionado con los campos en su módulo. Esto requiere una comprensión básica del funcionamiento de las características.
fuente
En su archivo de instalación, deberá definir tanto 'hook_install' como 'hook_uninstall'. Ejemplo incluido, pero lea todo sobre las claves adicionales en las referencias de la API (el código no se ha probado, por lo que podría haber errores tipográficos allí).
En el
hook_install
puede agregar los campos usando:field_create_field , esta función crea una plantilla para un campo.
field_create_instance Se puede usar después de crear el campo para agregarlo a content_types (también conocido como paquetes).
NOTA Los nombres de varios tipos de campo se pueden encontrar en los módulos que los generan (es la clave del elemento de matriz en su hook_field_info). Puede encontrar todos los módulos de implementación de campo principal en la carpeta modules / field / modules.
La configuración también se puede derivar de los módulos de campo. La configuración que establezca en
field_create_field
el sitio es amplia. Los que establecesfield_instance_create
son los específicos de node_typeEn el
hook_uninstall
field_delete_instance y field_delete_field se pueden usar para eliminarlos nuevamente,
field_delete_field
se llama automáticamente si elimina la última instancia (normalmente).fuente
Recientemente tuve una necesidad similar de un proyecto, así es como lo aborde, espero que ayude a alguien.
Básicamente, creará los campos que necesita utilizando la interfaz de usuario de campos, los exportará a código y luego los incluirá en su módulo personalizado. Necesitará el módulo Devel habilitado.
También creé un Gist con esta información.
Aquí vamos....
Establezca las primeras 3 variables y luego haga clic en ejecutar
Obtendrá 2 matrices, algo así, con suerte con todas las propiedades completadas.
Ahora agregue el siguiente código a su archivo .install. Reemplace todas las instancias de mymodule con el nombre real del módulo. Pegue el código de la salida de desarrollo en _mymodule_field_data y _mymodule_instance_data, como se indica en las funciones respectivas a continuación. Puede hacer esto para todos los campos que desee, simplemente coloque todas las matrices $ fields en la función _mymodule_field_data y todas las instancias $ en la función _mymodule_instance_data.
fuente
También podría considerar usar el módulo Características para crear los campos en el momento de la instalación.
Como las características generan código para los campos, una opción es usar el módulo de características para generar el código en un módulo ficticio y luego copiar y pegar en el archivo .install de su módulo.
El beneficio es que el módulo no depende del módulo Características en su entorno de destino.
fuente
Puede usar el código de módulo de empresa personalizado que se proporciona a continuación para crear programáticamente un tipo de contenido con sus diversos campos.
Puede agregar este código en un archivo .install de su módulo personalizado. Agregará mediante programación un tipo de contenido llamado "empresa" y sus diversos tipos de campos (texto, numérico, fecha (nota: necesitará instalar el módulo de fecha ya que el campo de fecha no se proporciona de forma predeterminada), imagen, lista).
También he agregado el código de desinstalación que eliminará el tipo de contenido "empresa" junto con todos sus campos y datos cuando desinstale su módulo 'customcompanymodule'.
Puede modificar / eliminar estos campos según sus necesidades:
fuente