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 contenido (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 CMS 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..
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.
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, déjame presentarte páginas, campos y plantillas.
En la página de inicio de su instalación de ProcessWire, verá un árbol de página jerárquico único:
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 frontal abriendo tu-dominio.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 grupo principal para otras páginas. Se pueden utilizar como categorías, etiquetas o listas o usuarios. E incluso se pueden usar para simples selecciones desplegables, solo para proporcionar una etiqueta y valor..
Abramos y editemos la página “Acerca de” mencionada anteriormente..
Ahora está viendo el siguiente concepto central de ProcessWire: campos.
Las páginas contienen campos. Pero los campos tienen que ser vistos desde dos ángulos diferentes. Ópticamente son parte de la página, porque cuando abres una página ves campos con los que puedes trabajar. 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 colocas los datos o desde los que seleccionas los datos, como texto, áreas de texto, números, correos electrónicos, cargas de archivos, otras páginas, etc. Depende totalmente de 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!
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:
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 de la siguiente manera:.
Pero, ¿cómo sabe una página qué campos tiene en sí misma? Así que echemos un vistazo a las plantillas..
Cuando creas una nueva página tienes que seleccionar una modelo. 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).
Abajo puedes ver los campos de la plantilla. página básica
.
Al hacer clic en un campo se abre una ventana modal, donde puede modificar la configuración del campo precisamente para esa plantilla.
Una plantilla puede tener un archivo PHP físico con el mismo nombre asociado. Estos archivos de plantilla se encuentran en / sitio / plantillas /
. En un archivo de este tipo, usted escribe el código PHP y la marca 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 se puede representar en la parte frontal de manera independiente. 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.
El código en sus archivos de plantilla consistirá principalmente en unas pocas construcciones básicas de PHP como asignar valores a las variables, Si
condiciones, para cada
bucles y marcado HTML por un lado, y trabajar con la API de ProcessWire 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 lo 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 te permite desarrollarte de manera rápida y sin complicaciones, y realmente tienes divertido interactuando con ello. Simplemente tiene sentido.
La API Cheatsheet es una gran referencia. Muestra todos los métodos disponibles con los que puedes trabajar..
Ahora permítame presentarle las dos variables expuestas a la API con las que lidiará más durante el desarrollo de la plantilla: $ página
y $ paginas
.
los $ página
La variable 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.
Salida el contenido del campo de texto denominado título
:
echo $ page-> get ("título"); // o echo $ page-> title;
Muestra el nombre de la plantilla de la página:
echo "Esta página está usando la plantilla:". $ página-> plantilla-> nombre; // o echo "Esta página está usando la plantilla: $ page-> template-> name";
Generar una navegación de migas de pan:
eco "
Desde la versión 2.5.27 también puede escribir lo anterior como sigue:
eco "
Genera una imagen solo si realmente ha sido cargada:
si ($ page-> imagen) echo "";
Nota: tiene que configurar el campo de imagen para que contenga solo una imagen para que esto funcione.
A continuación se muestran algunos ejemplos de cuándo un campo de imagen está configurado para contener múltiples imágenes..
Agarra y saca la primera imagen:
$ image = $ page-> images-> first (); si ($ imagen) echo "";
Toma y saca una imagen al azar:
$ image = $ page-> images-> getRandom (); si ($ imagen) echo "";
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:
$ options = array ("calidad" => 90, "recorte" => "sureste"); foreach ($ página-> imágenes como $ imagen) $ grande = $ imagen-> ancho (500); $ pulgar = $ imagen-> tamaño (100, 100, $ opciones); echo "url">";
Nota: ProcessWire creará sus imágenes en cualquier tamaño sobre la marcha y luego mantendrá un caché de ellas..
los $ paginas
variable es una referencia de todas las páginas en su sitio. Esto le permite acceder a todo el contenido de su sitio y las páginas 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:
echo $ pages-> get ("/ cities / chicago / sears-tower /") -> title;
Nota: / ciudades / 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:
$ skyscrapers = $ pages-> find ("template = skyscraper, altura> 500, altura<=1000");
Nota: altura
Es un campo contenido dentro de la plantilla. rascacielos
.
Encuentre todos los rascacielos construidos antes de 1950 con más de 10 pisos, ordenados por año descendente, luego los pisos descendentes:
$ skyscrapers = $ pages-> find ("template = skyscraper, year<1950, floors>= 10, sort = -year, sort = -floors ");
Nota: año
y pisos
son campos contenidos dentro de la plantilla rascacielos
.
Encuentre todos los rascacielos en Chicago con más de 60 pisos, ordenados por pisos ascendentes:
$ 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:
$ david = $ pages-> get ("/ architects / david-childs /"); $ renzo = $ pages-> get ("/ architects / renzo-piano /"); $ skyscrapers = $ pages-> find ("template = skyscraper, architects = $ david | $ renzo, sort = -height");
Nota: arquitectos
Es un campo contenido dentro de la plantilla. rascacielos
.
ProcessWire consiste en un marco de núcleo pequeño (considere esto como la esencia de ProcessWire que permite 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:
Instalar un módulo es tan fácil como arrastrar los archivos del módulo a la / site / modules /
directorio y luego haciendo clic Instalar en la GUI de administración. 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..
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:
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. Simplemente conectamos el método de procesamiento de los campos de entrada y definimos lo que queremos personalizar: pregunte si el campo es obligatorio, agregue el atributo de front-end deseado y ponga un asterisco al final de la etiqueta de entrada.
$ forms-> addHookBefore ("Inputfield :: render", function ($ event) $ field = $ event-> object; if ($ field-> required) $ field-> attr ("required", "required" ); $ field-> label. = "*";);
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 desea 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 incorporados, como referencias al padre de la página o al número de los hijos de la página, etc.) Si lo desea, puede poner 100 campos en una página. desea, especifique cuáles son necesarios y cuáles no, y puede colocarlos en diferentes conjuntos de campos o pestañas para una mejor experiencia de interfaz de usuario.
La otra cosa importante que a la gente le gusta 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 en 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 su página web (que usted como desarrollador define) de una manera visual e intuitiva..
Eso para mí es la definición de elegante y profundamente empoderador..
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:
Cuanto más use ProcessWire y más internalice los conceptos centrales, la API y su arquitectura modular, más se divertirá al usarlo. Se dará cuenta de lo increíblemente potentes que son realmente las herramientas y los flujos de trabajo de ProcessWire. Se podría decir que lo único que lo limita a lograr un determinado 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..
Enlaces útiles y herramientas alrededor de ProcessWire: