Estoy escribiendo un módulo personalizado, lo que he hecho antes, pero esta es la primera vez que intento crear un tipo de contenido con campos. Implementé hook_node_info y el Tipo de contenido se muestra en la lista de Tipos de contenido en el menú desplegable de admin_menu, sin embargo, cuando busco admin/structure/types
no aparece en la lista.
Implementé hook_install y agarré un código que encontré en otra pregunta SO. Tengo el código imprime información de depuración en mi registro de errores y parece que todo funciona, pero cuando busco el Tipo de contenido de estructura no muestra el campo que agregué.
Aquí hay ganchos:
function mymod_node_info() {
return array(
'mymod_content' => array(
'name' => t('My Mod'),
'base' => 'mymod_content',
'description' => t('A Description'),
)
);
}
function mymod_install() {
error_log('mymod_install');
$types = node_type_get_types();
if ( ! field_info_field('field_mymod_myfile') ) {
$field = array(
'field_name' => 'field_mymod_myfile',
'type' => 'file',
);
$created_field = field_create_field($field);
error_log('---- field_create_field -----');
error_log(var_export($created_field, true));
}
$instance = array(
'field_name' => 'field_mymod_myfile',
'entity_type' => 'mymod_content',
'bundle' => 'mymod_content',
'required' => TRUE,
);
$created_instance = field_create_instance($instance);
error_log('---- field_create_instance -----');
error_log(var_export($created_instance, true));
}
Puedo ver una tabla llamada field_data_field_mymod_myfile
en la base de datos, así que sé que la primera parte funcionó. Sin embargo, la tabla está vacía.
El registro de errores muestra que el field_create_instance()
método devolvió esto:
array (
'field_name' => 'field_mymod_myfile',
'entity_type' => 'mymod_content',
'bundle' => 'mymod_content',
'required' => true,
'field_id' => '5',
)
¿Por qué mi campo no aparece en este tipo de contenido?
fuente
Respuestas:
Esto no es tanto una respuesta como una expansión de la respuesta anterior.
Encontré estos dos enlaces muy útiles para descubrir qué necesita el sistema para agregar campos personalizados a su tipo de nodo de módulo personalizado.
Lo mejor: http://www.sitepoint.com/creating-a-new-drupal-node-type/
Buena información adicional: http://public-action.org/content/drupal-7-field-api-drupal-7-adding-custom-content-type-custom-fields-field-api
El problema que tuve fue que estos (y todos los demás ejemplos que puedo encontrar en línea) son ejemplos muy específicos sin suficiente documentación para ayudarme a encontrar una solución a mi propio caso de uso.
Lo que ayudó fue el comentario de Tenken al OP sobre el uso del módulo Características para obtener los arreglos para los campos personalizados.
Así que descargué el módulo Características y lo habilité: https://drupal.org/project/features
Luego creé los campos en mi tipo de contenido, usando la interfaz de administración en Drupal como lo haría normalmente, que quería que creara el módulo. Luego busqué Estructura> Características> Crear característica y puse un nombre falso (usé "prueba") para la característica y luego en el área de componentes, haga clic en "Instancias de campo" y marque las casillas de los campos personalizados. Todos los campos se denominan algo como nodo- [nombre de máquina de tipo de nodo] - [nombre de campo], así que en mi caso, ya que quería un campo de imagen, era node-novel_section-field_image.
Después de seleccionar los campos personalizados para mi tipo de nodo, simplemente hice clic en "Descargar característica" y guardé el archivo .tar en mi escritorio, lo abrí, abrí la carpeta "prueba" y luego miré test.features.field_base.inc y probé. features.field_instance.inc para obtener las matrices que necesitaba para mis campos.
Luego utilicé la estructura descrita en ese primer enlace que publiqué y después funcionó perfectamente. Para mi.
No pude encontrar ninguna documentación sobre las estructuras de matriz necesarias para cosas como campos de imagen y campos de referencia de taxonomía y parecía que todos los demás tutoriales y solicitudes de ayuda en línea se centran en cosas específicas como campos de texto.
Espero que cualquiera que tenga el mismo problema que yo haya tenido vea esto y pueda hacer que su configuración funcione utilizando estos ejemplos y el módulo de Características como lo hice yo.
Gracias a Tenken por señalar esta funcionalidad del módulo Características, nunca la había usado y no sabía que lo haría.
fuente
Este código que se creará nuevo tipo de contenido que debe agregar al archivo .install.
Agregando hook_install ():
Debe hacer un mensaje de drupal y escribir este evento en el registro:
Proporcione hook_uninstall () para eliminar su tipo de contenido :
fuente
admin/structure/types
Esta publicación está un poco desactualizada, pero si ayuda, he encontrado que este artículo es muy claro. Le muestra cómo crear un nuevo tipo de contenido paso a paso.
Enlace al tutorial
fuente