Advertisement
  1. Code
  2. CMS

4 razones para elegir ProcessWire como su próximo CMS

Scroll to top
Read Time: 17 min

Spanish (Español) translation by Claudia Márquez (you can also view the original English article)

Hace unas semanas, me topé con un artículo de A List Apart titulado "Cómo administrar su sistema de administración de contenido". Ofrece recomendaciones sobre cómo limitar y adaptar la libertad de los usuarios en un back-end del Sistema de gestión de contenidos (CMS) con el objetivo de facilitar su uso.

Al leer estas recomendaciones y compararlas con las posibilidades técnicas de los principales actores en el panorama actual del CMS, veo muchas limitaciones. La mayoría de estos CMSs simplemente no tienen este tipo de capacidades y no pueden proporcionar el nivel de opciones para personalizar idealmente una interfaz de usuario de back-end. Pero trabajando con ProcessWire durante algunos años, creo que he encontrado el santuario para los desarrolladores y usuarios que quieren exactamente eso.

Screenshot of the ProcessWire websiteScreenshot of the ProcessWire websiteScreenshot of the ProcessWire website

ProcessWire es un CMS de código abierto y un marco de administración de contenido (CMF) de código abierto y prometedor. En su esencia, se basa en unos pocos conceptos simples y proporciona herramientas que son muy fáciles de usar y extremadamente poderosas al mismo tiempo. En este artículo general, quiero presentarles algunas de estas herramientas y conceptos. Aquí hay cuatro razones para elegir ProcessWire como su próximo CMS.

1. Se basa en tres conceptos básicos simples: páginas, campos y plantillas

La entrada y salida de datos se basa en solo tres conceptos básicos, y nada más. Esto significa que una vez que entienda estos conceptos, básicamente comprenderá todo sobre ProcessWire y la filosofía que lo sustenta. Muy bien, ¿verdad? Entonces, permítame presentarle páginas, campos y plantillas.

Páginas

En la página de inicio de su instalación de ProcessWire, verá un árbol de página jerárquico único:

ProcessWire installationProcessWire installationProcessWire installation

Los enlaces que ves en el árbol se llaman páginas. Las páginas en el back-end generalmente reflejan la página vista en el front-end. Por ejemplo, se puede acceder a la página "Acerca de" en la captura de pantalla en la parte delantera abriendo your-domain.com/about/.

Pero las páginas no tienen que tener una contraparte en el front-end. También pueden simplemente existir en el back-end y servir como contenedores de datos para otras páginas. Deje que la frase que acaba de leer se hunda: el concepto de páginas solo disponibles en el back-end es bastante poderoso porque abre infinitas posibilidades en la forma de estructurar su sitio web e interactuar con los datos ingresados.

Puedes y debes usar páginas para casi todo. Por ejemplo, puede tener una página de configuración oculta, donde guarda cosas como la navegación principal o texto general como el nombre, el eslogan, el aviso de copyright, etc. de su sitio web. Otro ejemplo sería etiquetas y categorías de publicaciones de blog (equivalentes a taxonomías en WordPress). Solo creará páginas para cada etiqueta o categoría de una publicación de blog. Permítanme citar a Joss Sanglier con respecto a las páginas en ProcessWire:

Las páginas en ProcessWire se utilizan para todo tipo de cosas. Se pueden utilizar como un marcador en su lista de páginas. Se pueden utilizar como un marcador en su lista de páginas. Se pueden utilizar como categorías, etiquetas para listas o usuarios. E incluso se pueden usar para simples selecciones desplegables, solo para proporcionar una etiqueta y un valor.

Vamos a abrir y editar lo anterior "Acerca de" página.

The About PageThe About PageThe About Page

Ahora está viendo el siguiente concepto central de ProcessWire: fields.

Campos

Las páginas contienen campos. Pero los campos tienen que ser vistos desde dos ángulos diferentes. Pero los campos tienen que ser vistos desde dos ángulos diferentes. Técnicamente, estos campos forman parte de la plantilla de la página. Describiré el concepto de plantillas más adelante; entendamos primero los campos.

Los campos en ProcessWire son los contenedores en los que coloca los datos o desde los que selecciona datos, como texto, áreas de texto, números, correos electrónicos, cargas de archivos, otras páginas, etc. Depende de usted cuántos campos contiene una página. Puede tener solo uno (por ejemplo, un campo para el título de la página), o ningún campo (no es muy conveniente), o más de 50 o 100 campos.

ProcessWire no tiene la noción de campos personalizados como WordPress, porque cada campo en ProcessWire es un campo personalizado. Crea un campo y decide qué tipo desea (vea la captura de pantalla a continuación). ¡Eso es!

ProcessWire fieldsProcessWire fieldsProcessWire fields

A un campo se le puede asignar una etiqueta, una descripción y algunas notas para obtener información adicional que aparece debajo. Cada tipo de campo tiene su propia configuración. Veamos tres tipos de campos y algunas configuraciones que puede hacer para tener una idea de esto:

  • Tipo de campo de área de texto: puede decidir si se representa como un área de texto sin formato o como un editor de texto enriquecido (CKEditor por defecto). Puede decidir qué botones deben aparecer en la barra de herramientas de CKEditor e incluso ingresar las opciones de configuración personalizadas directamente en la GUI del administrador.
  • Tipo de campo de página: puede vincular una página con otra y, por lo tanto, crear una relación entre ellas. Puede vincular una página (relación uno a uno) o varias páginas (relación uno a varios). Puede vincular una página (relación uno a uno) o varias páginas (relación uno a varios).
  • Tipo de campo de imagen: puede especificar qué tipo de imagen (extensión) se puede cargar. Puede especificar la altura y el ancho mínimos y / o máximos que debe tener para calificar para la carga.

La conclusión es esta: cada campo que crea es altamente personalizable para ajustarse exactamente a sus necesidades y a las personas que crean y editan el contenido a continuación.

Pero, ¿cómo sabe una página qué campos tiene en sí misma? Entonces, echemos un vistazo a las plantillas.

Plantillas

Cuando creas una nueva página tienes que seleccionar una plantilla. La plantilla contiene toda la información que la página necesita para conocer su contenido (qué campos tiene, cómo se representan esos campos y cómo se comportan).

A continuación se muestran los campos de la página básica de la plantilla. (basic-page)

ProcessWrite templatesProcessWrite templatesProcessWrite templates

Al hacer clic en un campo se abre una ventana modal, donde puede modificar la configuración del campo precisamente para esa plantilla.

ProcessWire tempalte attributesProcessWire tempalte attributesProcessWire tempalte attributes

Una plantilla puede tener un archivo PHP físico con el mismo nombre asociado. Estos archivos de plantilla se encuentran en /site/templates/ En un archivo de este tipo, usted escribe el código PHP y el marcado HTML que finalmente genera el contenido de la página y representa los elementos que un visitante ve en la página de su sitio web.

Si una plantilla no tiene un archivo correspondiente, una página asociada con ella no puede representarse por sí misma en la parte frontal. Eso no significa que no pueda obtener los datos de esa página y mostrarlos en otra parte; puede hacerlo utilizando un archivo de plantilla existente de otra página.

Resumamos la relación técnica entre páginas, campos y plantillas: agrega campos a las plantillas y selecciona una plantilla al crear nuevas páginas. Los campos que ve cuando edita una página son los campos que agregó a la plantilla seleccionada.

2. Tiene una API para enamorarse

El código en sus archivos de plantilla consistirá principalmente en unas pocas construcciones básicas de PHP como asignar valores a las variables, if condiciones, condiciones bucles y marcado HTML por un lado, y trabajar con ProcessWire API por otro lado.

Puedes pensar en la API como jQuery para PHP. Proporciona métodos, selectores, encadenamiento (interfaz fluida) y capacidades de desplazamiento.

La API es probablemente la cosa que más me sorprende de ProcessWire: es fácil de usar, fácil de entender, expresivo y poderoso al mismo tiempo. Pero lo más importante es que le permite desarrollarse de manera rápida y sin complicaciones, y realmente se divierte interactuando con él. Simplemente tiene sentido.

La API Cheatsheet es una gran referencia. Muestra todos los métodos disponibles con los que puedes trabajar.

