Spanish (Español) translation by Luis Chiabrera (you can also view the original English article)
Sparks es un nuevo sistema de administración de paquetes para CodeIgniter que extiende el núcleo con soporte para chispas similares a gemas.
Este tutorial entrelaza una descripción general de nivel de entrada de la arquitectura y el uso del sistema Sparks con la creación de un palomar, una chispa simple para administrar datos RSS.
Introducción
Los paquetes son bloques de código reciclable que pueden hacer las vidas de los desarrolladores mucho más fáciles.
Los desarrolladores de CodeIgniter han salivado durante mucho tiempo sobre los gestores de paquetes como gems y npm, sistemas que fortalecen a sus respectivas comunidades con herramientas y un repositorio central para desarrollar, reciclar y compartir componentes de aplicaciones útiles entre sí. Ahora, la espera terminó. Gracias a un nuevo sistema, Sparks, los desarrolladores de CodeIgniter finalmente pueden regocijarse, ya que un sistema de administración de paquetes en crecimiento es finalmente el suyo.
Visión general
Si no ha trabajado con ellos antes, solo piense en los paquetes como bloques de código reciclable que pueden hacer que la vida de los desarrolladores sea mucho más fácil. ¿Tal vez necesita una interfaz para un cubo de almacenamiento en la nube de Amazon? Sáltate las últimas noches que se vierten sobre la documentación de S3 y solo agarra la chispa.
Por su parte, el sistema de chispas consta de tres partes:
- Un repositorio central (getsparks.org) para almacenar y compartir chispas
- Una utilidad para administrar las chispas instaladas en una aplicación de CodeIgniter dada
- Las chispas en si
Para los fines de este tutorial, presentaremos los dos primeros, pero nos centraremos en el desarrollo de chispas y algunas consideraciones básicas para desarrollar una chispa. ¿Suena bien? Veamos cómo se hace.
Paso 1: Instalando Sparks
Es oficial: Sparks está programado para la integración en el núcleo de CodeIgniter, posiblemente tan pronto como la próxima versión 2.1. Pero dado que no es parte de una instalación predeterminada, todavía tendrá que configurar el sistema manualmente.
Si está en OSX o Linux, o si tiene la interfaz de línea de comandos de PHP instalada en Windows, la instalación es tan simple como instalar una copia limpia de CodeIgniter y emitir lo siguiente en el directorio de instalación:
$ php -r "$(curl -fsSL http://getsparks.org/go-sparks)"
Si todo fue bien, deberías ver algo como esto:



Si por alguna razón eso no funcionó, o si está en Windows y no ha agregado PHP a su ruta de comando, también puede instalar chispas manualmente. Es un poco más de trabajo, pero el resultado es el mismo:
- Agregando un directorio llamado
Sparks
en la raíz de su directorio codeigniter - Agregar una clase de cargador personalizada a
application / core / MY_Loader.php
- (opcional) descargando y extrayendo la utilidad de línea de comandos de Sparks en su directorio codeigniter
Su instalación de CodeIgniter ahora debe estar parcheada para soportar chispas.
Paso 2: Comenzando
En la Europa medieval, cada casa señorial incluía un pequeño edificio anexo para que las palomas anidaran llamado palomar. Ya que estaremos construyendo una chispa que involucre tanto twittear como alimentar, el nombre es lo suficientemente apropiado. Pero también cumple con el único requisito de nombrar: para ser incluido en el repositorio en GetSparks.org,
Los nombres de proyectos de GetSparks deben ser únicos
Delineando la chispa
Antes de que podamos codificar, tendremos que diseñar un proyecto. En el directorio de sparks
en la raíz de su instalación de CodeIgniter (créelo, si no existe), agregue una nueva carpeta para contener la chispa:
/sparks/dovecote
La convención dicta que las chispas están organizadas por versión, por lo que necesitaremos una subcarpeta para guardar el primer borrador. 0.0.1
es un buen lugar para comenzar.
/sparks/dovecote/0.0.1
Esta carpeta es donde tendrá lugar toda la acción. Cuando el resto del tutorial se refiere a nuestro "directorio de chispas", aquí está.
El archivo spark.info
Las cosas se ven bastante desnudas hasta ahora, pero estamos listos para comenzar a llenarlas. La primera parte de la chispa, y el único archivo técnicamente requerido por la utilidad de chispa, es spark.info
. Cree un nuevo archivo llamado spark.info
en su directorio de chispa y agregue lo siguiente:
name: dovecote version: 0.0.1 compatibility: 2.0.2 dependencies: Atomizer: 0.0.1 tags: ["twitter","api","social"]
Estos campos representan toda la información que necesita la utilidad spark. Administre la versión y las dependencias de todas las chispas en esta instalación de CodeIgniter. La utilidad buscará cinco cosas, pero solo se requieren las tres primeras:
-
name
- el id único de chispa -
version
- versión actual -
compatibility
- versión mínima de CodeIgniter -
dependencies
- (opcional) otras chispas requeridas por esta chispa -
tags
- etiquetas (opcionales) que describen esta chispa
Incluso si no está planeando utilizar la utilidad de chispa por sí mismo, todavía es educado incluir un archivo de spark.info
con cualquier chispa que planee distribuir. Una de las ventajas reales de administrar chispas de esta manera, en lugar de pegarlas directamente en el directorio sparks
, es que el administrador de chispas puede usar la compatibilidad, la dependencia y la información de versión de cada chispa para asegurar un buen juego con la instalación actual de CodeIgniter, y El uno al otro. También hay otro beneficio, como veremos en un momento: las chispas instaladas fuera de la utilidad del administrador deben tener sus dependencias instaladas manualmente.
Organizando la Chispa
Con el archivo de información escrito, es hora de darle un poco de estructura a la chispa. Crea cuatro nuevas carpetas en el directorio de la chispa:
- config
- ayudantes
- bibliotecas
- vistas
Si ha trabajado con CodeIgniter anteriormente, probablemente sean nombres familiares. La clase loader
de CodeIgniter trata a Sparks como paquetes, lo que significa que el contenido de estos directorios se comprueba para los componentes de la aplicación que no se pueden encontrar en el directorio / application
. Por ahora, esto se aplica a cinco tipos de recursos:
- configs
- ayudantes
- bibliotecas
- modelos
- vistas
Paso 3: escribiendo la chispa
Antes de comenzar a programar, tómese un momento para asegurarse de que su directorio de chispa contenga todas las piezas necesarias.



