Date post: | 15-Jan-2016 |
Category: |
Documents |
Upload: | elfrieda-camilla-lucas |
View: | 222 times |
Download: | 0 times |
Drupal 7 as an enterprise web application framework
Why as a developer you should use Drupal to build web applications?
Klaus Harris
DrupalCon Munich 2012
Brief bio
• Who am I?• What‘s my Drupal story?
Why this talk?
1. Address some preconceptions that developers have about Drupal
2. Why should I as a developer use Drupal 7
Part 1
Preconceptions
Developer preconceptions
1. Drupal is just a CMS2. Drupal isn’t suitable for large enterprise sites3. It’s old fashioned procedural code4. I’ll have to learn some hideous plugin architecture5. I’ll have to fit around the Drupal data model6. What I can do is limited (it’s just a CMS)7. Theming is difficult8. Drupal is slow9. I can write something like this but better
1. Drupal is just a CMS
We see a lot of comparisons like this:
Drupal vs Joomla vs WordPress Open Source CMS Comparison
CMS Comparison: Drupal, Joomla and Wordpress by Ashleigh Davis on 27 March 2011 | 6 Comments
CMS-Battle: TYPO3 vs Drupal fight over 20 rounds
But not this:
Drupal vs Symfony
Drupal vs Zend Framework
And according to Wikipedia a web framework has:
• Web template system• Caching• Security• Database access, mapping and configuration• Url mapping• Ajax• Web services
http://en.wikipedia.org/wiki/Web_application_framework
So why is Drupal is only seen as a CMS?
• Drupal‘s origins• Comparisons with Joomla, Wordpress and Typo3• No comparisons with PHP frameworks like Zend • Installable software on some hosters• Very node centric data structure in < Drupal 7• Admin interface (horror!)• All those modules, it must be a CMS• Ignorance
node
Teaser Full
Drupal 6 was less flexible
There was only really one content data type built in, namely the node.
Nodes could be sub-typed and had only basic view modes. type
A page is a node for example.
type type type
Node Node revisions
And that data lived in two tables
Drupal 7 changes all this!
Entity API, make:
• your own data table(s)• different view modes• sub-types• fields
AND
you get all the goodneess you know from node API
So now..
node
TeaserFull
Entity
user custom
type
Top 5
RSS
comment
and…
type type type type
TeaserFull
RSS
We aren‘t tied to the Drupal database
We can can override the data operation methods.
meaning…
node
Entity
custom
typetype type
custom
typetype
Drupal DB
Another DB
Web service
Our data can come from anywhere…
• Add fields• Control displayed fields depending on view mode• Get the data into search and define which fields to
index• Use our own view modes• Add custom sub-types• Be data source agnostic• Use all the hooks you are used to from nodes
Entities are new in Drupal 7
BUT!
You aren‘t tied to entities.
If you want, just write your own CRUD code.
What else makes Drupal more web framework?
• URL routing / menu• Actions and triggers• Queue mechanism• Database API• Caching• Form API • Theme system• File API• Roles and permissions• and more..
• Internationalistion• Web services• Testing framework
Contrib gold such as..
• Views• Flag• Rules• Search API
We use actions and triggers extensively
Great fordecoupling
2. Drupal isn’t suitable for large enterprise sites
Wrong!
Look at big sites using it and explore case studies.
Look at the architecture.
• http://www.examiner.com/• http://www.acquia.com/resources/case-study/examinercom• http://www.govtech.com/policy-management/Why-Big-Sites-Run-Drupal.html?page=1• http://buytaert.net/tag/drupal-sites
3. It’s old fashioned procedural code
„It‘s not all OOP“
True. Is that bad? *
„It has global variables“
True, live with it.
„There are so many arrays“
So what? It‘s PHP.
* http://drupal.org/node/547518
4. I’ll have to learn some hideous plugin architecture
You will find it:
• Well architected• Simple• Powerful• Intuitive
Wrong!
Yes!
You will need to learn about hooks, overrides and preprocessing but..
It is easy, you will like it
For example, making a module:
Menu hook
and
page callback
Enable the new module.
Simple!
Let‘s make a block
Simple!
Form API is gold
As a developer you will write a LOT of form code
You should use a Form API that you like.
5. I’ll have to fit around the Drupal data model
Wrong!
Think of Drupal as a web framework with some default data structures set up for you.
• Create data structures via Entities • Just make DB tables and write your own CRUD code• Get data from entirely different DBs• Get data from web services
Power to you!
6. What I can do is limited (it’s just a CMS)
Wrong!
Anything you can build with:
• Zend Framework• Symfony• and so on
you can build with Drupal. With reduced development time!
This search uses Zend Framework Lucene libraries.
Don‘t forget! You can use Zend Framework components in Drupal too!
7. Theming is difficult
No it‘s not.
• Themer - http://drupal.org/project/devel_themer • Devel - http://drupal.org/project/devel• Examples - http://drupal.org/project/examples
Try simple starter theme
• Zen theme - http://drupal.org/project/zen• Basic theme - http://drupal.org/project/basic
Theming is easy
Renderable arrays, theming is even easier.
Devel Themer module
8. I can write something like this but better
Really?
9. Drupal is slow
• Full page caching• Partial page caching e.g. blocks• Static caching with function calls• More efficient Entity loading • Javascript aggregation• CSS aggregation• Master / Slave database configurations• Different caching backends e.g. memcache
Drupal performance greatly benefits from:
• An opcode cache like APC• Memcache
Check out the Drupal performance group: http://groups.drupal.org/high-performance
and some performance related modules such as:
• http://drupal.org/project/memcache• http://drupal.org/project/mongodb • http://drupal.org/project/varnish
Worth looking here..
on any module page.
Part 2
Why should I as a developer use Drupal 7?
1. What is good about coding Drupal 7?
2. What should I be aware of?
3. What mindset change do I need?
4. Where do I go from here?
1. What is good about coding Drupal 7?
• It is amazing what you can build just with modules• Rapid results• Fully featured• Code organisation• Community and resources• There‘s a module for that• Really nice APIs• Developer tools
2. What should I be aware of?
Shock!!
Zend Framework Drupal
Organising code
Up to you
Configuration
And..
Works the same
Deployment can be easier and trickier
Easier through hooks and install pofiles.
Trickier with configuration in the DB. Explore Features module.
Flush the theme registry after theme changes
Flush the menu registry after menu changes
3. What mindset change do I need?
• You will combine modules AND custom code.• Don‘t look for MVC, it‘s more PAC *• Don‘t look for a Zend / Symfony file structure• Understand OO principles in the API ** and see past the procedural code.• Embrace the Drupal way
* http://www.garfieldtech.com/blog/mvc-vs-pac http://www.dossier-andreas.net/software_architecture/pac.html
** http://drupal.org/node/547518
4. Where do I go from here?
Explore
• Drupal.org• Buy a book• Who uses Drupal?
Experiment
• Install Drupal• Try some cookbook site builds
Experiment with programming
• devel, drush, schema, devel_themer modules• Explore the examples module• Write a module
Where could you use Drupal to get started?
• Personal site• An intranet tool e.g. wiki / bug tracker / CRM• New business project• Part of a business presence• Or a hybrid form
The trick is to gain experience.
I started with Drupal via a hybrid model..
Drupal An established B2C website News, help
& FAQ
Main DBMain DBs
Drupal DB
IntranetInternet
Views
Multi-lingual content for news, help and FAQs built in Drupal.
I liked Drupal so much we built on it for a startup
It was a good decision
and is fun!
Appendix
Some good books
Drupal 6
Using Drupal - First edition 1, O'Reilly PressPro Drupal 6 Development - Second Edition Apress
Drupal 7
Drupal 7 Module Development - PacktPro Drupal 7 Development, ApressThe Definitive Guide to Drupal 7 - Apress
Some links
http://drupal.org
Developer modules
http://drupal.org/project/admin_menu http://drupal.org/project/devel http://drupal.org/project/devel_themer http://drupal.org/project/schema http://drupal.org/project/drush http://drupal.org/project/examples
Recommended starter themes
http://drupal.org/project/basic http://drupal.org/project/zen
MVC vs PAC
http://www.garfieldtech.com/blog/mvc-vs-pac http://www.dossier-andreas.net/software_architecture/pac.html
Drupal and OOP
http://drupal.org/node/547518