A software framework is a reusable design for a software system (or subsystem). This is expressed as a set of abstract classes and the way their instances collaborate for a specific type of software. Software frameworks can be object-oriented designs. Although designs do not have to be implemented in an object-oriented language, they usually are. A software framework may include support programs, code libraries, a scripting language, or other software to help develop and glue together the different components of a software project. Various parts of the framework may be exposed through an application programming interface (API).
From http://docs.joomla.org/Framework
Joomla! 1.5 is implemented on a software framework that provides far greater flexibility, security, and extensibility than ever before. The Joomla! 1.5 framework is comprised of three layers or tiers. The Framework layer provides the core functionality upon which the upper layers depend, the Application layer contains applications that extend the core framework functionality, and the Extension layer adds specific functionality to the basic system.
The Framework layer provides core functionality through an extensive set of libraries, plugins, and the Joomla! framework.
Many, but not all, of the libraries provide Joomla! with required functionality that was originally developed and distributed by third-parties for general use, not specifically for Joomla!.
The following table details the base libraries that are included in Joomla!:
Library |
Description |
License |
---|---|---|
archive |
TAR file management class (www.phpconcept.net) |
PHP License 3 |
bitfolge |
Feed and vCard utilities (www.bitfolge.de) |
GNU LGPL |
domit |
DOM (Document Object Model) XML Parser (www.phpclasses.org/browse/package/1468.html) |
GNU LGPL |
geshi |
Generic Syntax Highlighter (qbnz.com/highlighter) |
GNU GPL |
joomla |
Core Joomla! library |
GNU GPL |
openid |
Remote login management (www.openidenabled.com) |
GNU LGPL |
pattemplate |
Template handling (www.php-tools.net) |
GNU LGPL |
pcl |
Archive handling (www.phpconcept.net) |
GNU GPL |
pear |
PHP Extension and Application Repository (pear.php.net) |
Mixed |
phpgacl |
Generic Access Control (phpgacl.sourceforge.net) |
GNU LGPL |
phpinputfilter |
Filter out unwanted PHP / Javascript / HTML tags (www.phpclasses.org/browse/package/2189.html) |
GNU GPL |
phpmailer |
Class for sending email using either sendmail, PHP |
GNU LGPL |
phputf8 |
UTF8 and ASCII tools (phputf8.sourceforge.net) |
Mixed |
phpxmlrpc |
XML-RPC protocol (phpxmlrpc.sourceforge.net) |
Special |
simplepie |
RSS and Atom reader (simplepie.org) |
GNU LGPL |
tcpdf |
PDF generator that does not require additional libraries (tcpdf.sourceforge.net) |
GNU LGPL |
The framework consists of a comprehensive set of classes that provide core functionality. A list of many of the Joomla! classes can be found in the Appendices or you can browse the Joomla! Framework at http://api.joomla.org. Classes that make up the framework are loosely grouped into packages for easier classification and identification.
The packages that make up the framework are listed in the following table:
Package |
Description |
---|---|
Application |
|
Base |
Base classes |
Cache |
Cache classes |
Client |
FTP and LDAP classes |
Database |
|
Document |
Classes for creating and rendering pages |
Environment |
URI, Request/Response handling, and browser classes |
Error |
Error handling, logging, and profiling classes |
Event |
Dispatch and Event classes |
Filesystem |
Classes supporting file access |
Filter |
Input and output filter classes |
HTML |
Classes for rendering HTML |
Installer |
Classes for installing extensions |
Language |
Language translation classes |
|
e-mail related classes |
Plugin |
Core Plugin classes |
Registry |
Configuration classes |
Session |
User session handler and storage of session data classes |
User |
Site user classes |
Utilities |
Miscellaneous classes |
In addition to the packages, the framework includes the core JFactory
and JVersion
classes.
Plugins extend the functionality of the framework. Joomla! comes with eight core groups of plugins, each designed to handle a specific set of events.
The following table describes the different core plugin types:
Plugin Type |
Description |
---|---|
authentication |
Authenticate users during the login process |
content |
Process content items before they are displayed |
editors |
WYSIWYG editors that can be used to edit content |
editors-xtd |
Editor extensions (normally additional editor buttons) |
search |
Search data when using the search component |
system |
System event listeners |
user |
Process a user when actions are performed |
xmlrpc |
Create XML-RPC responses |
In addition to the core plugin types, we can define our own types. Many components use their own plugins for dealing with their own events. Plugins will be discussed in detail in Chapter 7, Plugin Design.
The Application layer extends the core JApplication
class with applications designed for managing and performing specific tasks.
The JInstallation
application runs when you install Joomla!. After successfully installing Joomla!, you are required to remove the installation folder, which contains the JInstallation
application, before proceeding. The installation of extensions (components, modules, plugins, templates, and languages) is accomplished using the install functionality of the JAdministrator
application.
The application for the Joomla! Administrator is JAdministrator
. This application directs all of the backend administrative functions.
The application that is responsible for composing and delivering the frontend pages is JSite
.
A Joomla! website can be administered remotely by using the XML-RPC application.
The Extension layer extends the Joomla! framework and applications, specifically with components, modules, templates, and languages. Plugins are also extensions but are placed in the Framework layer because they extend the framework, not applications. Joomla! is installed with a set of extensions including components for both the frontend and backend applications, templates, and modules.