Experts en Drupal

Programació de scripts independents amb accés a l’API de Drupal

En moltes ocasions ens trobem amb la necessitat de programar scripts que s’han d’executar periòdicament des del “crontab” del sistema. Per ser més àgils, podem fer que els nostres scripts tinguin accés a l’API de Drupal i a la seva base de dades.

.
Roger Codina
Roger Codina

desembre 03, 2020

Programació de scripts independents amb accés a l’API de Drupal

Quan programem scripts pels nostres llocs webs Drupal tenim dues alternatives: o programem una comanda de “drush” personalitzada a través d’un mòdul personalitzat de Drupal o bé creem scripts independents amb accés a Drupal. Nosaltres preferim el segon mètode ja que ens permet integrar aquest script al “crontab” del sistema amb menys problemàtiques que en el primer cas.

A continuació, teniu el codi PHP necessari per a crear scripts independents per a Drupal 8/9 i també per a Drupal 7. En funció del directori on poseu el vostre script, haureu de canviar el “path” relatiu fins al nucli de Drupal.
 

Drupal 8/9: 

<?php

use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

// Change the directory to the Drupal root.
chdir(dirname(__FILE__) . '/../web');
$autoloader = require_once 'autoload.php';

try {
  $request = Request::createFromGlobals();
  $kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod');
  $kernel->boot();
  $kernel->preHandle($request);

  // Ensure the request includes the session if appropriate.
  if (PHP_SAPI !== 'cli') {
    $request->setSession($kernel->getContainer()->get('session'));
  }

  // EL CODI DEL NOSTRE SCRIPT VA AQUÍ.

} catch (HttpExceptionInterface $e) {
  $response = new Response('', $e->getStatusCode());
  $response->prepare($request)->send();
  exit;
}

Drupal 7:

<?php

// Avoid PHP Notice.
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';

// Boostrap Drupal.
define('DRUPAL_ROOT', dirname(__FILE__) . '/..');

// Boot drupal.
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

 // EL CODI DEL NOSTRE SCRIPT VA AQUÍ.

Bibliografia: 

https://www.drupal.org/project/drupal/issues/1436272
https://drupal.stackexchange.com/questions/174474/bootstrap-from-external-script/294348#294348
 

Comparteix aquest article

Articles Relacionats