3. ● Somos expertos en Drupal
● Somos Siddharta, Oriol, Robert, David,
Patricia, Ignacio, Javier y Luis.
● Trabajamos para Estrella Damm, Dexeus,
Médicos Sin Fronteras, Infojobs,
Greenpeace, Chupa Chups, Ayuntamiento
de Barcelona, Torres, la CUP…
● Estamos en Barcelona
● Puedes contactar con nosotros en
hola@ateneatech.com
7. ● Drupal 3 y anteriores: solo nodos
● Drupal 4: flexinode
● Drupal 5: nodos con campos con Content
Construction Kit
● Drupal 6: “nodificamos” todo con módulos
contrib y añadimos campos con Content
Construction Kit
● Drupal 7: entidades limitadas en core
● Drupal 8: ¡entidades completas en core!
12. A thingy …
Una “unidad” de información estructurada:
● Un artículo o entrada en un blog
● Un usuario
● Un término de un vocabulario
● Otra estructura de datos que creemos
13. … loadable …
Dispone de un conjunto de funciones para
gestionar la información:
● Funciones comunes para crear, leer,
actualizar y borrar entidades
● Propiedades comunes
● Integración con Views y otros servicios
14. … and optionally fieldable
Cada tipo de entidad tiene un conjunto de
propiedades.
Cada tipo de entidad puede tener “subtipos”
llamados bundles. Podemos adjuntar un
conjunto de campos diferenciados a cada uno.
15. En Drupal 8:
● “contenido” es un tipo de entidad
● “artículo” es un tipo de contenido (un bundle)
● “Integración Continua y trabajo en equipo en
Pantheon” es una entidad
17. Contenidos:
● Para contenido!
● Cada entidad de este tipo:
○ tiene una página node/ID
○ revisiones
Usuarios:
● Gestión de cuentas
● Cada entidad tiene una página user/ID
Bloques personalizados:
● Para contenido secundario
18. Términos:
● Para organizar otras entidades
● Cada entidad de este tipo tiene una página
taxonomy/term/ID
Comentarios:
● Para adjuntar información estructurada a
otra entidad en el tiempo
Archivos:
● Guarda metainformación sobre los archivos
34. Definen sus campos base:
● Implementan la función baseFieldDefinitions
● Usan BaseFieldDefinition::create para añadir
campos:
○ Tipo de campo
○ Propiedades
○ Formateadores
35. class Comment extends ContentEntityBase implements
CommentInterface {
public static function baseFieldDefinitions
(EntityTypeInterface $entity_type) {
/** @var DrupalCoreFieldBaseFieldDefinition[] $fields
*/
$fields = parent::baseFieldDefinitions($entity_type);
$fields['subject'] = BaseFieldDefinition::create
('string')
->setLabel(t('Subject'))
->setTranslatable(TRUE)
->setSetting('max_length', 64)
->setDisplayOptions('form', array(
'type' => 'string_textfield',
// Default comment body field has weight 20.
'weight' => 10,
))
->setDisplayConfigurable('form', TRUE);
return $fields;
}
}
39. Storage:
● Se utiliza para gestionar la persistencia de la
entidad.
● Implementa EntityStorageInterface
● Implementaciones base:
○ SqlContentEntityStorage
○ ContentEntityNullStorage
40. class CommentStorage extends SqlContentEntityStorage implements
CommentStorageInterface {
...
public function loadThread(...) {
...
}
...
}
41. Entity keys:
● Definen las claves que se usarán para cargar
las entidades
● ContentEntityBase::baseFieldDefinitions crea
campos para ellas automáticamente
47. ● Cuando necesitas un tipo de entidad
específico: propiedades, métodos, acceso,
almacenamiento…
● Cuando no quieres usar un tipo existente:
puedes clonar uno y los demás módulos no
sabrán de él
● Cuando necesitas control total sobre él: los
campos base no pueden modificarse
usando la interfaz
● Cuando el modelo de datos es muy
complicado: como pasa con Commerce o
Paragraphs