2. About
• SilverStripe CMS is built on top of the Sapphire
framework
• Sapphire is a modular PHP 5, OOP, MVC framework with
lots of cool features
• Supports Apache and IIS equally well
• Can run on MySQL, SQLite, Postgres, MSSQL…
3. Structure
• Everything is a module
• Sapphire is the core module, with all (except for direct file
retrieval) requests routed through it
• The CMS is an module just like any other
• All code and theme assets (templates, css etc) are listed
in an automatically generated manifest - easy for the
system to find
4. Modules
• Module is simply a folder with a _config.php file
• Installation as simple as putting a folder in the root
directory and building the DB
• Defined points to hook into the base CMS functionality
using extensions
• Everything is a module, including your project code
7. MVC Definition
• Model – contains the behaviour and data of your
application. DataObjects and ORM.
• View – HTML, and other presentational elements. .ss
templates.
• Controller – responds to requests and binds the model to
the view. *_Controller classes.
8. Data
• You define your models as subclasses of DataObject
• Define your fields, relationships, and metadata on the
class, automatically built
• Uses multiple table inheritance
9. Defining Your Schema
• You define your database fields in a $db array
• Automatically pulls casting information from this
• Define relationships in their own array
• Visit or run /dev/build to rebuild the database
• Done!
12. Page Types
• Complex DataObject, forms the core of most websites
• Managed via the main admin panel in the CMS
• Easy to customise, can contain any type of data
• Make SilverStripe ideal for your data, not the other way
around
• Each page type is coupled to its own controller
13.
14.
15. Retrieving Data
• Simple accessors – DataObject::get() and
DataObject::get_one()
• Can use SQLQuery and DB::query() to peek behind
the ORM
• Automatically caches certain things, performs default
sorts and allows hooking into the process
17. Extensions (AKA Decorators)
• Add functionality to classes at runtime, without
subclassing
• Can add new methods, database fields, change and
enhance behaviour
• Many core processes have hooks that extensions can
hook in to
• Object::add_extension($subject, $extension)
18. Extensions Continued
• Add new database fields and form fields in the CMS
• Lock a user out if a third-party criteria is not met
• Change the permissions model to either force
permissions allowed or denied
• Add image editor support to the CMS image insertion
form
• Restrict content to a specific subsite
• Add extra fields to the member profile
• Add static caching to the publishing process
19. Core Extensions
• Versioned – adds support for staging/publishing, as well
as rolling back to specific versions
• Hierarchy – Allows for a tree of objects to be stored in the
DB, with related utiltity methods
• Translatable – Adds support for saving multiple languages
in one table, switch between languages, edit in CMS
20. Much more than just data
• Extensions can hook into all parts of SilverStripe
• Basically anywhere a developer calls
• $this->extend(‘methodName’) you can hook extra
behaviour in
21. Easy Forms
• Out of the box scaffolding
• Rich form library, with both simple and complex widgets
• Form fields easily integrate with your models, save
relationships
• $form->saveInto($record);
$record->write();
22. Form Library
• Simple Fields – TextField, DropdownField, DateField
• Structure Fields – HeaderField, LiteralField
• Relationship Fields – ComplexTableField,
CheckboxSetField
• Much much much more!
• Many fields in modules, and its easy to create your own!
23. Forms in the CMS
• Simple to add fields in the CMS
• Just overload getCMSFields on your DataObject, and call:
$fields->addFieldToTab(‘Root.Tab’, $field)
• Can also hook in using extensions to modify the fields on
existing objects without subclassing
24. ModelAdmin
• Fully scaffolded CRUD interface, with easy searching.
• Easily customisable, anything can be changed.
• Can be extended to very complex use cases.
25.
26.
27. Templating
• Simple templating language, cached as raw PHP
• Not XML based, used for emails, HTML, all kinds of things
• Doesn’t limit the markup you can create
• Theming system for bundling templates
• Layout and include support across modules
28.
29. Requirements
• System to include, and block CSS and JS assets from
templates and PHP code
• Supports minifying and combining
• Requirements::css(‘mysite/css/my.css’)
Requirements::themedCSS(‘mycss’)
<% require javascript (mysite/css/my.css) %>
30. Controllers
• Simple URL routing:
Director::addRules($priority, $rules)
• RequestHandler is a simple barebones controller, just
takes a response and returns a response
• Controller has more utility methods, support for actions
etc.
31. Controllers Continued
• Once the initial URL routing is done, the request is still not
always done.
• A controller can return a controller as its result, which then
moves down the URL and uses that controller to parse the
request
• This means you can easily create complex controllers
from several controllers
• For example, the CMS controller returns a Form object,
which then leads to a form field, which then renders a pop
up
• Cascading permissions!
32. Page Controllers
• Each page type also has a corresponding controller,
which handles the actual request
• Can easily define custom actions, methods as you would
expect
• Can also define controllers without a matching page to
simulate a page without actually having one
33.
34. THAT’S A QUICK OVERVIEW
OF SOME OF THE CORE
Now for some cool random features!
35. Caching Support
• Supports full page caching, with optional header
management
• Can rsync to remote hosts
• Automatically updates cache on publish
• Partial caching, with automatic invalidation
• Integration with Zend_Cache
37. 2008 DNC
• One private CMS server, rsynced static content out to
several other servers
• 100M+ page view
• 350 000 hours of HD video, some live
• Bi-lingual
• Could still make changes to site during heavy load times
38. Easy API’s
• Simple SOAP and RESTful API’s out of the box
• Easily convert data to and from XML, JSON, form
encoding
• Utility classes for consuming APIs
• Easily expose updates via RSS
39. Translation and Internationalisation
• Support for simple string translation with PHP language
files (in templates as well)
• Javascript translation support
• DataObjects can have an extension applied to add
translatable support
• Full translation support in the CMS
40. Reports
• Two types of reports – simple lists of pages in the CMS
and more complex reports in their own tab
• You can easily define your own reports by extending
SS_Report
• Just implement a few methods and you’re done!
41.
42. SearchContext
• Allows you to define an “advanced search” interface for
your DataObjects
• Scaffolded by default, and used in ModelAdmin
• Works in both ModelAdmin and the frontend easily
• Define advanced search forms with simple code by using
“search filters”
43.
44.
45. And much more
• Configurable error handling, emailing and logging.
• Easily create scheduled and build tasks
• Insert dynamic content into html text fields using
shortcodes
• Define widgets with a simple drag and drop interface
• Sake for running silverstripe commands from the CLI
• Easy environment-specific configuration
• Page comments
46. Cool Modules!
• User Forms
• Queued Jobs
• Forum
• Blog
• Workflow
• Sphinx, Solr, Zend_Lucene
• Spam protection – recaptcha, mollom..
• And many more!
50. What’s Next?
• SilverStripe 3 is currently being talked about
• New ORM?
• New template parser?
• Revamped media and download handling?
• Better module and configuration management?
• More cowbell?