Podius |
Content Management System |
||||||||||
| |||||||||||
Main FeaturesContents General_Info | Multiple_projects | DBMS_independent | Component_Architecture | Component_collections | Component_caching | Component_Property_Mapping | Concurrency | Static_Publishing | Dynamic_Publishing | Multilingual_support | Notification_mechanism | Exception_mechanism | Scriptability | General_utilities General InfoPodius software is Content Management System, which includes object persistence layer, component architecture and publishing infrastructure for web-oriented projects. Podius software is written entirely in Perl and has no dependencies, it should run out of the box on any operating system with perl 5.6 or better installed. Multiple projectsPodius provides a base for other projects. Using an included set of scripts it is easy to create and configure a new project. Projects may inherit from each other, reusing the code and structure. For example, NewsWebMgmt project inherits from the base podius project. Like its parent, NewsWebMgmt is also abstract, it defines a common infrastructure (business object definition, code, templates and translations) used for deploying News Web Management projects. Concrete projects VirtualLand, DailyJournal and IsraelTourismGuide inherit from NewsWebMgmt. DBMS independentCurrently 3 types of Persistence Media are supported:
All three support transactions and concurrency. Communication with RDBMS is done using DBI interface; tested with PostgreSQL®, Oracle®, Access®. Communication with ODBMS is done using the custom interface; tested with Versant®. Component ArchitecturePodius implements a powerful architecture slightly resembling Java Beans. Persistent objects are called components. Components have a list of named properties. Super-class hierarchies of both component classes and property classes are designed to be highly reusable. Supplied Component types are:
Supplied Property types are:
New component classes and property classes can be easily added. In fact, it is recommended to define custom component types for every new podius project, by inheriting from existing component classes. Component collectionsAmong other useful property types, component collections play a special role. There is support for 3 different types:
ComponentCollection properties define a tree of components. VComponentCollection define other non parent relationships. RComponentCollection is a subtype of VComponentCollection, it is managed automatically and represents matching reversed relationships of the component. All component collections are accessible using Component Iterator interface. Component Iterators provide convenient sequential or direct access to enclosed components, and several useful foreach-like, filtering and sorting methods, plus addition, moving, deletion and other operations on component collections. Component cachingOne of the strong sides of Podius is Component Cache. This is a full featured fixed size cache of components (the size is configurable and can be unlimited if there is no limitation on memory usage). Components once accessed are usually remain in the cache until there is a place, or the cache is explicitly freed. The Component Cache is also Component Manager, it manages loading, saving and deletion of components. It also handles high level transactions and interfaces with low level Persistence Medias using Component Property Mapping. Once a persistent component is requested, it is created with no properties, and a lazy property loading is applied. Properties can be configured to compose proxy groups; if one property from a proxy group is accessed the whole group is loaded. For optimization reasons if the property is requested from a component in the component collection, this property will be loaded (and cached) for all components in the last requested bunch of components (from a component collection); this optimization feature may be turned off. A minimal required set of changes is applied on component saving, i.e. on transaction commit or component swapping. Component Property MappingAll component property types can be freely mapped to native types supported by Persistence Medias. For example, the component collection property type, which is technically a list of component ids, can be mapped to a comma-separated string field, to a separate table (one id per row), to a field list, where the number of fields and the chunk size is configurable, to a native string-array type (some RDBMSes may support this), to a native object-array type (ODBMSes should support this) and so on. Component and Property classes are high level classes, which are not aware of any persistence aspect. Component Property Mapping enables to map property types or individual named properties in component types to abstract data types, which are translated by Persistence Medias to the actual DBMS data types. Changing of a mapping is easy; it is suggested to choose an appropriated mapping before starting a production system, but a mapping can be replaced even in this case using "dump & restore" technique. ConcurrencyPodius software enables a read and write access to persistent components concurrently from several clients. If user A changes one property, B changes another property, an automatic merging is occurred without a conflict. If they change the same property, there is a conflict and the second client triggers a merge callback, where one of 4 things (actually more) may happen: leave the local property value, leave the remote value, try to merge automatically, set a completely new value. Static PublishingEvery component can be represented on the web (published). Podius implements a powerful template system used to publish components. The template language is a regular HTML or plain text enhanced with directives enabling to navigate to related components in the tree of components, access their properties, iterate over them, call user defined functions, use automatic stash variables and more. Speaking in MVC terms, components are your site model, template parsers are (usually) one direction controllers, and published pages are views. It is possible to define several views for the model. For example, article objects may be published into two pages each, the full content and the summary; and some article parts may be also included in their sections and static search result pages. Articles with the long content may be divided into several continuation pages. Dynamic PublishingThis technology is similar to Static Publishing, but is intended for sites with user-based dynamic contents, where the actual publishing should occur on visit-time. There is a support for user authentication, personalization, and many aspects of Dynamic Publishing can be customized. Note: a good alternative to dynamic publishing is using static publishing together with a dynamic html technology, like Apache::ASP. Then templates may be published into asp pages with parts statically generated on publish-time and parts containing perl code that works with components on visit-time. Multilingual supportTo support informational systems operating in two or more languages concurrently, there is a support for Multilingual component types and Multilingual property types. This allows to define language-agnostic properties and synchronize appropriated components (language clones) in all languages. In addition, there is a translation infrastructure to translate the interface strings or long texts or emails into any number of natural languages. Notification mechanismChanges in component properties activate notifiers listening to them. Observers may be assigned to all component properties, given a property name, type or other pattern; supported observables are: property modification, adding or removing from component collection properties and more. This notification mechanism makes it possible to write an interactive GUI on top of the persistent layer. In fact, there are several kinds of GUI's including thin and thick clients, some of them may become open source. Exception mechanismExceptions are used to raise an error or a message up. It is possible to catch exceptions like 'No component', 'File system error' and more. ScriptabilityA set of administration scripts is included making it is easy to manage a project from a command line: scripts for creating a new project, for checking a project work-ability, scripts for managing RDBMS tables, ODBMS classes or FileBased data, scripts showing the component tree or a component content, scripts dumping and restoring component trees (replication), scripts for publishing and more. A large number of provided example scripts may help to write automatic tools manipulating the project data. General utilitiesPodius contains several perl modules for general use. This includes powerful Exception and Debug modules providing the consistent API for all other Podius perl modules, a convenient File::Operations module, a perl-based-configuration parser, several arbitrary-perl-data encoders / decoders / dumpers, a WikiText parser, a date formatter and string list formatters. | |||||||||||
| Standard conformance of HTML and CSS | Powered by Podius | ||||||||||