Introducción para principiantes a la escritura de módulos en ProcessWire

Los módulos de ProcessWire le permiten extender la funcionalidad al administrador de CMS, agregar nuevas integraciones de API y, en general, potenciar su sitio. A menudo me encuentro en la página de módulos de ProcessWire (PW) para ver si hay una solución prefabricada para mi problema actual; y usualmente la respuesta es si!

Sin embargo, cuando necesita crear algo nuevo, PW, como sus plantillas, le da el poder de su API junto con PHP.

En este tutorial, aprenderemos cómo crear e instalar módulos, observar sus requisitos y explicar cómo usar ganchos de PW para agregar funcionalidad a otras funciones dentro de su sitio..

Instalación

Es importante saber cómo instalar un módulo si aún no lo ha hecho. Seguir este proceso le mostrará dónde se mostrará la información y la configuración de su módulo, cómo desinstalarlo y qué módulos instalados podrían ampliarse.

  1. Subir archivos de módulo a / site / modules /.
  2. Dentro de admin de PW, en el menú superior vaya a módulos y haga clic en el botón Refrescar.
  3. Ahora su nuevo módulo aparecerá en la lista y se puede instalar haciendo clic en Instalar.

Creación de un módulo

Requerimientos

Vamos a empezar a crear un nuevo módulo. PW solo necesita algunas cosas de su módulo:

  • un nombre de clase (por ejemplo, HelloUserYouSaved)
  • la clase debe extender una clase basica PW(por ejemplo, Process, Wire o WireData)
  • su clase debe implementar la clase "módulo"
  • y ya sea una estática getModuleInfo () Método, o un archivo "ModuleName.info.php" o un "ModuleName.info.json" dentro de la carpeta de su módulo. Este método ofrece información sobre su módulo que se mostrará en el administrador..
la clase HelloUserYouSaved amplía los implementos de WireData Módulo función estática pública getModuleInfo ()  

A través de extiende WireData Le he dado a mi nuevo módulo acceso a la API de PW y a los métodos heredados de WireData.

Nuestro módulo es bastante aburrido en este momento, así que agreguemos algo de información del módulo para que otros usuarios puedan ver lo que hace..

getModuleInfo ()

la clase HelloUserYouSaved extiende los implementos de WireData Módulo función estática pública getModuleInfo () return array ('title' => "HelloUserYouSaved", 'version' => "0.0.1", 'summary' => "HelloUserYouSaved muestra mensajes después de las acciones en PW ", 'author' =>" Ben Byford ", 'href' =>" https://github.com/benbyford/PW-starter-modules/tree/master/HelloUserYouSaved ", 'icon' =>" bell ", // use autoload si el módulo debe llamarse a cada carga, si solo es necesario para configurar algo configurado como falso 'autoload' => true, 'singular' => false, 'require' => "ProcessWire> = 2.5", ); 

Para una lista completa de opciones, vea la referencia del módulo. resumen , versión y título son obligatorios, pero también es recomendable agregar los requisitos de su módulo, singular (verdadero si solo se permite una copia de este módulo por instalación de PW) y carga automática (verdadero para llamar al módulo en cada solicitud).

Manos

Para todos los módulos (incluso los módulos centrales) dentro de PW, puede crear funciones enlazables para permitir que otros métodos de módulos se activen en su uso. Por ejemplo, podemos crear un gancho que active un nuevo método. ___helloMessage Cada vez que una página se guarda con PW. Puede saber qué métodos se pueden conectar, ya que tienen tres guiones bajos antes de su nombre, lo que significa que nuestro nuevo método también se puede conectar con otros módulos.

public function init () // agregar gancho dentro de la clase y apuntar a la función personalizada helloMessage $ this-> addHookAfter ("Pages :: save", $ this, "helloMessage"); Parent :: init ();  función pública ___ helloMessage ($ evento) // Obtener el objeto de página que se guardará pronto del evento dado $ página = $ evento-> argumentos [0]; // use message () para enviar una alerta de saludo a PW // alert se mostrará después de guardar cualquier página de administrador. $ this-> message ("¡Hola $ this-> user-> name! Has guardado $ page-> name."); 

En el código anterior, puede ver cómo agregamos un enlace al módulo de Páginas principales que se activa después del método de guardar, que llama a nuestros ___helloMessage método. Tenemos la opción de agregar ganchos antes o después de usar el método: $ this-> addHookBefore () y $ this-> addHookAfter () respectivamente. Como vamos a enviar un mensaje al usuario después de guardar la página, estamos usando el gancho después variación.

Los ganchos están en todas partes dentro de PW, y después de que hayas logrado usarlos, puedes conectarte a la mayoría de las partes del sistema para alterar el comportamiento predeterminado o desencadenar un nuevo comportamiento. Aquí hay una lista de los módulos principales y sus métodos enganchables..

El código fuente completo de nuestro módulo "HelloUserYouSaved" se puede encontrar en GitHub.

getModule ()

También puede usar módulos para generar datos o marcas en sus plantillas. Se puede utilizar cualquier función pública disponible dentro de su módulo en las plantillas para generar un resultado. Por ejemplo, el módulo MarkupTwitterFeed se puede usar para generar tweets agregando este código a su plantilla:

$ t = $ modules-> getModule ('MarkupTwitterFeed'); echo $ t-> render ();

El código de arriba usa el getModule () Método y almacena el objeto para que el hacer() la función puede ser utilizada.

En este segundo módulo "FrontEndRender" una función llamada hacer() Se implementa el cual podemos usar mas adelante en nuestras plantillas para devolverlo. Hola y una variable protegida $ nombre.

clase FrontEndRender extiende los implementos de WireData Módulo función estática pública getModuleInfo () return array ('title' => 'FrontEndRender', 'version' => 0.1, 'summary' => "Produce html y variables estáticas en el frontend", 'autor '=>' Ben Byford ',' singular '=> true,' href '=>' https://github.com/benbyford/PW-starter-modules ');  // variable protegida solo accesible dentro del módulo protected $ nombre = 'Ben'; función pública render () return "Hello". $ este-> nombre; 

Podemos repetir el resultado en cualquier lugar de nuestra plantilla (por ejemplo, nuestro archivo "_main.php") utilizando:

$ FrontEndRender = $ modules-> getModule ('FrontEndRender'); eco '

'. $ FrontEndRender-> render (). '

';

El código fuente completo de nuestra "El módulo FrontEndRender "se puede encontrar en GitHub.

Terminando

En este tutorial, analizamos la instalación y creación de módulos simples dentro de ProcessWire. También implementamos un gancho y un contenido renderizado en el front-end usando nuestros módulos personalizados.

Hay mucho más que decir acerca de los módulos, así que permanezca atento a más tutoriales de creación de módulos PW y encuentre más información sobre los módulos en los recursos a continuación..

Recursos

PHP

ProcessWire

  • Introducción de módulos en processwire.com
  • Módulos docs en processwire.com
  • PW Hooks cheatsheet en processwire.com
  • Método GetModule () en processwire.com
  • Módulo de creador de placa de calderas en modules.pw