modules distribucion create chaos drupal drupal-modules drupal-7

distribucion - drupal core drupal 8



Forma correcta de usar Drupal 7 Entities y Field API (4)

Aquí hay un buen repo para comenzar: entidad de legisladores

Intento usar las entidades de Drupal 7 y la API de campo para construir correctamente un nuevo módulo. Lo que no he podido comprender de la documentación es la forma correcta de usar la nueva API para crear un ''tipo de contenido'' (no un tipo de nodo) con una serie de campos configurados, como Body.

Estoy tratando de configurar la entidad usando hook_entity_info, entonces creo que necesito agregar el campo body usando field_create_instance, pero parece que no puedo hacer que funcione.

En mycontenttype.module:

/** * Implements hook_entity_info(). */ function mycontenttype_entity_info() { $return = array( ''mycontenttype'' => array( ''label'' => t(''My Content Type''), ''controller class'' => ''MyContentTypeEntityController'', ''base table'' => ''content_type'', ''uri callback'' => ''content_type_uri'', ''entity keys'' => array( ''id'' => ''cid'', ''label'' => ''title'', ), ''bundles'' => array( ''mycontenttype'' => array( ''label'' => ''My Content Type'', ''admin'' => array( ''path'' => ''admin/contenttype'', ''access arguments'' => array(''administer contenttype''), ), ), ), ''fieldable'' => true, ), ); return $return; } /** * Implements hook_field_extra_fields(). */ function mycontenttype_field_extra_fields() { $return[''mycontenttype''][''mycontenttype''] = array( ''form'' => array( ''body'' => array( ''label'' => ''Body'', ''description'' => t(''Body content''), ''weight'' => 0, ), ), ); return $return; }

Entonces, ¿esto va en el archivo .install?

function mycontenttype_install() { $field = array( ''field_name'' => ''body'', ''type'' => ''text_with_summary'', ''entity_types'' => array(''survey''), ''translatable'' => TRUE, ); field_create_field($field); $instance = array( ''entity_type'' => ''mycontenttype'', ''field_name'' => ''body'', ''bundle'' => ''mycontenttype'', ''label'' => ''Body'', ''widget_type'' => ''text_textarea_with_summary'', ''settings'' => array(''display_summary'' => TRUE), ''display'' => array( ''default'' => array( ''label'' => ''hidden'', ''type'' => ''text_default'', ), ''teaser'' => array( ''label'' => ''hidden'', ''type'' => ''text_summary_or_trimmed'', ), ), ); field_create_instance($instance); }


Cada campo tiene una propiedad de matriz, entity_types, que limita las entidades a las que se puede adjuntar el campo. La mejor solución de Drupal que puedo encontrar, hook_field_create_field, puede alterar los campos a medida que se crean, pero eso no es bueno para el campo de cuerpo que se crea en la instalación. Entonces mi solución es solo editar la base de datos directamente en mi hook_install

$data_col = db_query("SELECT data from field_config where field_name = ''body''")->fetchAssoc(); $data = unserialize($data_col[''data'']); $data[''entity_types''][] = ''MY_ENTITY_TYPE''; db_update(''field_config'') ->fields(array(''data'' => array(''data'' => serialize($data)))) ->condition(''field_name'', ''body'') ->execute();


Creo que su problema es que si el módulo de nodo está instalado, ya hay un campo llamado ''cuerpo''. Debería cambiar el nombre de su campo por algo como ''mycontenttype_body'' (comment.module usa comment_body), o reutilizar el campo ''body'' y omitir la adición de la parte de campo y saltar a agregar la instancia de este. El primero se recomienda sobre el segundo.


acaba de comenzar por el mismo camino aquí es un video de fago