¿Todo en orden? Vamos a proceder.
Crea un archivo en el directorio config
recién creado y llámalo dovecote.php
. Almacenaremos algunas opciones básicas aquí para decirle a la chispa dónde puede encontrar datos RSS:
<?php /** config/dovecote.php **/ // Username to retrieve tweets from: $config[ 'twitter' ] = 'getsparks'; // API endpoint to query for tweets: $config[ 'twitterURL' ] = 'http://twitter.com/statuses/user_timeline/%s.rss'; // Feed carrying RSS data: $config[ 'feedURL' ] = 'http://feeds.bbci.co.uk/news/rss.xml'; ?>
No es mucho, hemos definido un nombre de usuario de Twitter (@getsparks) para capturar tweets, hemos proporcionado un punto final de API para la línea de tiempo de Twitter y hemos agregado una URL adicional para buscar historias RSS.
Ahora que la chispa sabe dónde se pueden encontrar los datos, es hora de ir a recuperar algunas fuentes. Para hacer esto, necesitaremos crear una biblioteca, llámela dovecote.php
, y guárdela en el directorio libraries
:
<?php /** libraries/dovecote.php **/ class dovecote { protected $ci, $timeline; public function __construct() { $this->ci = &get_instance(); } public function retrieve() { // build twitter request URL $twitterURL = sprintf( $this->option( 'twitterURL' ), $this->option( 'twitter' ) ); // get RSS Data $tweets = $this->ci->atomizer->loadURL( $twitterURL ); $feed = $this->ci->atomizer->loadURL( $this->option( 'feedURL' ) ); // set channel information for new feed $info = array( 'title' => 'Convolved feed' ); // mix the two feeds together $this->timeline = $feed->convolve( $tweets, $info ); return $this->timeline; } public function publish() { header('content-type: application/rss+xml'); echo $this->timeline->save(); } // retrieve an option ($key) from config files protected function option( $key ) { return $this->ci->config->item( $key ); } } ?>
Esta biblioteca proporciona funciones de ayuda para recuperar las opciones de nuestro archivo de configuración y publicar una fuente RSS, pero la pieza crítica es retrieve ()
. Esta función toma datos RSS de los proveedores descritos en el archivo de configuración de dovecote en varios pasos:
- Primero, se genera la dirección del feed RSS de Twitter. Config esbozó un nombre de usuario (
twitter
) y un punto final (twitterURL
); ahora, los dos se combinan utilizandosprintf
. - A continuación, los datos RSS en cada fuente se recuperan utilizando la función
loadURL
de la bibliotecaatomizer
. Esta función devuelve un objeto "AtomizerFeed
" que proporciona algunas funciones útiles para manipular datos RSS. - Finalmente, la operación
convolve
deAtomizerFeed
se utiliza para combinar los elementos de las dos fuentes en una sola fuente, que se devuelve.
En este punto, estamos casi listos para iniciar el palomar en una aplicación en vivo. Solo tenemos que verificar para asegurarnos de que nuestra aplicación incluya todas las dependencias del palomar y que la chispa se cargue correctamente.
Paso 4: Dependencias
Cuando escribimos spark.info
, recordemos la línea donde describimos las dependencias de palomar:
Dependencies: Atomizer: 0.0.1
Esto significa que el palomar se basa en otra chispa, el atomizador, para funcionar. Una vez que las chispas se confirman en el repositorio getsparks.org, la utilidad del administrador descargará las dependencias automáticamente. Sin embargo, mientras permanezcamos en el desarrollo local, tendremos que hacerlo nosotros mismos.
Si está utilizando el administrador de chispas, puede instalar Atomizer navegando a su directorio CodeIgniter e invocando la función install
del administrador:
php tools/spark install -v0.0.2 atomizer
Nota: si estás en Windows, deberás invocar php tools \ spark install -v0.0.2 atomizer
en su lugar.
Si no está utilizando el administrador, o si la instalación no se completó con éxito, puede descargar Atomizer de Github y extraerlo en el directorio sparks
de su aplicación junto a la carpeta que contiene el palomar.
Paso 5: Autocarga
Antes de que el palomar esté disponible para otras partes de la aplicación, debemos asegurarnos de que se cargará correctamente. Regrese a la carpeta de configuración en su directorio de chispa y pegue lo siguiente en un nuevo archivo llamado autoload.php
.
<?php /** config/autoload.php **/ // load default configuration $autoload['config'] = array( 'dovecote' ); // load dependency $autoload['sparks'] = array( 'atomizer/0.0.2' ); // load library $autoload['libraries'] = array( 'dovecote' ); ?>
Cada vez que CodeIgniter carga una chispa, intentará cargar todos los recursos listados en autoload.php
también. Esto permite a los autores de Sparks definir los recursos a los que los usuarios deberían tener acceso inmediato cada vez que cargan la chispa. Debido a que la biblioteca dovecote
está especificada aquí, por ejemplo, tendremos acceso inmediato a la función retrieve
tan pronto como se cargue la chispa.
Vale la pena mencionar que los recursos descritos en autoload.php
no necesitan residir en el directorio de la chispa. Siempre que se encuentren en algún lugar de la ruta de búsqueda de CodeIgniter, la aplicación debería poder encontrarlos. Observe que atomizer
se está cargando en el ejemplo anterior; ¡No haría mucho bien enumerar las dependencias de una chispa pero no podría cargarlas!
Guarda el archivo de carga automática y vamos a cargarlo todo. En el controlador de bienvenida en su aplicación principal (/application/controllers/welcome.php
), agregue lo siguiente:
public function dovecote() { $this->load->spark( 'dovecote/0.0.1' ); $this->dovecote->retrieve(); $this->dovecote->publish(); }
Vamos a caminar a través de eso:
- Le pedimos a CodeIgniter que cargue el palomar, sabiendo que todos los recursos solicitados en
config / autoload.php
también se cargarán - La función
retrieve
del palomar se usa para obtener copias de las fuentes RSS descritas enconfig / dovecote.php
- La línea de tiempo combinada producida por
retrieve
se sirve como una fuente RSS que utiliza la funciónpublish
de dovecote
Véalo en acción
Navega para welcome / dovecote
en tu navegador, y deberás recibir un RSS que describa los tweets y artículos que ha recopilado dovecote.
Paso 6: Construyendo sobre la Chispa
Hagamos el palomar un poco más útil. Primero, crearemos una plantilla de vista básica para mostrar el título de cada artículo en nuestra línea de tiempo:
<?php /** views/dovecote_timeline.php */ ?> <h3>Recent Happenings:</h3> <ol> <?php foreach ($items as $item): ?> <li><?php echo $item->title; ?></li> <?php endforeach; ?> </ol>
A continuación, haremos que la vista sea accesible al proporcionar una función auxiliar que otras partes de la aplicación pueden usar para representar la línea de tiempo en HTML.
<?php /** helpers/dovecote_helper.php */ function dovecote_timeline() { $ci = &get_instance(); $feed = $ci->dovecote->retrieve(); $data = array( 'items' => $feed->items() ); $ci->load->view( 'dovecote_timeline', $data ); } ?>
La función dovecote_timeline
y su vista epónima ahora se pueden usar para representar la línea de tiempo en cualquier lugar de nuestra aplicación. Pero, de acuerdo con la filosofía de lo que necesita CodeIgniter, no lo haremos disponible automáticamente a través de autoload.php
. En su lugar, tendremos que cargar el ayudante manualmente cada vez que sea necesario. Regrese al controlador de bienvenida de su aplicación y actualice la función dovecote
para generar una versión HTML del feed:
public function dovecote() { $this->load->spark( 'dovecote/0.0.1' ); $this->load->helper( 'dovecote' ); $this->dovecote->retrieve(); // call the helper function echo dovecote_timeline(); }
Actualice su navegador y ahora debería ver una lista de todos los elementos en la línea de tiempo de los palomeros.



Terminando
¡Felicidades! Ahora eres el propietario de una chispa muy simple, pero hay mucho más que se puede hacer. Antes de enviar dovecote a la acción, puede considerar escribir funciones adicionales. Los detalles dependen de usted, pero algunas características útiles pueden incluir:
- almacenamiento en caché de respuestas API
- Vistas para embellecer los datos recuperados.
- persistencia de datos para guardar elementos de la línea de tiempo más antiguos (¡primero revise la licencia del feed)
Este tutorial ofrece los esquemas más simples de lo que se puede hacer con chispas e introduce las ventajas que las chispas pueden proporcionar para minimizar la repetición y acelerar el desarrollo.
¿Trabajando en tu propia chispa? ¿Tienes problemas para empezar? ¡Comparte un poco más en los comentarios a continuación y muchas gracias por leer!