Plugin Gyroscops Compiler pour l'integration de l'API Sulu CMS dans des pipelines de donnees.
Ce plugin permet d'extraire et de charger des donnees depuis et vers une instance Sulu CMS via son API REST. Il genere du code PHP optimise a la compilation pour une execution performante.
| Ressource | Extraction | Creation | Mise a jour | Upsert | Suppression |
|---|---|---|---|---|---|
| Articles | oui | oui | oui | oui | oui |
| Pages | oui | oui | oui | oui | oui |
| Categories | oui | oui | oui | oui | oui |
| Media | oui | oui | oui | oui | oui |
| Tags | oui | oui | oui | oui | oui |
| Redirections | oui | oui | oui | oui | oui |
composer require kiboko/sulu-pluginsulu:
expression_language: [] # Optionnel : fournisseurs d'expression language
client: { ... } # Obligatoire : configuration du client API
extractor: { ... } # Configuration de l'extraction (OU loader)
loader: { ... } # Configuration du chargement (OU extractor)La section client est obligatoire. Elle configure la connexion HTTP vers l'API Sulu.
client:
base_url: 'https://mon-sulu.example.com' # Obligatoire
timeout: 30 # Optionnel, defaut : 30 (min : 1)
max_retries: 3 # Optionnel, defaut : 3 (min : 0)
headers: # Optionnel : en-tetes HTTP supplementaires
X-Custom-Header: 'valeur'
authentication: # Obligatoire
type: 'jwt' # 'jwt' (defaut) ou 'bearer'
# ... voir ci-dessous| Option | Type | Defaut | Description |
|---|---|---|---|
base_url |
string | - | Obligatoire. URL de base de l'API Sulu |
timeout |
integer | 30 |
Timeout des requetes en secondes (min : 1) |
max_retries |
integer | 3 |
Nombre de tentatives en cas d'echec (min : 0) |
headers |
object | {} |
En-tetes HTTP personnalises |
Permet l'authentification par login/mot de passe avec obtention et renouvellement automatique du token JWT.
authentication:
type: 'jwt'
username: 'admin'
password: 'secret'
login_endpoint: '/api/login' # Optionnel, defaut : '/api/login'| Option | Type | Defaut | Description |
|---|---|---|---|
username |
string | - | Nom d'utilisateur Sulu |
password |
string | - | Mot de passe |
token |
string | - | Token JWT pre-genere |
login_endpoint |
string | /api/login |
Endpoint de connexion |
Regles de validation :
- Au moins
username+passwordoutokendoit etre fourni - Si
tokenetusername/passwordsont fournis : le token est renouvele automatiquement a expiration - Si seul
tokenest fourni : utilisation en Bearer statique - Si seuls
username/passwordsont fournis : obtention du token via le login endpoint
Utilise un token statique passe directement dans l'en-tete Authorization.
authentication:
type: 'bearer'
token: 'mon-token-api' # Obligatoire| Option | Type | Defaut | Description |
|---|---|---|---|
token |
string | - | Obligatoire. Token d'authentification |
L'extractor permet d'extraire des donnees depuis l'API Sulu.
Deux methodes sont disponibles : all (liste) et get (ressource unique).
extractor:
type: 'articles' # Obligatoire
method: 'all' # Defaut : 'all'
locale: 'fr' # Optionnel : code locale (articles, pages)
website: 'default' # Optionnel : identifiant du site (articles, pages)
template: 'blog' # Optionnel : filtre par template (pages uniquement)
page: 1 # Optionnel, defaut : 1 (min : 1)
items_per_page: 30 # Optionnel, defaut : 30 (min : 1, max : 100)
pagination_enabled: true # Optionnel, defaut : true
filters: # Optionnel : filtres supplementaires
category: '3'
tag: 'featured'| Option | Type | Defaut | Description |
|---|---|---|---|
type |
enum | - | Obligatoire. Type de ressource (voir tableau) |
method |
enum | all |
Methode d'extraction : all ou get |
locale |
string | - | Code locale (ex : fr, en) - articles et pages |
website |
string | - | Identifiant du site web - articles et pages |
template |
string | - | Filtre par template - pages uniquement |
page |
integer | 1 |
Page de demarrage (min : 1) |
items_per_page |
integer | 30 |
Nombre d'elements par page (min : 1, max : 100) |
pagination_enabled |
boolean | true |
Active la pagination automatique |
filters |
object | {} |
Parametres de filtre supplementaires pour l'API |
extractor:
type: 'articles'
method: 'get'
id: '123e4567-e89b-12d3-a456-426614174000' # Obligatoire quand method = 'get'| Option | Type | Defaut | Description |
|---|---|---|---|
id |
string | - | Obligatoire quand method = get. Identifiant de la ressource |
Le loader permet de charger des donnees vers l'API Sulu. Quatre methodes sont disponibles : create, update, upsert et delete.
loader:
type: 'articles' # Obligatoire
method: 'create' # Defaut : 'create'
id_field: 'id' # Defaut : 'id'| Option | Type | Defaut | Description |
|---|---|---|---|
type |
enum | - | Obligatoire. Type de ressource (voir tableau) |
method |
enum | create |
Methode : create, update, upsert ou delete |
id_field |
string | id |
Champ contenant l'identifiant de la ressource |
Valeurs possibles pour type : articles, pages, categories, media, tags, redirects
| Methode | Description | id_field requis |
|---|---|---|
create |
Cree une nouvelle ressource | non |
update |
Met a jour une ressource existante | oui |
upsert |
Cree la ressource si elle n'existe pas, la met a jour sinon | oui |
delete |
Supprime une ressource existante | oui |
Toutes les options de la configuration supportent l'Expression Language de Symfony. Cela permet d'utiliser des valeurs dynamiques a l'execution.
client:
base_url: '@=env("SULU_API_URL")'
authentication:
type: 'jwt'
username: '@=env("SULU_USERNAME")'
password: '@=env("SULU_PASSWORD")'sulu:
client:
base_url: 'https://mon-sulu.example.com'
authentication:
type: 'jwt'
username: 'admin'
password: 'mot-de-passe'
extractor:
type: 'articles'
method: 'all'
locale: 'fr'
items_per_page: 50sulu:
client:
base_url: 'https://mon-sulu.example.com'
authentication:
type: 'bearer'
token: 'mon-token-api'
loader:
type: 'categories'
method: 'create'sulu:
client:
base_url: '@=env("SULU_API_URL")'
timeout: 60
max_retries: 5
authentication:
type: 'jwt'
username: '@=env("SULU_USERNAME")'
password: '@=env("SULU_PASSWORD")'
loader:
type: 'pages'
method: 'upsert'
id_field: 'uuid'sulu:
client:
base_url: 'https://mon-sulu.example.com'
authentication:
type: 'jwt'
username: 'admin'
password: 'secret'
loader:
type: 'redirects'
method: 'delete'
id_field: 'id'A