Cómo crear campos pseudo en Drupal usando 2 hooks
¿Qué son los campos pseudo?
En Drupal, los campos pseudo son campos que no almacenan datos en la base de datos, sino que generan contenido dinámicamente sobre la marcha. Los campos pseudo permiten a los constructores de sitios y desarrolladores añadir contenido personalizado a las entidades (como nodos, usuarios y términos de taxonomía) sin necesidad de crear un campo separado para ello.
Los campos pseudo se comportan como campos normales en muchos aspectos. Sin embargo, en lugar de almacenar datos en la base de datos, utilizan una función de devolución de llamada para generar su contenido cuando se visualiza la entidad.
¿Cómo crear campos pseudo?
En Drupal 8, 9, 10
Utilizando hook_ENTITY_TYPE_view()
en combinación con hook_entity_extra_field_info()
, puedes definir campos pseudo personalizados y especificar exactamente cómo deben renderizarse cuando se muestra la entidad.
En el siguiente ejemplo, añadiremos un campo pseudo al tipo de entidad párrafo que renderizará un botón para compartir en Google Classroom dondequiera que se utilice el párrafo. El campo aparecerá en la gestión de la visualización como los campos creados en la entidad.

La receta
Asegúrate de añadir las dos líneas siguientes al principio del archivo.
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\Core\Entity\EntityInterface;
En el archivo my_module.module
de tu módulo personalizado, define el campo pseudo utilizando la función hook_entity_extra_field_info()
:
/**
* Implementa hook_entity_extra_field_info().
*/
function MY_MODULE_entity_extra_field_info() {
$display_fields = [];
$display_fields['paragraph']['google_classroom_button']['display']['google_classroom_button'] = [
'label' => t('Botón de Google Classroom'),
'description' => t('Muestra el botón de Google Classroom'),
'weight' => 100,
'visible' => TRUE,
];
return $display_fields;
}
En este ejemplo, estamos definiendo un campo pseudo llamado google_classroom_button
para el tipo de entidad paragraph
y el bundle google_classroom_button.
Si quieres añadir el campo a un tipo de contenido, deberías reemplazar la palabra paragraph por node y google_classroom_button por el nombre de tu tipo de contenido, en el código anterior.
/**
* Implementa hook_ENTITY_TYPE_view().
*/
function MY_MODULE_paragraph_view(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display) {
if ($display->getComponent('google_classroom_button')) {
$currentUrl = Url::fromRoute('<current>',[] , ['absolute' => 'true'])->toString();
$output = '<script src="https://apis.google.com/js/platform.js" async defer></script>';
$output .= '<div class="g-sharetoclassroom" data-size="64" data-url="' . $currentUrl . '" ></div>';
$build['google_classroom_button'] = [
'#type' => 'markup',
'#markup' => $output,
'#allowed_tags' => ['script', 'div'],
];
}
}
El código anterior comprueba si el componente “google_classroom_button” se ha añadido a la configuración de visualización de la entidad Párrafo. Si es así, genera una salida personalizada para el campo pseudo “google_classroom_button”.
Casos de uso de los campos pseudo
- Mostrar valores calculados o agregados (como el número de comentarios en un nodo)
- Incrustar contenido de otras fuentes (como vídeos de YouTube o fuentes de redes sociales)
- Mostrar marcado o HTML personalizado (como una lista de contenido relacionado)
Reflexiones finales
- Esta es una forma rápida de obtener información adicional en una entidad sin tener que lidiar con plantillas twig.
- El campo pseudo no estará disponible al crear una vista para la entidad.