Las extensiones

Las extensiones son una forma sencilla para que los plugins modifiquen o añadan funciones nuevas a controladores, modelos, tablas o vistas de otros plugins (o del core), internamente el programa lo pipe().

No son herencia

Las extensiones o pipes no son herencia. Cuando en una extensión añades código a ejecutar durante el guardado de un modelo en la base de datos, no estás heredando del modelo, sino que estás "incrustando" este nuevo código en el archivo original. Por eso varios plugins pueden añadir extensiones a un mismo archivo, mientras que con herencia no es posible.

Sólo en archivos soportados

No es posible añadir extensiones a cualquier archivo imaginable. Solamente en aquellos soportados:

Extensiones no soportadas

No es posible añadir extensiones a los archivos de:

  • Core/Base
  • Core/Model/Base
  • Core/Lib/ExtendedController

Extensiones de archivos XML

Las extensiones de archivos xml se aplican automáticamente. Si creas un archivo Extension/Table/productos.xml, el contenido de ese archivo se fusionará automáticamente con el del archivo original. El resultado se almacena en la Dinamic/Table/productos.xml, que es el archivo que utiliza finalmente FacturaScripts.

Extensiones de archivos PHP (controladores y modelos)

Las extensiones de archivos PHP no se cargan automáticamente. Es necesario cargarlas en el archivo Init.php del plugin.

public function init(): void
{
    $this->loadExtension(new Extension\Controller\ListProducto());
}

La clase de extensión

Cada extensión es una clase cuyos métodos devuelven un Closure. El nombre de cada método debe coincidir con el punto de extensión (el pipe()) que ofrece el controlador o modelo. Dentro del Closure, $this es la instancia del objeto extendido:

namespace FacturaScripts\Plugins\MyNewPlugin\Extension\Controller;

use Closure;

class ListProducto
{
    public function createViews(): Closure
    {
        return function () {
            // $this es el controlador ListProducto que se está extendiendo
            // aquí se añade el código nuevo, por ejemplo una vista o un botón
        };
    }
}

Puntos de extensión habituales en los controladores son createViews, loadData, execPreviousAction, execAfterAction, y en los modelos saveInsertBefore, saveUpdateBefore, delete, etc. Si un método de la extensión no devuelve un Closure, FacturaScripts lanzará una excepción. En los puntos que usan pipeFalse() (como saveBefore o execPreviousAction), devolver false dentro del Closure detiene la ejecución del resto de la cadena.

Cookies
Usamos cookies necesarias para el funcionamiento del sitio y cookies opcionales para recordar tus preferencias y mejorar tu experiencia. Puedes aceptarlas todas, rechazarlas o configurar tus preferencias

Soporte