SlideShare a Scribd company logo
SILVERSTRIPE &
SAPPHIRE
From a Developer’s Perspective
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…
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
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
SilverStripe From a Developer's Perspective
MVC
Let’s look at each of those letters
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.
Data
• You define your models as subclasses of DataObject
• Define your fields, relationships, and metadata on the
class, automatically built
• Uses multiple table inheritance
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!
SilverStripe From a Developer's Perspective
Easy Relationship Management
• Several relationship types – has_one, belongs_to,
has_many, many_many, belongs_many_many
• Easy accessing:
• $this->Relationship($filter);
• $this->Relationship()->addMany($items)
• $this->Relationship()->map()
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
SilverStripe From a Developer's Perspective
SilverStripe From a Developer's Perspective
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
Changing Data
• $object->Field = $value
• $object->write()
• $object->publish(‘Stage’, ‘Live’)
• $object->delete()
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)
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
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
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
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();
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!
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
ModelAdmin
• Fully scaffolded CRUD interface, with easy searching.
• Easily customisable, anything can be changed.
• Can be extended to very complex use cases.
SilverStripe From a Developer's Perspective
SilverStripe From a Developer's Perspective
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
SilverStripe From a Developer's Perspective
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) %>
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.
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!
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
SilverStripe From a Developer's Perspective
THAT’S A QUICK OVERVIEW
OF SOME OF THE CORE
Now for some cool random features!
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
2008 DNC
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
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
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
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!
SilverStripe From a Developer's Perspective
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”
SilverStripe From a Developer's Perspective
SilverStripe From a Developer's Perspective
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
Cool Modules!
• User Forms
• Queued Jobs
• Forum
• Blog
• Workflow
• Sphinx, Solr, Zend_Lucene
• Spam protection – recaptcha, mollom..
• And many more!
User Forms Module
DB Plumber
Pixlr Image Editor
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?
Any Questions?
Ad

More Related Content

What's hot (19)

PLAT-8 Spring Web Scripts and Spring Surf
PLAT-8 Spring Web Scripts and Spring SurfPLAT-8 Spring Web Scripts and Spring Surf
PLAT-8 Spring Web Scripts and Spring Surf
Alfresco Software
 
Showcasing drupal
Showcasing drupalShowcasing drupal
Showcasing drupal
Opevel
 
itPage LDC 09 Presentation
itPage LDC 09 PresentationitPage LDC 09 Presentation
itPage LDC 09 Presentation
Eric Landmann
 
SPSNH 2014 - The SharePoint & jQueryGuide
SPSNH 2014 - The SharePoint & jQueryGuideSPSNH 2014 - The SharePoint & jQueryGuide
SPSNH 2014 - The SharePoint & jQueryGuide
Mark Rackley
 
Drupal is not your Website
Drupal is not your Website Drupal is not your Website
Drupal is not your Website
Phase2
 
Introduction to using jQuery with SharePoint
Introduction to using jQuery with SharePointIntroduction to using jQuery with SharePoint
Introduction to using jQuery with SharePoint
Rene Modery
 
Drop acid
Drop acidDrop acid
Drop acid
Mike Feltman
 
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Lucidworks
 
Scaling the Web: Databases & NoSQL
Scaling the Web: Databases & NoSQLScaling the Web: Databases & NoSQL
Scaling the Web: Databases & NoSQL
Richard Schneeman
 
Quick start guide to java script frameworks for sharepoint apps spsbe-2015
Quick start guide to java script frameworks for sharepoint apps spsbe-2015Quick start guide to java script frameworks for sharepoint apps spsbe-2015
Quick start guide to java script frameworks for sharepoint apps spsbe-2015
Sonja Madsen
 
Oracle developer Course in Jordan دورة اوراكل في الاردن
Oracle developer Course in Jordan دورة اوراكل في الاردنOracle developer Course in Jordan دورة اوراكل في الاردن
Oracle developer Course in Jordan دورة اوراكل في الاردن
ayman hamdan
 
Share point saturday presentation 9 29-2012-2
Share point saturday presentation 9 29-2012-2Share point saturday presentation 9 29-2012-2
Share point saturday presentation 9 29-2012-2
Derek Gusoff
 
Web programming and services
Web programming and servicesWeb programming and services
Web programming and services
laibamaqsood
 
Building Software Backend (Web API)
Building Software Backend (Web API)Building Software Backend (Web API)
Building Software Backend (Web API)
Alexander Goida
 
Revision
RevisionRevision
Revision
David Sherlock
 
Mastering asp.net mvc - Dot Net Tricks
Mastering asp.net mvc - Dot Net TricksMastering asp.net mvc - Dot Net Tricks
Mastering asp.net mvc - Dot Net Tricks
Gaurav Singh
 
Frameworks Galore: A Pragmatic Review
Frameworks Galore: A Pragmatic ReviewFrameworks Galore: A Pragmatic Review
Frameworks Galore: A Pragmatic Review
netc2012
 
