Creating a module is a good way to re-use abstract code and templates across multiple projects. SilverStripe already has certain modules included, for example “sapphire” and “cms”. These three modules are the core functionality and templating for any initial installation. If you're wanting to add generic functionality that isn't specific to your project, like a forum, an ecommerce package or a blog you can do it like this;
Try and keep your module as generic as possible - for example if you're making a forum module, your members section shouldn't contain fields like 'Games You Play' or 'Your LiveJournal Name' - if people want to add these fields they can sub-class your class, or decorate the fields on to it.
If you're using Requirements to include generic support files for your project like CSS or Javascript, and want to override these files to be more specific in your project, the following code is an example of how to do so using the init() function on your module controller classes:
class Forum_Controller extends Page_Controller { function init() { if(Director::fileExists(project() . "/css/forum.css")) { Requirements::css(project() . "/css/forum.css"); }else{ Requirements::css("forum/css/forum.css"); } parent::init(); } }
This will use your_project/css/forum.css if it exists, otherwise it falls back to using forum/css/forum.css.
If you wish to submit your module to our public directory, you take responsibility for a certain level of code quality, adherence to conventions, writing documentation, and releasing updates. See module-maintainers.
How To:
Useful Links:
Please use comments for notes, tips and corrections about the described
functionality.
Use the Silverstripe Forum to
ask questions.