Enviat per ajbadmin el

A partir de la versión 10.3 del core de Drupal, se incorporo un nuevo tipo de extensión llamado Recipes(recetas) y que si bien cumple una función similar a las ya existentes como los Profiles(perfiles de instalación) o módulos, poseen algunas particularidades que pueden resultarnos muy útiles. 
Hasta la actualidad, poseíamos los Profiles, que servían como punto de arranque para tener, desde el inicio, un producto adaptado a nuestras necesidades. En este sentido, las recipes comparten esta funcionalidad, ya que se pueden hacer recetas que estén disponibles al momento de inicializar un proyecto, pero la diferencia mas notable entre ambos, reside en que los profiles solo están disponibles al momento de inicializar el proyecto y solo puede usarse uno por sitio.

 


API's

Las recetas funcionan sobre 4 API's:

- Recipes (propia recipes).
- Action (alterar configuracion[plugins]).
- Checkpoint (como fallback, requerido para deshacer si la recipe falla)
antes de aplicar una recipe, crea una marca para volver atras si falla, sino se borra .
- Default content (importar contenido por defecto).

 


Caracteristicas

 Repasemos un poco las características de las recetas:

- No se instalan, se aplican (Actúan a modo de script) (no dejan huella, una vez aplicadas no dejan rastro)
- No contienen código 
- Mediante dependencias las recipes pueden llegar a instalar código, esto es, módulos y temas gráficos, pero ellas como tal no contienen archivos PHP
- Pueden modificar la configuración existente (mediante un nuevo soporte llamado config actions)
- Pueden crear contenido
- No borran nada (en principio estan pensadas para no borrar nada)

 


Estructura

Dentro de una receta, encontraremos al menos un archivo que es el recipe.yml, que tiene una estructura de este tipo:

Nombre y descripción:

name: 'Drupal Base'
description: 'A recipe tailored to best practices for kickstarting a new Drupal 10 project.

Tipo

En las recetas, el tipo es similar al paquete (package) en los módulos, agrupa recetas según criterio de utilidad. El tipo 'Site' significa que la receta será listada como una opción en el instalador.

type: 'Content type'

Recipes

Si la receta depende de otras, se listarán aquí. Todas se aplicarán antes que ella misma.

recipes:
	- editorial_ui_for_publishers
	- another_recipe

Install

Dependencias generales (módulos o temas gráficos) de la receta.

install:
	- node
	- text

Config import

La receta puede controlar qué entidades de configuración instalar o no de las provistas por los módulos listados en sus dependencias.

config:
	import:
		easy_breadcrumb:
			- views.view.easy_breadcrumbs
		node:
			- node.type.article
		text: *

En el ejemplo "text" lleva un asterisco que indica que debe importarse toda la configuración de ese modulo.

Config actions

Aquí se relacionan las 'config actions' o acciones a realizar sobre configuración existente. Se declara el nombre de la configuración a tratar, la acción concreta a realizar (esto lo hace un plugin) y posibles argumentos. 
En el ejemplo, el rol de usuario 'Editor' será creado si no existe y luego obtendrá varios permisos para trabajar sobre el tipo de contenido Artículo.

config:
	actions:
		user.role.editor:
			ensure_exists:
				label: 'Editor'
			grantPermissions:
				- 'delete any article content'
				- 'edit any article content'

Content

Se puede proveer un directorio con contenido a crear una vez la configuración de la receta se haya instalado.

content:
	node:
		foo.yml

 


Importar una receta

Vía comando PHP:

php core/scripts/drupal recipe recipes/recipe_name

Vía drush:

drush recipe [RUTA RECETA]

Si su receta tiene un archivo «composer.json», puede alojarse en Packagist.org para que se pueda encontrar e incluir en cualquier proyecto. Sin embargo, para descargar la receta en un directorio «recipes» es necesario realizar algunos cambios en el archivo «composer.json» del proyecto:

composer require oomphinc/composer-installers-extender:2.0.1

Actualizar las claves «installer-types» e «installer-paths» en el «composer.json»

"installer-types": ["drupal-recipe"], 
"installer-paths": {
 "web/recipes/{$name}": [ "type:drupal-recipe" ]
}

Con esto, cuando solicites a Composer una receta, la colocará automáticamente en el directorio «recipes» de tu proyecto, de forma similar a como gestiona módulos o temas. Una vez que esto está configurado, puede utilizar Composer para requerir el paquete como de costumbre.

composer require foo/bar

 


Enlaces de interés