Spca2014 js link and display templates hatch
Spca2014 js link and display templates hatchSpca2014 js link and display templates hatch
Spca2014 js link and display templates hatch
NCCOMMS
 
WordPress Template hierarchy
WordPress Template hierarchyWordPress Template hierarchy
WordPress Template hierarchy
Jason Yingling
 
PLAT-8 Spring Web Scripts and Spring Surf
PLAT-8 Spring Web Scripts and Spring SurfPLAT-8 Spring Web Scripts and Spring Surf
PLAT-8 Spring Web Scripts and Spring Surf
Alfresco Software
 
Showcasing drupal
Showcasing drupalShowcasing drupal
Showcasing drupal
Opevel
 
itPage LDC 09 Presentation
itPage LDC 09 PresentationitPage LDC 09 Presentation
itPage LDC 09 Presentation
Eric Landmann
 
SPSNH 2014 - The SharePoint & jQueryGuide
SPSNH 2014 - The SharePoint & jQueryGuideSPSNH 2014 - The SharePoint & jQueryGuide
SPSNH 2014 - The SharePoint & jQueryGuide
Mark Rackley
 
Drupal is not your Website
Drupal is not your Website Drupal is not your Website
Drupal is not your Website
Phase2
 
Introduction to using jQuery with SharePoint
Introduction to using jQuery with SharePointIntroduction to using jQuery with SharePoint
Introduction to using jQuery with SharePoint
Rene Modery
 
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Lucidworks
 
Scaling the Web: Databases & NoSQL
Scaling the Web: Databases & NoSQLScaling the Web: Databases & NoSQL
Scaling the Web: Databases & NoSQL
Richard Schneeman
 
Quick start guide to java script frameworks for sharepoint apps spsbe-2015
Quick start guide to java script frameworks for sharepoint apps spsbe-2015Quick start guide to java script frameworks for sharepoint apps spsbe-2015
Quick start guide to java script frameworks for sharepoint apps spsbe-2015
Sonja Madsen
 
Oracle developer Course in Jordan دورة اوراكل في الاردن
Oracle developer Course in Jordan دورة اوراكل في الاردنOracle developer Course in Jordan دورة اوراكل في الاردن
Oracle developer Course in Jordan دورة اوراكل في الاردن
ayman hamdan
 
Share point saturday presentation 9 29-2012-2
Share point saturday presentation 9 29-2012-2Share point saturday presentation 9 29-2012-2
Share point saturday presentation 9 29-2012-2
Derek Gusoff
 
Web programming and services
Web programming and servicesWeb programming and services
Web programming and services
laibamaqsood
 
Building Software Backend (Web API)
Building Software Backend (Web API)Building Software Backend (Web API)
Building Software Backend (Web API)
Alexander Goida
 
Mastering asp.net mvc - Dot Net Tricks
Mastering asp.net mvc - Dot Net TricksMastering asp.net mvc - Dot Net Tricks
Mastering asp.net mvc - Dot Net Tricks
Gaurav Singh
 
Frameworks Galore: A Pragmatic Review
Frameworks Galore: A Pragmatic ReviewFrameworks Galore: A Pragmatic Review
Frameworks Galore: A Pragmatic Review
netc2012
 
Spca2014 js link and display templates hatch
Spca2014 js link and display templates hatchSpca2014 js link and display templates hatch
Spca2014 js link and display templates hatch
NCCOMMS
 
WordPress Template hierarchy
WordPress Template hierarchyWordPress Template hierarchy
WordPress Template hierarchy
Jason Yingling
 

Similar to SilverStripe From a Developer's Perspective (20)

Staying Sane with Drupal NEPHP
Staying Sane with Drupal NEPHPStaying Sane with Drupal NEPHP
Staying Sane with Drupal NEPHP
Oscar Merida
 
Where to save my data, for devs!
Where to save my data, for devs!Where to save my data, for devs!
Where to save my data, for devs!
SharePoint Saturday New Jersey
 
Share point development 101
Share point development 101Share point development 101
Share point development 101
Becky Bertram
 
Contains the SQLite database management classes that an application would use...
Contains the SQLite database management classes that an application would use...Contains the SQLite database management classes that an application would use...
Contains the SQLite database management classes that an application would use...
GabrielPachasAlvarad
 
Best Practices for WordPress
Best Practices for WordPressBest Practices for WordPress
Best Practices for WordPress
Taylor Lovett
 
Introduction to Monsoon PHP framework
Introduction to Monsoon PHP frameworkIntroduction to Monsoon PHP framework
Introduction to Monsoon PHP framework
Krishna Srikanth Manda
 
Codeigniter
CodeigniterCodeigniter
Codeigniter
Joram Salinas
 
DMann-SQLDeveloper4Reporting
DMann-SQLDeveloper4ReportingDMann-SQLDeveloper4Reporting
DMann-SQLDeveloper4Reporting
David Mann
 
