Escribe un plugin (SPIP 1.9)

SPIP 1.9 introducirá la noción de « plugin », que ya se puede probar en la versión de desarrollo (SVN). He aquí un ejemplo muy simple de plugin.

La idea (propuesta por Olivier) es instalar, por el método de los plugins, un nuevo atajo en la función typo(). Este atajo permitirá obtener una palabra extraída de un fichero de traducción.

El plugin se llamará toutmulti.

La sintaxis elegida es la de los bloques de traducción tal como se los utiliza en los esqueletos: <:toto:> significará “buscar la palabra cuyo código es toto, e indicarlo en la lengua corriente”. Así September se indicará « Septiembre » si se está en un artículo en español, y « Wrzesień » si es un artículo en polaco.

Para programar un plugin capaz de administrar este nuevo recurso, se va a comenzar por duplicar el plugin «ancres» que se encuentra en el directorio plugins/ancres/. Se vuelve a copiar pues este directorio bajo el nombre plugins/toutmulti/.

Se compone de un único fichero, plugins/toutmulti/version.php, que se editará simplemente modificando la expresión racional (regexp) de lo que se busca, así como la línea que efectúa la sustitución.

He aquí un pedazo significativo de código extraído del plugin « ancres » :

function ancre($texte) {
        $regexp = "|\[#?([^][]*)<-\]|";
        if (preg_match_all($regexp, $texte, $matches,
        PREG_SET_ORDER))
        foreach ($matches as $regs)
                $texte = str_replace($regs[0],
                '<a name="'.entites_html($regs[1]).'"></a>',
                $texte);
        return $texte;
}

y aquí la función « toutmulti » :

function toutmulti($texte) {
        $regexp = "|<:([^>]*):>|";
        if (preg_match_all($regexp, $texte, $matches,
        PREG_SET_ORDER))
        foreach ($matches as $regs)
                $texte = str_replace($regs[0],
                _T('spip/ecrire/public:'.$regs[1]),
                $texte);
        return $texte;
}

Hay que señalar que este plugin es tan simple que se decidió permitir a SPIP cargar a cada llamado de página la función que efectúa la sustitución
(function toutmulti()) , incluso cuando no se llama a la función (página ya en caché, por ejemplo). Es preferible, en términos de resultados, definir la función en un fichero secundario. La última línea del plugin (que se encuentra aquí comentada) sirve para precisar qué fichero llamar, en este caso, para encargar esta función solamente en caso de necesidad..

Queda por explicar la primera línea:

$GLOBALS['spip_pipeline']['pre_typo'] .= '|toutmulti';

Ésta indica que se quiere hacer esta sustitución en el punto de entrada pre_typo, que es invocado antes del tratamiento tipográfico (y es mejor, ya que el carácter « : » del recurso se activa por el tratamiento tipográfico normal).

* *

Para instalar el plugin, es suficiente con colocar la carpeta toutmulti dentro de plugins/. Es necesario a continuación activar el plugin; SPIP no ofrece aún interfaz gráfica para eso: es necesario añadir, en ecrire/mes_options.php3, la línea siguiente :

<?php
$plugins[] = 'toutmulti';
?>

Eso es todo!

Espero que este pequeño tutorial les de el deseo de dar una vuelta por el Spip Zone y su directorio de plugins que también está esperando los tuyos!

Aquí, para terminar, el código completo:

<?php

/*
 * toutmulti
 *
 * introduit le raccourci <:texte:> pour introduire librement des
 * blocs multi dans un flux de texte (via typo ou propre)
 *
 * Auteur : collectif
 * © 2006 - Distribue sous licence BSD
 *
 */

$nom = 'toutmulti';
$version = 0.1;

// s'inserer dans le pipeline 'avant_propre' @ ecrire/inc_texte.php3
$GLOBALS['spip_pipeline']['pre_typo'] .= '|toutmulti';

// la fonction est tres legere on la definit directement ici
function toutmulti($texte) {
	$regexp = "|<:([^>]*):>|";
	if (preg_match_all($regexp, $texte, $matches, PREG_SET_ORDER))
	foreach ($matches as $regs)
		$texte = str_replace($regs[0],
		_T('spip/ecrire/public:'.$regs[1]), $texte);
	return $texte;
}

#$GLOBALS['spip_matrice']['toutmulti'] = dirname(__FILE__).'/toutmulti.php';

?>

updated on 22 February 2019

Discussion

Aucune discussion

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom