I’m working on a custom CMS for my own use and was thinking about implementing a plugin system so I could extend the code a little easier. I’m having trouble conceptualizing the architecture and layout though.
I know I could go through a few open source programs that implement similar features but this is really just academic at this point so I really don’t want to spend too much time digging through foreign code.
Does anyone have any good ideas of how to proceed? If someone could outline how some of the more popular programs do it that’d be perfect.
- Define the functionality you want the plugins to plug into (ie, what will they do and over what)
- Define a class hierarchy on which plugins fit, like, all article mangling plugins should inherit from ArticleMangler
- Define a physical location for plugins, like /plugins
- Import all plugins present in the location
- Use either Decorator or Observer patterns to inject the plugin’s behavior or to notify the plugins of events occurence. Strategy might be applicable in some cases as well.
PHP makes this fairly easy at a potential cost of making a mess if you’re not careful. I like the Observer method where plugins register themselves to a plugin manager which notify them of what happened and wait for their action to happen.
If you don’t trust plugins then you’d have to put add controls over which events you are going to allow any plugin to register for.