Kajona is a PHP based content management framework, released and developed as an open source project using the GNU Lesser General Public License. The system requires a relational database system such as MySQL, PostgreSQL or SQLite. Due to the abstraction of the database provided by Kajona's database-layer, nearly all relational database systems can be connected. Kajona uses UTF-8 to store its content, resulting in a system suitable for international websites. Since the system is written as a framework, external developers are able to enrich the system with new functionalities using one of the many hooks / plugin concepts Kajona provides. There are HotSpots for nearly every aspect such as for widgets, search plugins, elements or modules.

Features

Kajona ships with a set of modules and page-elements by default, including a comprehensive page-management (including a WYSIWYG editor for in-site-editing), navigation management, a search-module and image-elements including the support of on-the-fly image manipulations such as resizing or cropping images. Due to the extensibility, additional modules and elements may be added or removed from existing installations. A complete list of modules may be obtained from the project's website. Besides English and German, the backend is also available in Russian, Portuguese, Swedish and Bulgarian. A review of the functions and the system was also published on the (German) content manager portal contentmanager.de.

Kajona

Usability

The system itself is separated into two main areas: The administration backend and the portal. While the backend is used to maintain the website, the portal is used to show the contents to the websites' visitors. Compared to other CMS, Kajona is based on a page-centric approach. This means that content is placed on a page directly instead of using a complex article management linking the articles to a single page.

Kajona

Editing content is possible either via the backend or via the portal-editor.

Kajona

Portal-Editor

The portal-editor is shown to users with edit-permissions when browsing the website (the portal). The editor is integrated into two separate ways: In-page-editing: Accessible via a link when hovering an editable element: The portal-editor is shown as an overlay, on top of the portal-page. The editor allows to change, edit and delete the element using the functionality of the backend while still being shown in the portal. In-site-editing: Accessible directly on the page. The user is able to click into the element (e.g. a paragraph) and start to change the content right in the final layout. Markup-toolbars appear as soon as the edit-process starts. The changes are saved on the fly, so the user may focus on changing the contents completely.

Architecture

Kajona is separated in several layers, providing a separation of concerns. The database-layer can be used with nearly every relational database-system. By default, the system ships with drivers for MySQL, MariaDB, MySQL, MySQLi, PostgreSQL, Oracle and SQLite (as on 01/13).

The business-logic layer consists of a number of business objects, each representing a single entity within the system, e.g. a page or an image. The layer provides the logic to handle those objects including CRUD operations. The system handles the lifecycle of each object, including the logic to update or insert new object and synchronizing the objects with the database-layer.

Since the presentation-layer only makes use of the business objects, there is absolutely no database-knowledge required when working with the presentation. In addition, the presentation-layer contains the controller, triggering all further actions within the framework.

Kajona uses a template engine in order to render the layout. The engine provides a way to separate layout from content and differentiates between page and template-elements. This results in a flexible way to create layouts and provides a way to reuse templates. The templates are enriched with placeholders, later being filled with the contents provided by the business objects. Since all generated content is cached, the system delivers the pages out of the cache after the initial generation. Templates can be used for the frontend and the (administrative) backend.

Permissions are granted using a hierarchical structure, providing the possibility to inherit the settings from a parent-node.