4. Somos expertos en Drupal desde 2007
Somos Siddharta, Oriol, Robert, David, Patricia, Xavi, Rubén y Luis.
Trabajamos para La Vanguardia, Thermomix, Ayuntamiento de Barcelona,
Bodegas Torres, Clínica Dexeus, Amnistía Internacional, Médicos Sin
Fronteras, Infojobs, Estrella Damm, Greenpeace, Chupa Chups, la CUP…
Estamos en Barcelona
Puedes contactar con nosotros en hola@ateneatech.com
9. 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 contribuidos y añadimos campos con
Content Construction Kit
Drupal 7: entidades limitadas en core
Drupal 8: ¡entidades completas en core!
14. A thingy …
Una unidad de información estructurada:
Un contenido
Un usuario
Un término de un vocabulario
Otra estructura de datos que creemos
15. … 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
16. … 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.
18. “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
20. Contenido
Cada entidad de este tipo tiene:
ID y UUID
Idioma,
Título
Tipo
Autor
Estado de publicación, promovido a la página de inicio y al principio de las listas
Fecha de creación y del último cambio
21. Usuario
Cada entidad de este tipo tiene:
ID y UUID
Idioma
Nombre
Clave
Correo electrónico
Idioma predefinido y idioma predefinido de administración
Zona horaria
45. Definen sus campos base
Implementan la función baseFieldDefinitions
Usan BaseFieldDefinition::create para añadir campos:
Tipo de campo
Propiedades
Formateadores
50. Handler de ejemplo: Storage
Se utiliza para gestionar la persistencia de la entidad.
Implementa EntityStorageInterface
Implementaciones base:
SqlContentEntityStorage
ContentEntityNullStorage
51. class CommentStorage extends SqlContentEntityStorage implements
CommentStorageInterface {
...
public function loadThread(...) {
...
}
...
}
52. Entity keys
Definen las claves que se usarán para cargar las entidades
ContentEntityBase::baseFieldDefinitions crea campos para ellas automáticamente
56. Routing
Se debe implementar el routing de los enlaces
Dos formas:
Es posible definir las rutas en el archivo *.routing.yml
Es mejor usar un handler route_provider como DefaultHtmlRouteProvider
58. 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,
Flag o Paragraphs
60. Entity API
Funciones para alterar:
Campos base, de bundle y extras
Control de acceso
CRUD
Visualización
Formularios
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21enti