ProcessWire APIProcessWire APIProcessWire API

Ahora permítame presentarle las dos variables expuestas a la API con las que lidiará más durante el desarrollo de plantillas: $page y $pages.

La variable $page

La variable $page contiene todos los campos específicos de la página que se está viendo. Esto incluye los campos incorporados, que son comunes a todas las páginas, así como los campos que son específicos de esta única página.

Pero, ¿cómo se puede acceder a los campos de una página? Vamos a sumergirnos en algunos ejemplos simples.

Muestra el contenido del campo de texto llamado title:

1
echo $page->get("title");
2
// or

3
echo $page->title;

Muestra el nombre de la plantilla de la página:

1
echo "This page is using the template: " . $page->template->name;
2
// or

3
echo "This page is using the template: {$page->template->name}";

Generar una navegación de migas de pan:

1
echo "<ul>";
2
foreach ($page->parents as $parent) 
3
    echo "<li><a href='{$parent->url}'>{$parent->title}</a></li>";
4
echo "</ul>";

Desde la versión 2.5.27 también puede escribir lo anterior como sigue:

1
echo "<ul>";
2
echo $page->parents->each("<li><a href='{url}'>{title}</a></li>");
3
echo "</ul>";

Genera una imagen solo si realmente ha sido cargada:

1
if ($page->image) echo "<img src='{$page->image->url}'>";

Nota: debe configurar el campo de imagen para que contenga una sola imagen para que esto funcione.

A continuación se muestran algunos ejemplos de cuándo un campo de imagen está configurado para contener varias imágenes.

Agarra y saca la primera imagen:

1
$image = $page->images->first();
2
3
if ($image) echo "<img src='{$image->url}'>";

Toma y saca una imagen al azar:

1
$image = $page->images->getRandom();
2
3
if ($image) echo "<img src='{$image->url}'>"; 

Recorra todas las imágenes, cree una imagen grande a un ancho de 500 píxeles con una altura proporcional y una miniatura a 100 × 100 con ajustes específicos de calidad y recorte, y luego tenga el enlace de la miniatura con la gran variante:

1
$options = array(
2
    "quality" => 90,
3
    "cropping" => "southeast"
4
);
5
6
foreach ($page->images as $image) {
7
    $large = $image->width(500);
8
    $thumb = $image->size(100, 100, $options);
9
    echo "<a href='{$large->url}'><img src='{$thumb->url}'></a>";
10
}

Nota: ProcessWire creará sus imágenes en cualquier tamaño sobre la marcha y luego mantendrá un caché de ellas.

La variable $pages

La variable $pages es una referencia de todas las páginas de su sitio. Esto le permite acceder a todo el contenido y las páginas de su sitio desde cualquier lugar que desee.

Para los siguientes ejemplos, me referiré al sitio de demostración estándar de ProcessWire que proporciona una colección de rascacielos en los Estados Unidos.

Obtener una página específica y dar salida a su título:

1
echo $pages->get("/cities/chicago/sears-tower/")->title;

Nota: /cities/chicago/sears-tower/ es la ruta completa que apunta a la página de Sears Tower en la jerarquía del árbol de páginas de ProcessWire.

Encuentre todos los rascacielos con una altura mayor a 500 pies y menor o igual a 1,000 pies:

1
$skyscrapers = $pages->find("template=skyscraper, height>500, height<=1000");

Nota: height es un campo que se encuentra dentro del skyscraper de la plantilla.

Encuentre todos los rascacielos construidos antes de 1950 con más de 10 pisos, ordenados por año descendente, luego los pisos descendentes:

1
$skyscrapers = $pages->find("template=skyscraper, year<1950, floors>=10, sort=-year, sort=-floors");

Nota: el year y los floors son campos que se encuentran dentro del skyscraper de la plantilla.

Encuentre todos los rascacielos en Chicago con más de 60 pisos, ordenados por pisos ascendentes:

1
$skyscrapers = $pages->get("/cities/chicago/")->find("floors>=60, sort=floors");

Encuentra todos los rascacielos de los arquitectos David Childs o Renzo Piano, y ordena por altura descendente:

1
$david = $pages->get("/architects/david-childs/");
2
$renzo = $pages->get("/architects/renzo-piano/");
3
$skyscrapers = $pages->find("template=skyscraper, architects=$david|$renzo, sort=-height");

Nota: los arquitects son un campo contenido dentro del skyscraper de la plantilla.

3. Está construido alrededor de una arquitectura modular y fácilmente extensible

ProcessWire consiste en un marco de núcleo pequeño (considere esto como la esencia de ProcessWire que habilita las funcionalidades básicas) y un conjunto de módulos preenvasados, que vienen con cada instalación. Algunos de estos módulos principales están instalados y otros se desinstalan de forma predeterminada. Piense en los módulos de ProcessWire como complementos de WordPress: extienden y personalizan el sistema.

La naturaleza modular de ProcessWire tiene algunas ventajas agradables:

  • El código base es más fácil de mantener porque las funciones básicas están aisladas y desacopladas de otras partes del sistema, lo que también aumenta considerablemente la seguridad general.
  • El desarrollo de nuevas funciones se está simplificando y los errores se pueden solucionar y corregir de forma mucho más sencilla y rápida.
  • Las actualizaciones a las versiones más recientes de ProcessWire o los módulos individuales son generalmente una obviedad, y no tiene que preocuparse de que, después de una actualización, todo se haya roto.

Instalación de módulos

Instalar un módulo es tan fácil como arrastrar los archivos del módulo al directorio /site/modules/ y luego hacer clic en Instalar en la GUI del administrador. Pero en realidad hay muchas más formas de instalar un módulo desde el directorio de módulos.

Por ejemplo, puede instalar el Administrador de módulos, que le permite explorar, descargar, instalar y actualizar módulos directamente en la GUI del administrador.

Cantidad de módulos: calidad por encima de la cantidad

Al momento de escribir, existen alrededor de 370 módulos para ProcessWire. Ahora puede comparar ese número con los aproximadamente 40,500 complementos de WordPress que existen, y esa comparación es realmente interesante y reveladora al mismo tiempo. Después de esto, se pueden sacar algunas conclusiones pensando en la naturaleza general de ProcessWire y sus módulos, y cómo se comparan con los complementos de otros CMS:

  • ProcessWire no es tan popular y generalizado como WordPress, Joomla, Drupal y otros.
  • Los módulos de ProcessWire son generalmente de una calidad de código bastante alta. Ellos hacen una cosa y hacen esa cosa bien.
  • El núcleo de ProcessWire en sí mismo es tan poderoso y flexible que simplemente no es necesario agregar una tonelada de módulos adicionales para extenderlo. Por ejemplo, no necesita módulos para crear presentaciones de diapositivas de la galería, módulos para obtener el primer hijo de algo, módulos para generar miniaturas, etc. Todo eso (y mucho más) ya está cubierto con las funcionalidades básicas de ProcessWire.

Ganchos

Si bien los enganches son un tema bastante avanzado, es digno de mención y muestra que la funcionalidad de ProcessWire está diseñada para ser muy fácil de modificar y extender. ProcessWire contiene cientos de métodos a los que puede conectarse para modificar el comportamiento de un método.

Digamos que hemos creado un formulario de contacto simple utilizando la API o el Generador de formularios, y algunos de los campos están marcados como lo requiere el back-end. Lo que queremos lograr es agregar también el marcado de front-end HTML5 adecuado para los campos de formulario requeridos. ProcessWire hace esto bastante fácil. Lo que queremos lograr es agregar también el marcado de front-end HTML5 adecuado para los campos de formulario requeridos. ProcessWire hace esto bastante fácil.

1
$forms->addHookBefore("Inputfield::render", function ($event) {
2
    $field = $event->object;
3
    
4
    if ($field->required) {
5
        $field->attr("required", "required");
6
        $field->label .= "*";
7
    }
8
});

4. No se interpone en tu camino y proporciona herramientas para crear interfaces personalizadas y fáciles de usar

Una de las principales cosas que a la gente le gusta de ProcessWire: no se interpone en tu camino. Se comporta de la manera que usted quiere y se ajusta a su estilo de desarrollo de un sitio web.

Por ejemplo, tiene un control completo sobre la salida del marcado y no está obligado a desarrollar una plantilla en el sistema de archivos. Si está familiarizado con el estilo de desarrollo de cosas de WordPress, puede continuar tal como está acostumbrado. O si desea crear una arquitectura más sofisticada, podría utilizar un enfoque inspirado en MVC, y funcionará igual de bien.

Como mencioné anteriormente, las páginas no tienen un conjunto de campos obligatorios para que ProcessWire entienda la estructura de una página. (Al menos no visibles. Hay algunos campos integrados, como referencias a los padres de la página o al número de hijos de la página, etc.) Si lo desea, puede colocar 100 campos en una página, ordenarlos de la forma que desee, especificar cuáles son obligatorios y cuáles no, y puede colocarlos en diferentes conjuntos de campos o pestañas para una mejor experiencia de IU.

La otra cosa importante que le gusta a la gente acerca de ProcessWire: Naturalmente, proporciona herramientas para crear interfaces personalizadas y fáciles de usar. Te di un vistazo de eso en el párrafo anterior. El nivel de personalización de las plantillas es alucinante. Una vez que haya experimentado esto, comprenderá por qué ProcessWire es más un CMF que un CMS.

Por ejemplo: Cada campo tiene un contexto específico de plantilla adjunto. Eso significa que puede especificar que uno y el mismo campo tiene una etiqueta, una descripción y un comportamiento determinados en una plantilla, y una etiqueta, una descripción y un comportamiento completamente diferentes en otra plantilla.

Otro ejemplo son las dependencias de los campos de entrada: le permiten especificar las condiciones bajo las cuales se muestra o requiere un campo particular en el editor de páginas.

Y otro ejemplo más es el módulo PageTableExtended: permite que un usuario vea, edite y modifique las diferentes partes de la página de su sitio web (que usted como desarrollador define) de una manera visual e intuitiva.

Eso para mí es la definición de elegante y profundamente empoderador.

Conclusión

Este artículo solo puede arañar la superficie de lo que puede hacer con ProcessWire y lo que tiene para ofrecer. La lista de grandes características es, simplemente, demasiado larga e iría más allá del alcance de este artículo. Déjame darte un vistazo de algunos de estos:

  • ProcessWire tiene excelentes mecanismos de almacenamiento en caché (por ejemplo, caché de plantillas y marcas o ProCache) y funciona muy bien. La escalabilidad también es bastante impresionante. Literalmente, puede tener millones de páginas en una sola instalación.
  • ProcessWire tiene una comunidad pequeña pero fantástica. El panel de discusión es el lugar central para discutir cualquier pregunta y problema.
  • ProcessWire tiene soporte multilenguaje estelar. Los módulos multilingües forman parte de los módulos básicos preempaquetados. Es muy fácil de configurar y mantener.
  • ProcessWire tiene excelentes capacidades de administración de usuarios integradas con configuraciones que son muy detalladas y fáciles de administrar al mismo tiempo. Por ejemplo, puede crear una función para los usuarios que tienen permiso exclusivo para editar campos en francés y en ningún otro idioma.
  • Hay un montón de temas de administrador que puede elegir para cambiar la apariencia de la GUI del administrador.
  • La seguridad es una prioridad para ProcessWire.
  • ProcessWire tiene una hoja de ruta transparente y el desarrollo es muy activo. Hay nuevos lanzamientos menores casi todas las semanas.

Cuanto más use ProcessWire y más internalice los conceptos centrales, la API y su arquitectura modular, más se divertirá al usarlo. Te darás cuenta de lo increíblemente poderosas que son las herramientas y los flujos de trabajo de ProcessWire. Se podría decir que lo único que lo limita a lograr cierto objetivo con ProcessWire es su propia imaginación.

Permítanme terminar citando al creador de ProcessWire, Ryan Cramer:

ProcessWire es un sistema que te recompensa por ser curioso. Nuestro objetivo es mostrarte cómo pescar para que puedas capturar peces grandes.

A dónde ir desde aquí

Enlaces útiles y herramientas alrededor de ProcessWire:

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.