ASP.NET MVC 5 - EF 6 - VS2015
ASP.NET MVC 5 - EF 6 - VS2015ASP.NET MVC 5 - EF 6 - VS2015
ASP.NET MVC 5 - EF 6 - VS2015
Hossein Zahed
 
Database
DatabaseDatabase
Database
nationalmobileapps
 
5 Common Mistakes You are Making on your Website
 5 Common Mistakes You are Making on your Website 5 Common Mistakes You are Making on your Website
5 Common Mistakes You are Making on your Website
Acquia
 
Lecture 9: Dynamic web application
Lecture 9: Dynamic web applicationLecture 9: Dynamic web application
Lecture 9: Dynamic web application
Artificial Intelligence Institute at UofSC
 
Advanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojoAdvanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojo
Fu Cheng
 
Sqlite
SqliteSqlite
Sqlite
Kumar
 
Jasig rubyon rails
Jasig rubyon railsJasig rubyon rails
Jasig rubyon rails
_zaMmer_
 
WebDev Crash Course
WebDev Crash CourseWebDev Crash Course
WebDev Crash Course
Cesar Martinez
 
CFWheels - Pragmatic, Beautiful Code
CFWheels - Pragmatic, Beautiful CodeCFWheels - Pragmatic, Beautiful Code
CFWheels - Pragmatic, Beautiful Code
indiver
 
Laravel ppt
Laravel pptLaravel ppt
Laravel ppt
Mayank Panchal
 
Evolutionary database design
Evolutionary database designEvolutionary database design
Evolutionary database design
Salehein Syed
 
SharePoint 2014: Where to save my data, for devs!
SharePoint 2014: Where to save my data, for devs!SharePoint 2014: Where to save my data, for devs!
SharePoint 2014: Where to save my data, for devs!
Ben Steinhauser
 
Staying Sane with Drupal NEPHP
Staying Sane with Drupal NEPHPStaying Sane with Drupal NEPHP
Staying Sane with Drupal NEPHP
Oscar Merida
 
Share point development 101
Share point development 101Share point development 101
Share point development 101
Becky Bertram
 
Contains the SQLite database management classes that an application would use...
Contains the SQLite database management classes that an application would use...Contains the SQLite database management classes that an application would use...
Contains the SQLite database management classes that an application would use...
GabrielPachasAlvarad
 
Best Practices for WordPress
Best Practices for WordPressBest Practices for WordPress
Best Practices for WordPress
Taylor Lovett
 
DMann-SQLDeveloper4Reporting
DMann-SQLDeveloper4ReportingDMann-SQLDeveloper4Reporting
DMann-SQLDeveloper4Reporting
David Mann
 
ASP.NET MVC 5 - EF 6 - VS2015
ASP.NET MVC 5 - EF 6 - VS2015ASP.NET MVC 5 - EF 6 - VS2015
ASP.NET MVC 5 - EF 6 - VS2015
Hossein Zahed
 
5 Common Mistakes You are Making on your Website
 5 Common Mistakes You are Making on your Website 5 Common Mistakes You are Making on your Website
5 Common Mistakes You are Making on your Website
Acquia
 
Advanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojoAdvanced guide to develop ajax applications using dojo
Advanced guide to develop ajax applications using dojo
Fu Cheng
 
Sqlite
SqliteSqlite
Sqlite
Kumar
 
Jasig rubyon rails
Jasig rubyon railsJasig rubyon rails
Jasig rubyon rails
_zaMmer_
 
CFWheels - Pragmatic, Beautiful Code
CFWheels - Pragmatic, Beautiful CodeCFWheels - Pragmatic, Beautiful Code
CFWheels - Pragmatic, Beautiful Code
indiver
 
Evolutionary database design
Evolutionary database designEvolutionary database design
Evolutionary database design
Salehein Syed
 
SharePoint 2014: Where to save my data, for devs!
SharePoint 2014: Where to save my data, for devs!SharePoint 2014: Where to save my data, for devs!
SharePoint 2014: Where to save my data, for devs!
Ben Steinhauser
 
Ad

Recently uploaded (20)

How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxIncreasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Anoop Ashok
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven InsightsAndrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxIncreasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Anoop Ashok
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven InsightsAndrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Ad

SilverStripe From a Developer's Perspective

  • 1. SILVERSTRIPE & SAPPHIRE From a Developer’s Perspective
  • 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
  • 6. MVC Let’s look at each of those letters
  • 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!
  • 11. Easy Relationship Management • Several relationship types – has_one, belongs_to, has_many, many_many, belongs_many_many • Easy accessing: • $this->Relationship($filter); • $this->Relationship()->addMany($items) • $this->Relationship()->map()
  • 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
  • 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
  • 16. Changing Data • $object->Field = $value • $object->write() • $object->publish(‘Stage’, ‘Live’) • $object->delete()
  • 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.
  • 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
  • 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
  • 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!
  • 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”
  • 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?