ProcessWire
Developer(s) | Ryan Cramer |
---|---|
Stable release | 2.7.2[1] / December 11, 2015 |
Written in | PHP |
Operating system | Cross-platform, PHP/MySQL required |
Available in | English, others as contributed |
Type | Content Management System |
License | Mozilla Public License 2.0 |
Website |
processwire |
ProcessWire is an open source content management framework (CMF) and content management system (CMS) written in the PHP (5.3+) programming language. It is distributed under the Mozilla Public License 2.0. ProcessWire is built around an API loosely inspired by syntax used in the JavaScript framework jQuery.[2] The goal behind the API is to provide the level of accessibility and control to a site's page content that jQuery provides to the DOM.[3]
While originally developed purely as a CMF,[4] ProcessWire is currently distributed as a combined CMF and CMS, with the CMS portion providing an administrative control panel for web-based management of content.
ProcessWire focuses on being markup agnostic, leaving output to the user. In this manner, the framework is intended to provide flexibility for output in web sites, web services and related applications. The goal was to let the individual site drive the direction of the output, rather than tailor a site around existing generated CMF/CMS output.[5]
Features
- jQuery-inspired API
- Graphical web-based installer
- Rich text editor (using CKEditor[6])
- All fields are custom fields and are indexed for fast searches
- Can be bootstrapped from other PHP applications or command-line scripts[7]
- Both interactive and API-based image manipulation functions
- Drag-and-drop tree-based page list
- Drag-and-drop file and image uploads
- PHP5 object-oriented code
- Built-in pagination
- Search engine friendly URLs
- Selectors in the API for finding pages by field value
- Role-based access control
- Template-level and custom markup-level caching
- Hierarchical URLs
- Markup agnostic output
- Multi-language support
- Modular plugin architecture
- Fieldtypes are plugin modules
- Extensive hook system covering most core functions
- User profiles are configurable templates
- Support for larger scale (10k+ page) installations
- Google Maps and Google Calendar integration modules
- RSS publishing and loading modules
- Templates are PHP-based
- Fields and groups of fields are repeatable (using the Repeater fieldtype)
- Field dependencies (2.4+)
History
ProcessWire has been developed by Ryan Cramer since 2003. From 2003 to 2007 it was developed under the name Dictator CMS.[8][9] From 2007–2010 it was developed as ProcessWire 1.x,[10] and from 2010 to now, it has been developed as ProcessWire 2.x.
While similar to past versions, ProcessWire 2.x was built from scratch purely as an open source content management framework. The admin control panel was later added on as an application built in the framework, and now serves as ProcessWire CMS.
Prior to version 2.x, ProcessWire was closed-source. All past versions of ProcessWire are architecturally similar in look and use, though Dictator CMS (2003) lacked the API that is one of the most notable features in ProcessWire 1.x and 2.x.[11]
In 2008, a small portion of ProcessWire 1.x was released as a jQuery plugin called [12] asmSelect. This plugin was the basis for multi-page reference selection in ProcessWire 1.x and has since been adopted by other CMS platforms (notably as a Drupal CCK node reference module[13]).
The first open source release of ProcessWire was version 2.0, released in October, 2010.[14] The second open source release, ProcessWire 2.1, was released in October 2011 and marked the first collaborative effort as other developers contributed to it. Most notable was Antti Peisa's work with the AJAX file uploading capabilities.[15] Version 2.2, released in January, 2012, brought multi-language support to ProcessWire and was the first version with corporate sponsorship (by a Finnish web company called Avoine).[16]
ProcessWire has received the following awards from CMSCritic.com:
Architecture
ProcessWire is built around a page content tree (as opposed to a bucket system). The URL or path of each page is always reflective of its place in the hierarchy. One uses this same path to reference the page in the API. As a result, this connection of the path to the internal tree hierarchy is important to the architecture of ProcessWire.[19] Beyond the parent-child relationship implied by a content tree, ProcessWire supports relational one-to-one and one-to-many references between pages in the tree.[20]
Template System
Templates in ProcessWire represent a data type, group settings and a PHP controller file. Every page in ProcessWire is assigned to a template, and a template may be shared among multiple pages. The template is used as a data type and contains the definition of fields used by the pages assigned to it. It is also the source of access control, caching and other settings shared among pages.
Every template has an associated PHP file, referred to as the template-file. This file handles the behavior for any pages assigned to the template. The template-file is provided with several API variables that may be used in generating this behavior. The most notable is the $page
API variable, which contains all the data (dereferenced by field name) of the current page being viewed.[21]
Template-files serve multiple contexts, depending on the application. ProcessWire's default web site profile uses template-files primarily for output of direct and dynamically generated HTML markup. Template-files may also be used as intermediate controllers between the model and a separate view. Because template-files are regular PHP files, they are able to call upon other web services or PHP applications where appropriate, without a separate parsing layer.
Fields
All fields in ProcessWire are custom fields defined by the user. A given field may be assigned to multiple templates, which in turn hold individual chunks of data for each page using that template. Every field has a type, referred to as the fieldtype (1 word), a type of plugin module. ProcessWire includes several fieldtypes including those that support text, numbers, files, images, page references, URLs, email addresses, dates and comments. Additional fieldtypes are available as 3rd party modules.
Requirements
- A Unix or Windows-based web server running Apache.
- PHP version 5.3.8 or greater with PDO database support.
- MySQL 5.0.15 or greater.
- Apache must have mod_rewrite enabled and support .htaccess files.
External links
References
- ↑ "ProcessWire 2.7.2 master and 3.0.2 devns". Processwire.com. 2015-12-11. Retrieved 2016-01-08.
- ↑ "Article from CMSWire on ProcessWire".
- ↑ "The concept behind the API".
- ↑ "Post by author describing origins as a CMF".
- ↑ "Video of Ryan Cramer speaking about ProcessWire being markup agnostic and the goals behind it".
- ↑ Koivula, Teppo; Cramer, Ryan (26 Jul 2014). "ProcessWire weekly #11".
- ↑ "Overview of the bootstrap system".
- ↑ "Timeline cited from Dictator".
- ↑ "ProcessWire Background/History".
- ↑ "ProcessWire 1.x".
- ↑ "Post that introduces ProcessWire's API (1.x)".
- ↑ "asmSelect".
- ↑ "CCK Node Reference ASM Select".
- ↑ "Entry announcing ProcessWire 2".
- ↑ "Video demonstrating drag-drop file uploads and copy references Antti Peisa".
- ↑ "Post citing release of ProcessWire 2.2".
- ↑ "ProcessWire awarded Best Free CMS by CMSCritic.com".
- ↑ "2014 Critics' Choice Award Winner - Best Free PHP CMS".
- ↑ "Comments below the post include discussion from Ryan Cramer on the importance of the content tree".
- ↑ "Video demonstrating relational references in ProcessWire 1.x".
- ↑ "Discussion of the $page API variable".