|This article relies too much on references to primary sources. (November 2016) (Learn how and when to remove this template message)|
3.0.62 / May 12, 2017
|Operating system||Cross-platform, PHP/MySQL required|
|Available in||English, others as contributed|
|Type||Content Management System|
|License||Mozilla Public License 2.0|
- jQuery-styled API with comprehensive documentation
- Graphical web-based installer
- All fields are custom fields, indexed for find operations in the API
- Can be bootstrapped from other PHP applications or command-line scripts
- Interactive and API-based image manipulation functions
- Drag-and-drop tree-based page list
- Drag-and-drop file and image uploads and editing functions
- Support for larger scale (100k+ page) installations
- Use of string-based selectors for API calls
- Role-based access control system
- Core development emphasis on security
- Markup agnostic output, leaving all output to the developer
- Template files are PHP-based, with no template engine used by default
- Output caching of entire pages or individual parts
- Multi-language support with multi-language text fields and URLs
- Modular plugin architecture and available 3rd party modules
- Field and input types are themselves plugin modules
- Hook system enabling most core functions to be hooked and altered
- Fields and groups of fields are repeatable using built-in Repeater field types
- Support for rich text editing using CKEditor
Before and during development of a website or application, the audience for ProcessWire consists largely of web developers and web designers. Within this audience, ProcessWire is used as both a development tool and a CMS.
Post-development the audience changes to individuals that manage content for web sites and applications, who typically are not web designer/developers. This audience uses ProcessWire primarily as a CMS to manage content.
ProcessWire has been in active development since 2003. From 2003 to 2007 it was developed under the name Dictator CMS. From 2007–2010 it was developed as ProcessWire 1.x. ProcessWire became an open source community project in 2010 and it is currently developed as ProcessWire 2.x and 3.x.
ProcessWire has had 8 significant version releases, and more than 100 minor version releases since the first open source release. Version 3.0 released in September 2016 is the second major version release.
Translations and community
ProcessWire has active, global end-user and developer communities. These communities have translated ProcessWire from English into their native languages, including: Chinese, Croatian, Czech, Dutch, French, German, Greek, Hebrew, Hungarian, Italian, Japanese, Portuguese, Russian, Slovak, Spanish, Swedish, Turkish and Vietnamese. The central hub of the ProcessWire communities are found in the developer support forums.
Awards and publications
In November 2016 ProcessWire was awarded as CMS Critic's Best Small Business CMS.
In January 2015 ProcessWire was awarded as CMS Critic's Best Free PHP CMS.
In December 2012 ProcessWire was awarded as CMS Critic's Best Free CMS.
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 defines the architecture of ProcessWire. 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.
Templates in ProcessWire are a content type that contains one or more custom fields representing the definition of the content type. Every page in ProcessWire is assigned to a template which then represents the type of page. A template is typically shared among multiple pages. Templates also define access control, caching and other settings shared among pages using the template.
Templates optionally have an associated PHP file, referred to as the template-file. This file is executed whenever the URL for a page using the template is accessed. As a result, template-files are typically used for output purposes. The template-file is provided with several API variables, the most notable being the
$page API variable, which contains all the fields and content of the current page being viewed.
Template-files serve multiple contexts, depending on the application. ProcessWire's default web site profiles use template-files primarily for output of direct and dynamically generated HTML markup. Template-files may also be used as intermediate controllers between a 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.
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 content 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 fieldtype modules including those that support text, numbers, files, images, page references, URLs, email addresses, dates and comments. Additional fieldtype modules are installed as 3rd party modules.
Distribution and requirements
- "ProcessWire master version reference". Processwire.com. 2017-05-12. Retrieved 2017-05-12.
- "The concept behind the API".
- "ProcessWire API reference documentation".
- "Bootstrapping ProcessWire".
- "Selectors in ProcessWire".
- "ProcessWire Security".
- "Multi-language support".
- "Directory of modules".
- "ProcessWire Hooks".
- "ProcessWire community".
- "ProcessWire history and background".
- "ProcessWire 3.0 changelog".
- "CMS Critic 2016 awards (November 2016)".
- "Smashing Magazine: A Beginners Guide to ProcessWire".
- "Envato Tuts+: ProcessWire tutorials and articles".
- "CMS Critic Best Free PHP CMS award (January 2015)".
- "ProcessWire published in PHP Architect Magazine (December 2014)".
- "CMS Critic Best Free CMS award (December 2012)".
- "The $page API variable".