The power of plugins
We just reviewed part of the functionality of the Elgg engine, but you probably noticed that there was no mention of blogging, status updates, or other features common to social networking sites. That is because these features are offered through plugins. The plugins modify or extend Elgg giving you control over what features are included in your site.
Bundled plugins
Elgg is distributed with a set of plugins which are written and supported by the Elgg development team. These are called the bundled plugins. These plugins provide enough functionality to run a basic social networking site and are a good demonstration of what is possible using Elgg's plugin system.
The bundled plugins provide a wide range of functionality. Included are content sharing plugins such as blogging, social bookmarking, and file sharing. There are plugins for user profiles, activity streams, groups, and notifications. Integration with Twitter, private messaging, search, and administrative tools are also provided through these plugins. Detailed information on the bundled plugins is included in Chapter 3, A Tour of Your First Elgg Site, Chapter 4, Sharing Content, and Chapter 5, Communities, Collaboration, and Conversation.
Third-party plugins
As an open source project, Elgg has a community of developers who build plugins for their own use and then share them with other Elgg users. These plugins are referred to as third-party plugins and many are available from the plugin repository on the Elgg website (http://community.elgg.org/pg/plugins). Some of these plugins add significant functionality to Elgg such as a photo gallery or event calendar. Others extend a bundled plugin or customize an aspect of the Elgg engine. There are hundreds of third-party plugins available. Chapter 6, Finding and Using Plugins describes a few of the best and gives advice on how to select and test any plugin.
Themes
The look and feel of Elgg is controlled by the theme. Elgg comes with a default theme that you can use. It is not a separate module that can be uninstalled, but is built into the engine. To change the theme, you install a theme plugin that overrides parts or the entire default theme. Theme plugins are installed just like other plugins and have access to the same APIs. Chapter 9 provides information on where to find themes for download, describes the components of a theme, and includes a guide to creating your own.
Building your own plugins
You can build your own plugins to customize or extend Elgg. Writing a simple plugin requires either basic knowledge of (or the motivation and persistence to learn) both PHP and HTML. An example of a simple plugin is one that changes the word "blog" to "report" in the blog plugin's menus and page titles. Creating a plugin that does this is quite easy to write. There is a tutorial in Chapter 8, Customization Through Plugins that shows how this can be done.
A more complicated plugin is one that modifies how Elgg handles the creation of "friend" relationships. Elgg's default model is that any member can friend any other member without requiring a confirmation. A one-way relationship is formed, meaning that the fact that I am your friend does not imply that you are my friend. This is consistent with Twitter's model of followers. For your social networking application, you may want two-way relationships that require confirmation as Facebook does. The plugin would hook into Elgg's engine and change the relationship creation process. A reciprocal friendship plugin like this is available in the Elgg community plugin repository.
With the right development skills, you could also write a plugin that adds a significant new capability to Elgg or integrates Elgg with another open source web application. Elgg's plugin API is quite powerful so the only limitations to what you can build are your skills, time, and creativity.