24
Using Features Drupalcamp Timisoara Alexandru Badiu Iunie 2010

Using Features

Embed Size (px)

DESCRIPTION

Presentation on Features from Drupalcamp Timisoara 2010.

Citation preview

Page 1: Using Features

Using Features

Drupalcamp TimisoaraAlexandru Badiu

Iunie 2010

Page 2: Using Features

This might have happened to you

• The dev – staging – production issue• You build the site• Client wants new stuff• You build it on dev, passes staging• Replicate on live site• Write update functions, manual exporting of views,

cck

Using Features – Alexandru Badiu 2

Page 3: Using Features

This might have happened to you

• The “I’ve done this before” issue• You build some feature for client A• Along comes client B who wants the same thing• Take code, exported views, cck, push to dev• Work• Replicate on prod

Using Features – Alexandru Badiu 3

Page 4: Using Features

This might have happened to you

• The “Is there anyone editing file x.module?” issue• You work on a large project• Each dev pushes code to a repository• What about database changes?• Export views, cck and push them as well• Make sure each dev imports stuff after each update

Using Features – Alexandru Badiu 4

Page 5: Using Features

This might have happened to you

• The “What the f**k do I do now?” issue• Drupal is hard for beginners• Lots of modules• Building a feature requires multiple modules usually

and some knowledge about them• Drupal recipes are good

Using Features – Alexandru Badiu 5

Page 6: Using Features

Do you see a pattern?

• Wouldn’t it be nice if you had a repository of “modules” that create functionality a little bit more than “list all blog posts” or “have a block with latest promoted posts in category A”?

• Learn the open source way• Instant gratification• Uuuu, this is cool

Using Features – Alexandru Badiu 6

Page 7: Using Features

Do you see a pattern?

• Wouldn’t it be nice if you could avoid all the manual exporting and importing of new features / changes and just package functionality in a “module” that can be updated?

• Modules are code, code can be put into versioning control

• Database changes can’t (easily)

Using Features – Alexandru Badiu 7

Page 8: Using Features

Do you see a pattern?

• Just click to generate a new version of the “module“• Check in, others check out, update is done• Less wrinkles and teeth grinding

Using Features – Alexandru Badiu 8

Page 9: Using Features

So what is the problem?

• This is not necessarily a Drupal only problem• It’s the nature of web development and the way we

do it• Coding != Site building• If only products of site building could be exported…• Oh wait

Using Features – Alexandru Badiu 9

Page 10: Using Features

So what is the problem?

Using Features – Alexandru Badiu 10

Page 11: Using Features

Exportables

• Exportables are ways of, well, exporting things from Drupal into code bits

• Pioneered by Views, CCK is also using this• Imagecache, Spaces, Context, Strongarm• Is this enough?• No, replication is still a… not a piece of cake• Lots of missing modules (like taxonomy)

Using Features – Alexandru Badiu 11

Page 12: Using Features

Modular design

• It can also help if your site functionality is broken into a modular design

• Like maybe prefixing presets and views with blog_ or joblistings_

• Or use image_blog_medium rather than image_blog_300x50

• Or have site_blog.module and site_listings.module rather than that gigantic site.module

• These are nice first steps

Using Features – Alexandru Badiu 12

Page 13: Using Features

Modular design

• What about blocks?• Block visibility: php code or list of pages? Both?

Complex conditions?• What about menus?• I want this menu to appear when you’re on a blog

post but I want this other menu to appear on listings.• Sitewide conditions: this should appear only if none

of the conditions for the other “sections” are met• Add more and more sections

Using Features – Alexandru Badiu 13

Page 14: Using Features

The Context module

• Built by Development Seed• You create sections for your site• They are triggered by various conditions• They enable blocks, activate menus• They can be global• They can act as failbacks• They stack• http://drupal.org/project/context

Using Features – Alexandru Badiu 14

Page 15: Using Features

Almost there

• We can organize “visual” bits and pieces of our site using contexts

• We can use the same organization to name the products of our various site building tools

• We can follow a modular approach when developing our modules

• If only we could package all these changes into a module.

• Can it also be easy too?

Using Features – Alexandru Badiu 15

Page 16: Using Features

The Features module

• The Features module does exactly that• It takes different clues as to what you want to

package• There’s the manual way too (it’s not perfect)• It exports automatically whatever it can (not all

modules use exportables )• It adds it’s magic• Generates a “feature” which is actually a module

Using Features – Alexandru Badiu 16

Page 17: Using Features

The Features module

• The module contains all the necessary bits and pieces about your views, content types, presets etc

• Contains code to activate them (create or update them) and deactivate them

• Knows about dependencies so it won’t break the site• It’s a module so you can hack away• Once you add more stuff: click click => new version of

the module• Install module on other site, presto

Using Features – Alexandru Badiu 17

Page 18: Using Features

The Features module

• It doesn’t use update functions• But you can write your own• Doesn’t script site building, uses exportables• This means that lots of modules don’t work• Webform: uses actual content rather than content

types• Taxonomy: doesn’t use a machine name but numeric

id’s

Using Features – Alexandru Badiu 18

Page 19: Using Features

Share

• A feature can be installed on any other site that has the required modules

• You can put it on d.org• Features server: repository of features• Internal or external• Get notified of updates

Using Features – Alexandru Badiu 19

Page 20: Using Features

Basic usage

• Simple demo We are going to build a blog feature Use a context to “group” it Create a content type for it Make it use a vocabulary Create a listing and a block using views Package it using Features Deploy it on another site

Using Features – Alexandru Badiu 20

Page 21: Using Features

More advanced stuff

• A bit about a more complex usage scenario CNP – Creative Network Platform Built by Raw Nerve and OpenlyConnected last year Powers three sites: http://londondesignfestival.com/,

http://www.creativeislanduk.com/ and the “never made it” beta of Project: Groundwork

Team scattered in 6 cities Build the first site using features, reuse for all other sites

and just change small things and do the theme Be careful with the extra things you add in a feature’s

code: use drush

Using Features – Alexandru Badiu 21

Page 22: Using Features

Even more advanced stuff

• Almost nothing about the hardcore usage The next step: the Spaces module Again, Development Seed Makes a Drupal site act like multiple sites Makes features spaces aware: selective enabling

of features on a per group basis

Using Features – Alexandru Badiu 22

Page 23: Using Features

Resources

• http://drupal.org/project/features• http://drupal.org/node/580026• http://drupal.org/project/context• http://drupal.org/project/spaces• http://groups.drupal.org/packaging-deployment• http://developmentseed.org/tags/features

Using Features – Alexandru Badiu 23

Page 24: Using Features

Alexandru Badiu

Thanks

[email protected]://plan9fromweb.com

http://corporate.adulmec.com

24