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í septiembre 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';

?>

Dernière modification de cette page le 22 de febrero de 2019

Discussion

Aucune discussion

Comentar este artículo

¿Quién es usted?
  • [Conectarse]

Para mostrar su avatar con su mensaje, guárdelo en gravatar.com (gratuit et indolore) y no olvide indicar su dirección de correo electrónico aquí.

Añada aquí su comentario

Este formulario acepta los atajos de SPIP, [->url] {{negrita}} {cursiva} <quote> <code> y el código HTML. Para crear párrafos, deje simplemente una línea vacía entre ellos.

Añadir un documento

Seguir los comentarios: RSS 2.0 | Atom