My presentation about building Plugins in Mura CMS using FW/1.
Presented August 2011 in Sacramento at MuraCon 2011. Any questions please find me @JasPanesar.
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Building Mura CMS Plugins with FW/1 at MuraCon 2011
1. Mura CMS Plugins with FW/1
MuraCon - Aug 24 2011
@JasPanesar www.Panesar.net Jas@Panesar.Net
2. Today
Intro Why Mura Why FW/ FW/1 Sean
Q/A
Plugins 1? Plugin Throws
... or
Rock? Quickstart Tomatoes
5 min 10 min 25 min 10 min
~50 minutes to Mura Plugin Zen
3. Me
• Made in Canada
• I like building + connecting stuff > inventing
technologies
• Started SMB + Enterprise consulting in '99.
• 20 in 10 years
• Lead Software Architect / System Integrator @ Damaag
• Custom web + desktop dev for SMB & Enterprise
products, projects across NA
4. ColdFusion
• Discovered ColdFusion in '98
• Custom development in retail, manufacturing,
shipping, logistics, workflow, legal, eLearning,
eServices, eCommerce...
• Connecting the dots: Reporting, BI, accounting
systems, ERP, shipping systems, JIT / lean
manufacturing, barcoding and scanning everything,
workflow management systems
• Whatever wells "I can probably figure it out"
has thrown me down.
5. The Mura + Jas
Love Story
• First site Mura 5.1 ish before plugins
• Wondered why it was called a CMS,
seemed like more of a platform
• The kind of platform.. Where have you
been all my life?
6. Mura + Jas Date
• My "list" for a relationship:
• Do things one way, in one place
• Actually "reuse code"
• Avoid the 80% of apps we build over and over
• I just want to build business logic and solve
problems!
• Fusebox, Coldbox have been nice, but I wanted
more platform with the framework
7. Jas is skeptical
• Jas bugs Malcolm about A/B testing
• Jas bugs Matt about something
• Jas meets the Grant
• Jas asks the Grant "how do you best do.."
x1000
• Jas is unhappy Mura didn't exist like this in
1999.
8. Poll
• How many designers? Devs?
• Years of CFML experience?
• Mura experience?
• Plugin experience? With FW/1?
10. Plugins make it
easier*
• Plugins help every skill level.
• Plugins reduce egos to re-invent the
wheel.
• Plugins encourage code re-use and the
right kind of lazy programming.
• Every plugin saves time.
* May only be in Mura
11. Plugin Zen
• Installing plugins is a cinch.
• Before receiving, there must be giving.
• Before giving, there must be creating.
• Creating and sharing is caring.
• We all like being cared about.
12. Plugins Grow
Ecosystems
• What kind of ecosystems?
• Your Personal Ecosystems of apps and sites
• Mura Ecosystems
• ColdFusion Ecosystems
• Designer Ecosystems (WP, etc)
• CMS Ecosystems (Drupal, Joomla, etc.)
13. Plugins are a big deal
for Mura Developers
• Avoid The Application Logic trap
• Mura Plugins actually make customization easier
• Mura is actually, easily extendible unlike other
CMS'
• Build your custom business logic very quickly
• Build modular, reusable code
• Spend your time on more interesting work and
solving actual problems
14. Plugins are a big deal
for Designers
• Extremely quick Turn-key websites ala WP
• More output.. Less hours
• Self managed websites = happy clients
• Great to theme in, plugins are growing, easy
to install plugins
• Developers can be found to do your custom
coding.
15. Plugins are a big deal
for Managers
• The #1 cost in software dev is Developer time
• Mura gets more done, with less effort.
• Custom Mura plugins let you connect + share
data locked in any 3rd system
• Extend your competitive advantage into new areas
• Easier to answer the one question everyone asks..
Where is everything at?
16. Why Mura Plugins?
Plugins Develop Ecosystems by Making it Easier.
Customers Need it Mura CMS
all!
Agencies Designers Plugins Themes
I wish I had one I wish I had one If we build it, they won't just
place to get place to do come.. more and more are
everything.. everything.. already here looking for it.
17. Plugins + Themes Grow Mura.
More Mura,
Plugins and
Themes
Mura uptake
Easier
Usage++
design +
Community++
More
dev
Commerce++
Customer
needs grow
18. Everyone needs plugins,
even that weird one.
• No plugin is too lonely, simple, or has
code that's too ugly, especially if you use
FW/1.
• Put it on GitHub, and let someone else
improve it with you.
• If it worked for you, chances are it will
work for someone else.
19. Every plugin is special
and valuable like you.
• "I can't be the first one with this need...
There has to be a plugin.."
• Small plugins still save big time.
In the short + long term, do you really want to hand
code the weather in?
• Big plugins = entire applications.
Plugins + FW/1 let create apps inside Mura
20. I throw many gauntlets
at your heads.
• Build a simple plugin and put it on
GitHub. Let it be embarrassing. Let it be
too simple.
• Designers: throw some ideas out for what
you need on the Mura Forums.
• Developers: solve the next small problem
you have with a plugin, or one on the
Forum, or find a WP plugin ;)
21. Join the
Mura is easy train.
• Build a plugin in the next.
• Not glorious. Simple. Essential. Not my
crowning achievement in life.
22. So, now you want to
maybe build a plugin..
I use FW/1? Besides the fact Sean is in the room?
23. FW/1 is like, different.
• FW/1 is invisible.
The most invisible MVC framework I've seen.
• FW/1 does everything, and nothing.
Does nothing but leaves nothing undone.
• FW/1 stays out of the way.
Doesn't aim to solve every problem I've ever had before I have it.
• FW/1 let's you do it your way.
Roll your own user login, or use entire Mura platform in FW/1.
24. FW/1 fits all.
• Cowboy coding / Proof of concept.
Faster to build a plugin than a straight script for a demo.
• Weekend/hobby projects.
FW/1 is perfect to build and organize it as you go.
• Build entire web apps.
Ever dream of just starting to build business logic functionality
without caring about login/out/security...?
• Software as a Service breakfast eater.
Between CF, Mura and FW/1, I dare you.
25. FW/1 + Mura,
sitting in a tree...
• First, Mura plugins fit Mura perfectly.
Plugins and CMS fit each other so well that I haven't
found in any other CMS.
• Mura and FW/1 may be a perfect marriage.
• Effortless.
Mura handles app logic. FW/1 keeps your business
logic organized.
• How can you start solving your problems today?
27. How Mura plugins work.
• Plugins are installed globally.
All sites can be given access to it in
Site Settings > Global Settings > Plugins Tab
• Plugins have display objects.
Display objects are a plugins’ views that embed in a page.
FW/1 manages these views very well.
• Display objects are embedded in a Mura page
under Content Objects.
That's all.
• Thanks Grant, Steve and Sean.
28. Layers of
FW/1 Plugin File Structure
• Config Layer
We need to edit/set these
up before starting.
• Sub-systems
Easily seperate admin screens
from public/end-user screens.
29. Mura FW/1 folders
• /assets store your
Plugins Assets, css, Etc.
• /model created manually
to store ORM or DAL.
- Admin pages rendering inside Mura
Admin
- Public Subsystem pages rendering in CMS
pages for end-user
30. Mura FW/1 structure
• FW/1 Subsystems separate
Client + Admin Logic
• Mura Plugin has Admin +
Public subsystems as default.
- Admin pages rendering inside Mura Admin
- Public Subsystem pages rendering in CMS pages
for end-user
• Access Mura scope inside
plugin via rc.$
31. Step 1: Download.
• Download the latest FW/1 base
plugin from Marketplace
• http://bit.ly/mura-fw1-plugin
• Mura FW/1 Plugin is an *almost*
ready-to-upload ZIP file
• ... with a tiny bit of config ..
..we pre-package the plugin for
development
32. Step 2a: Configure.
• Before we begin... Name the plugin
• We need a display App name
App Name: “MuraCon Plugin”
• We need a unique package name
Pkg Name: “MuraConPlugin” (Unique, no spaces)
33. Step 2b: Configure.
• Setup the plugin with a unique app name + unique
package name
App Name: “MuraCon Plugin” Pkg Name: “MuraConPlugin”
• /plugin/config.xml.cfm
• Plugin Name
• Package Name
• Unique Version #
• /fw1config.cfm
• UNIQUE Package Name - this will feed
?PackageNameAction=subsystem:cfcName.FunctionName
• set framework.reloadApplicationOnEveryRequest = true;
• Zip the folder up into an archive to load into your Mura
install.
35. Step 3: Upload
• Upload your updated plugin file into
Mura via Mura Admin > Global Settings >
Plugins
• We are almost ready to start coding a
plugin!
37. Step 4: Develop.
• Let’s build an Admin feature
• New admin subsystem action called
users.list to list all users in the system
38. Step 4. Before we begin..
FW/1 MVC Refresh
• If your plugin URL is
?PackageNameaction=public:main.home ..
FW/1 will call in this order:
• First the code in a function called home() located in
{Mura Dir}/{plugin dir}/public/controllers/main.cfc
• Second your view (output to screen) in
{Mura Dir}/plugin dir}/public/views/main/home.cfm
• *** Move information between controller
and view through the request context (rc)
• bit.ly/fw1cheatsheet
39. Step 4. Before we begin..
Datasources
• Prefix all field + table names
(“mcp_”)
• No matter how, prefix custom tables
ie.. “mcp_” for muraConPlugin
• Mura Datasource
• Seperate Datasource
• ORM