Puny - Lightweight content editor for Balance applications ========================================================== Puny is a lightweight content editing module for Balance applications. Puny makes it easy for developers to add user-editable sections of content to their application views and supports real-time, in-place editing of the content. Overview -------- Puny makes it easier to separate content from presentation and separate the role of the site developer and the content manager. As its name implies, it provides the bare minimum necessary to accomplish this -- based on the understanding that excellent, full-fledged Content Management System options are readily available and more appropriate for content-heavy sites. Puny simply provides a way for sites that are not generally suited to a CMS to nevertheless reap the benefits of real-time, in-browser content editing by a user not intimately familiar with HTML. How it Works ------------ Developers embed 'containers' in their views, and content editors provide the content that get displayed in the containers. Puny loads up the most recent version of the content from the data store, renders it using the specified parser, and places the rendered text into the view container. By logging in with the editor credentials, a user can visually see the editable 'containers' on the application views, and, using a javascript-enabled browser, can provide inline, real-time edits, creating a new version of the content. ### Flexibility ### Puny has been designed so that it is easy to plug in custom back end data stores (MySql, MongoDB, SQLite, etc) and template engines (Markdown, Textile, bbcode, etc). If a driver for doesn't exist, there are two primary extension points: Puny_DataStore (a base class for developing drivers for data stores), and Puny_Parser (a base class for interfacing with text parsers and template engines). Using the examples in the /classes/data and /classes/parsers, it should be relatively easy to develop additional drivers. Installation ------------ Copy the Puny module (this directory) to the /modules directory of your Balance application. Configuration ------------- All configuration for Puny takes place in the module's 'config.ini' file. See the inline documentation in 'config.ini' for detailed information about each configuration option. Developer Guide --------------- ### Including Puny in your application In general, Puny needs to be available on each application view. To avoid having to load the module at the top of each view, it is possible to include the module once,in the Balance index.php at the root of your application. Simply add the following lines to the 'index.php' file where it says 'Initialize any globally required modules here': // Puny initialization App::Get()->loadModule('puny'); require_once(App::Get()->settings['puny_module_path'] . '/classes/Puny.class.php'); ### Installing your data store ### Look in the /schemas folder in the Puny module for a schema compatible with your datastore driver. Install the schema using whatever method is most appropriate for the technology. The default driver is the PDO driver implemented in ./classes/data/Puny_PdoDataStore.class.php. The MySQL schema compatible with this driver is in ./schemas/puny.pdo.mysql.sql. Copy this file and import it into the database you configured in the configuration step above. ### Including Puny containers in your application views ### The easiest way to include Puny containers in your application views is: load('resourceid');?> By default, container creates a '
' element and loads the content into it. To use something other than a '
' simply specify the html element to the container() function: load('resourceid');?> It is also possible to specify arbitrary attributes to attach to your container. Examples include a DOM id, CSS class(es), style attribute, alt, rel, or anything else. This is accomplished by passing an associative array as the second parameter to container() where the array keys are the attribute names, and the values are the attribute values. 'mydiv','class'=>'foo bar'))->load('resourceid');?> ### Allowing editors to log in and edit ### Somewhere in your application, there should be a login link that allows editors to log in and make edits to content. This is easily accomplished by adding the following line wherever you want the login link to appear: This will display either a login or logout link, depending on whether or not an editor is currently logged in. That's all there is to it, it lives up to its name.