SlideShare a Scribd company logo
1 of 70
Download to read offline
2011-09-18 @ drupalcity.de

                            features+
     „A Presentation about monsters, features and the plus“




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     1
whoami


Florian Latzel
 ●   @fl3a
 ●   http://is-loesungen.de
 ●   http://netzaffe.de




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     2
whoami: f – l – 3 – what?!



 ●   @fl3a → flEa




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     3
whoami: f – l – 3 – what?!



 ●   @fl3a → flea [fliː]




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     4
whoami: f – l – 3 – what?!



 ●   @fl3a → flea [fliː]




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     5
whoami: f – l – 3 – what?!



 ●   @fl3a → flea [fliː]




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     6
whoami: fl3a → flEa → flea → floh...



 ●   @fl3a → floh




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     7
cat features+/toc.txt


●   Questions
●   Conclusion
●   Features
●   Drupal API
●   Drush
●   Installation profiles
●   The Plus



    features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     8
Questions: What is stored where?


Filesystem:                                Database:
●   Code                                    ●   Drupal Settings
●   Code Settings                           ●   Modules Settings
                                            ●   Content Types
                                            ●   Content
                                            ●   Views
                                            ●   Rules
                                            ●   ...


features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     9
Questions: What is exportable* right now?


Filesystem:                                Database:
●   Code                                    ●   Drupal Settings
●   Code Settings                           ●   Modules Settings
                                            ●   Content Types
                                            ●   Content

    *(and importable)
                                            ●   Views
                                            ●   Rules
                                            ●   ...


features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     10
Questions...




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     11
Questions: How to cooperate with a team*?

●   Working together on live?




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     12
Questions: How to cooperate with a team*?

●   Working together on live?
●   Working with ftp?




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     13
Questions: How to cooperate with a team*?

●   Working together on live?
●   Working with ftp?
●   Sharing sqldumps?




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     14
Questions: How to cooperate with a team*?

 ●   Working together on live?
 ●   Working with ftp?
 ●   Sharing sqldumps?
 ●   Overwriting others' work?


*(Perhaps a distributed team)




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     15
Questions: How to handle the staging issue?


Everything works on dev. Now what?




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     16
Questions: How to handle the staging issue?


Everything works on dev. Now what?
●   Install modules again on stage




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     17
Questions: How to handle the staging issue?


Everything works on dev. Now what?
 ●   Install modules again on stage
 ●
     Export Views, Rules, CT's manually from dev*




* Also possible via code for Rules[1] and Views[2]




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     18
Questions: How to handle the staging issue?


Everything works on dev. Now what?
●   Install modules again on stage
●
    Export Views, Rules, CT's manually from dev*
●   Import them manually into stage




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     19
Questions: How to handle the staging issue?


Whats about the „unexportable“ functionality?




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     20
Questions: How to handle the staging issue?


Whats about the „unexportable“ functionality?
Reproduce manually!




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     21
Questions: How to handle the staging issue?


Whats about the „unexportable“ functionality?
Reproduce manually:
●   Module Settings / Configuration




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     22
Questions: How to handle the staging issue?


Whats about the „unexportable“ functionality?
Reproduce manually:
●   Module Settings / Configuration
●   Roles and its Permissions




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     23
Questions: How to handle the staging issue?


Whats about the „unexportable“ functionality?
Reproduce manually:
●   Module Settings / Configuration
●   Roles and its Permissions
●   And so on...




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     24
Questions: How to handle the staging issue?


Whats about the „unexportable“ functionality?
Reproduce manually:
●   Module Settings / Configuration
●   Roles and its Permissions
●   And so on...
●   Ooops, i forgot the live environment, repeat....




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     25
Conclusion




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     26
Conclusion

●   Not a good strategy for a team...




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     27
Conclusion

●   Not a good strategy for a team...
●   No granularity...




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     28
Conclusion

●   Not a good strategy for a team...
●   No granularity...
●   Mostly cumbersome work...




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     29
Conclusion

●   Not a good strategy for a team...
●   No granularity...
●   Mostly cumbersome work...
●   Hard to use repeating patterns...




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     30
Conclusion

●   Not a good strategy for a team...
●   No granularity...
●   Mostly cumbersome work...
●   Hard to use repeating patterns...
●   Prone to errors...




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     31
Conclusion

●   Not a good strategy for a team...
●   No granularity...
●   Mostly cumbersome work...
●   Hard to use repeating patterns...
●   Prone to errors...
●   No revision history...




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     32
Conclusion

●   Not a good strategy for a team...
●   No granularity...
●   Mostly cumbersome work...
●   Hard to use repeating patterns...
●   Prone to errors...
●   No revision history...
●   No VCS / SCM...




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     33
features




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     34
features: The Features Module


Features
http://drupal.org/project/features

Requires ctools
http://drupal.org/project/ctools
●   Uses the ctools export API
●   Export functionality
    and configuration into code
●   Code means Drupal Module


features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     35
features: What can it handle?


Drupal Core:
●   CCK Fields
●   CCK Fieldgroups
●   Content Types
●   Dependencies (required modules)
●
    Menus and Menu links*
●   Permissions
●   Roles
●
    Taxonomy (Vocabularies)*                          * Currently in development.


features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     36
features: What can it handle?


Contributed Modules:
 ●   Context                                ●   ImageCache
 ●   CKEditor Profiles                      ●   Panels
                                                (Page Manager)
 ●   Feeds
                                            ●   Rules
 ●   Flags (from 6.x-2.x)
                                            ●   Views




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     37
features: What is missing?


●   Configuration
●   Custom Blocks
●   Input Formats
●   Content




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     38
features: Rule #35?


Rule #35: "There's a Drupal module for that." [3]




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     39
features: Rule #35 ­ Configuration


Strongarm
http://drupal.org/project/strongarm
●   Settings are usually stored
    in {variables}
●   Strongarm makes variables
    exportable via features
●   Uses the ctools export API




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     40
features: Rule #35 ­ Boxes


Boxes
http://drupal.org/project/boxes
●   A reimplementation
    of custom blocks (boxes)
●   Uses the ctools export API




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     41
features: Rule #35 ­ Content




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     42
features: Rule #35 ­ Content


Nodes, Node revisions, User, Taxonomy
http://drupal.org/project/uuid_features
●   Requires uuid
    → Universally Unique Identifier
    http://drupal.org/project/uuid
●   e.g. node/259 gets the following uuid:
    f3159efc-3e1c-102e-882c-fd9c148d8804




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     43
Features: Rule #35 ­ import formats 


Input Formats
http://drupal.org/project/input_formats
●   Allows you to export / import Input Formats
    manually like CT's and Views
●   Features Module Integration
●   Requires Exportables
    http://drupal.org/project/exportables
●   Requires Strongarm and Ctools, too




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     44
features: myfeature


A Profile CT with...
●   content_profile
●   cck_private_fields
●   flag_friend, flag_friend_access
●   content_taxonomy
●   And a lot of fields...




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     45
features: myfeature


 myfeature/
 ├── myfeature.features.content.inc
 ├── myfeature.features.fieldgroup.inc
 ├── myfeature.features.inc
 ├── myfeature.info
 ├── myfeature.module
 └── myfeature.strongarm.inc




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     46
Features: myfeature.info

core = "6.x"
dependencies[] = "cck_private_fields"
dependencies[] = "cck_private_fields_flag_friend"
dependencies[] = "content_profile"
...
description = "Myfeature desciption"
features[ctools][] = "strongarm:strongarm:1"
...
features[fieldgroup][] = "profile-group_personal"
...
features[node][] = "profile"
...
features[user_permission][] = "edit own profile content"
features[user_permission][] = "edit privacy options for field field_relations
features[user_permission][] = "view private data for field field_relationship
...
features[user_role][] = "Community member"
features[variable][] = "comment_anonymous_profile"
...
name = "myfeature"
package = "Features"



  features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     47
features: myfeature.module


 <?php

 include_once('myfeature.features.inc');




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     48
Features: myfeature.features.inc (1)


<?php

/**
  * Implementation of hook_ctools_plugin_api().
  */
function myfeature_ctools_plugin_api() {
   list($module, $api) = func_get_args();
   if ($module == "strongarm" && $api == "strongarm") {
     return array("version" => 1);
   }
}




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     49
Features: myfeature.features.inc (2)

/**
  * Implementation of hook_node_info().
  */
function myfeature_node_info() {
   $items = array(
     'profile' => array(
       'name' => t('Profile'),
       'module' => 'features',
       'description' => t('A user profile built as content.'),
       'has_title' => '1',
       'title_label' => t('Title'),
       'has_body' => '0',
       'body_label' => '',
       'min_word_count' => '0',
       'help' => '',
     ),
   );
   return $items;
}

features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     50
Features: myfeature.features.inc


<?php

/**
  * Implementation of hook_ctools_plugin_api().
  */
function myfeature_ctools_plugin_api() {
   list($module, $api) = func_get_args();
   if ($module == "strongarm" && $api == "strongarm") {
     return array("version" => 1);
   }
}




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     51
features: myfeature.features.content.inc

<?php

/**
  * Implementation of hook_content_default_fields().
  */
function myfeature_content_default_fields() {
   $fields = array();
   ...
   // Exported field: field_relationship_status
   $fields['profile-field_relationship_status'] = array(
     'field_name' => 'relationship_status',
     'type_name' => 'profile',
     'display_settings' => array(
        'weight' => '37',
        'parent' => 'group_common,
        'label' => array(
          'format' => 'above',
        ),
       ...
       'allowed_values' => 'solo^M
In a relationship^M
complicated',
       ...
      'label' => 'relationship status',
   );
}

features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     52
features: Specifications


Kit [4]
●   KIT Feature Specification (kitf 1.0-draft)
●   KIT Theme Specification (kitt 1.0-draft)




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     53
features: Known Issues


Lost in translation [5]...
 ●   e.g. a field is named 'Beziehungsstatus'
 ●   e.g. in your myfeature.content.inc
     you will get: t('Beziehungsstatus')
     that will be used as translation source
 ●   but it should be t('relationship status')
 ●   Still a open issue in Features Module [6]
 ●   Solution: Features Export Language [7]



features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     54
Drupal API: If a feature is not enough... 


You know, Drupal has an API...
Create Upgrade-Path's with Drupal's update.php
●   Create myfeature.install file
●   Implement hook_install()
    http://api.drupal.org/api/drupal/developer--hooks--install.php/function/hook_install/6

●   Implement hook_update_N()
    http://api.drupal.org/api/drupal/developer--hooks--install.php/function/hook_update_N/6

Perhaps you might use db_query()
or implement hook_you_name_it()



features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de              55
drush




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     56
drush fu


Features Module provides some drush commands:
●   drush features
●   drush features-export [feature name]
    [component list]
●   drush features-update [feature name]
●   drush features-revert [feature name]
●   drush features-diff [feature name]




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     57
drush: Useful features related extensions

●   Features Clone
    http://drupal.org/project/features_clone
●   Features Plumber
    http://drupal.org/project/features_plumber
●   Features Fetch
    http://drupal.org/project/features_fetch




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     58
Installation profiles


You might know Installation Profiles from...
●   DrupalCenter
●   OpenAtrium
●   Acquia Drupal
●   Commons
●   Open Publish
●   ...




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     59
Installation Profiles: myprofile

drupal-6.x/
├── COPYRIGHT.txt
├── cron.php
├── includes
├── index.php
├── install.php
├── misc
├── modules
├── profiles
│   ├── default
│   │    └── default.profile
│   └── myprofile
│        ├── myprofile.profile
│        └── translations
│            └── de.po
├── robots.txt
├── scripts
├── sites
├── themes
├── update.php
└── xmlrpc.php

features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     60
Installation Profile: myprofile.profile


/**
 * Implementation of hook_profile_modules()
 *
 * @return
 * array of modules to be required and activated
 */
function myprofile_profile_modules(){
   return array(

      // feature-stuff
      'myfeature',
       …
    );
}


features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     61
The Plus

●   Perhaps your own Drupal Distribution?




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     62
The Plus

●   Perhaps your own Drupal Distribution?
●   Feature Server
    http://drupal.org/project/fserver




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     63
The Plus

●   Perhaps your own Drupal Distribution?
●   Feature Server
    http://drupal.org/project/fserver
●   Drush Make
    http://drupal.org/project/drush_make




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     64
The Plus

●   Perhaps your own Drupal Distribution?
●   Feature Server
    http://drupal.org/project/fserver
●   Drush Make
    http://drupal.org/project/drush_make
●   Drush make UI
    http://drupal.org/project/drush_make_ui




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     65
The Plus

●   Perhaps your own Drupal Distribution?
●   Feature Server
    http://drupal.org/project/fserver
●   Drush Make
    http://drupal.org/project/drush_make
●   Drush make UI
    http://drupal.org/project/drush_make_ui
●   drush site-install
    (in drush core >= 4.0)



features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     66
The Plus

●   Perhaps your own Drupal Distribution?
●   Feature Server
    http://drupal.org/project/fserver
●   Drush Make
    http://drupal.org/project/drush_make
●   Drush make UI
    http://drupal.org/project/drush_make_ui
●   drush site-install
    (in drush core >= 4.0)
●   CI – Continious Integration
    (with e.g. Hudson / Jenkins)
features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     67
echo ­e “Thank you!n“


Questions?
 ●   @fl3a
 ●   http://is-loesungen.de
 ●   http://netzaffe.de




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de     68
cat ~/feature+/appendix/references.txt


[1] http://drupal.org/node/298634
[2] http://api.lullabot.com/hook_views_default_views
[3] Robert Douglass at DrupalCamp Stockholm
  http://twitter.com/#!/toddross/statuses/1970578988
[4] http://drupal.org/project/kit
[5] http://blog.erdfisch.de/2011/05/features-international
[6] http://drupal.org/node/874760
[7] http://drupal.org/sandbox/xamanu/1161994




features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de  
cat ~/feature+/appendix/image­credits.txt

●   Flea (RHCP)
    http://en.wikipedia.org/wiki/File:Flea_in_skeleton_t-shirt.jpg
●   Flea (anatomy)
    http://en.wikipedia.org/wiki/File:Scheme_flea_anatomy-en.svg
●   Feature Monster
    http://drupal.org/files/images/features_monster.png
●   The future of drupal features
    http://www.flickr.com/photos/developmentseed/3575550279/
●   Strongarm Monster
    http://drupal.org/files/images/strongarm.png
●   Boxes Monster
    http://drupal.org/node/820924
●   „Node Collision“
    http://www.slideshare.net/eaton/drupal-deployment-presentation
●   Adrian <3 drush
    http://www.flickr.com/photos/developmentseed/3614279203/
Feature related images by developmentSEED, monsters by Saman Bemel Benrud

features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de  

More Related Content

What's hot

Drupal case study: Behind the scenes of website of University of Tartu
Drupal case study: Behind the scenes of website of University of TartuDrupal case study: Behind the scenes of website of University of Tartu
Drupal case study: Behind the scenes of website of University of TartuRené Lasseron
 
Drupal migrations in 2018 - presentation at DrupalCon in Nashville
Drupal migrations in 2018 - presentation at DrupalCon in NashvilleDrupal migrations in 2018 - presentation at DrupalCon in Nashville
Drupal migrations in 2018 - presentation at DrupalCon in NashvilleIrina Zaks
 
The OpenEuropa Initiative
The OpenEuropa InitiativeThe OpenEuropa Initiative
The OpenEuropa InitiativeNuvole
 
Doctrine Php Object Relational Mapper
Doctrine Php Object Relational MapperDoctrine Php Object Relational Mapper
Doctrine Php Object Relational Mapperguesta3af58
 
Introduction to Module Development (Drupal 7)
Introduction to Module Development (Drupal 7)Introduction to Module Development (Drupal 7)
Introduction to Module Development (Drupal 7)April Sides
 
Amplexor Drupal for the Enterprise seminar - evaluating Drupal for the Enterp...
Amplexor Drupal for the Enterprise seminar - evaluating Drupal for the Enterp...Amplexor Drupal for the Enterprise seminar - evaluating Drupal for the Enterp...
Amplexor Drupal for the Enterprise seminar - evaluating Drupal for the Enterp...Amplexor
 
Content migration - CSV to Drupal 8
Content migration -  CSV to Drupal 8Content migration -  CSV to Drupal 8
Content migration - CSV to Drupal 8Hector Iribarne
 

What's hot (10)

Drupal case study: Behind the scenes of website of University of Tartu
Drupal case study: Behind the scenes of website of University of TartuDrupal case study: Behind the scenes of website of University of Tartu
Drupal case study: Behind the scenes of website of University of Tartu
 
Drupal migrations in 2018 - presentation at DrupalCon in Nashville
Drupal migrations in 2018 - presentation at DrupalCon in NashvilleDrupal migrations in 2018 - presentation at DrupalCon in Nashville
Drupal migrations in 2018 - presentation at DrupalCon in Nashville
 
The OpenEuropa Initiative
The OpenEuropa InitiativeThe OpenEuropa Initiative
The OpenEuropa Initiative
 
Using Features
Using FeaturesUsing Features
Using Features
 
Doctrine Php Object Relational Mapper
Doctrine Php Object Relational MapperDoctrine Php Object Relational Mapper
Doctrine Php Object Relational Mapper
 
Introduction to Module Development (Drupal 7)
Introduction to Module Development (Drupal 7)Introduction to Module Development (Drupal 7)
Introduction to Module Development (Drupal 7)
 
Drupal in-depth
Drupal in-depthDrupal in-depth
Drupal in-depth
 
2014 hadoop wrocław jug
2014 hadoop   wrocław jug2014 hadoop   wrocław jug
2014 hadoop wrocław jug
 
Amplexor Drupal for the Enterprise seminar - evaluating Drupal for the Enterp...
Amplexor Drupal for the Enterprise seminar - evaluating Drupal for the Enterp...Amplexor Drupal for the Enterprise seminar - evaluating Drupal for the Enterp...
Amplexor Drupal for the Enterprise seminar - evaluating Drupal for the Enterp...
 
Content migration - CSV to Drupal 8
Content migration -  CSV to Drupal 8Content migration -  CSV to Drupal 8
Content migration - CSV to Drupal 8
 

Similar to features+ #dcb11

Plone Intranet under the hood
Plone Intranet under the hoodPlone Intranet under the hood
Plone Intranet under the hoodGuido Stevens
 
UX challenges of a UI-centric config management tool
UX challenges of a UI-centric config management toolUX challenges of a UI-centric config management tool
UX challenges of a UI-centric config management toolRUDDER
 
Engage 2018 adm04 The lazy admin wins
Engage 2018   adm04 The lazy admin winsEngage 2018   adm04 The lazy admin wins
Engage 2018 adm04 The lazy admin winsFactor-y S.r.l.
 
Engage 2018 adm04 - The lazy admin wins
Engage 2018   adm04 - The lazy admin winsEngage 2018   adm04 - The lazy admin wins
Engage 2018 adm04 - The lazy admin winsMatteo Bisi
 
Drupal 7 - More than a Simple CMS
Drupal 7 - More than a Simple CMSDrupal 7 - More than a Simple CMS
Drupal 7 - More than a Simple CMSMarco Lancellotti
 
Becoming A Drupal Master Builder
Becoming A Drupal Master BuilderBecoming A Drupal Master Builder
Becoming A Drupal Master BuilderPhilip Norton
 
XPages Blast - Ideas, Tips and More
XPages Blast - Ideas, Tips and MoreXPages Blast - Ideas, Tips and More
XPages Blast - Ideas, Tips and MoreTeamstudio
 
Pythonsevilla2019 - Introduction to MLFlow
Pythonsevilla2019 - Introduction to MLFlowPythonsevilla2019 - Introduction to MLFlow
Pythonsevilla2019 - Introduction to MLFlowFernando Ortega Gallego
 
Drupal Day 2011 - Features: una vita felice
Drupal Day 2011 - Features: una vita feliceDrupal Day 2011 - Features: una vita felice
Drupal Day 2011 - Features: una vita feliceDrupalDay
 
Choosing Drupal as your Content Management Framework
Choosing Drupal as your Content Management FrameworkChoosing Drupal as your Content Management Framework
Choosing Drupal as your Content Management FrameworkMediacurrent
 
Conference Migrate to Drupal 8 by Leon Cros at Drupal Developer Days 2015 in ...
Conference Migrate to Drupal 8 by Leon Cros at Drupal Developer Days 2015 in ...Conference Migrate to Drupal 8 by Leon Cros at Drupal Developer Days 2015 in ...
Conference Migrate to Drupal 8 by Leon Cros at Drupal Developer Days 2015 in ...Chipway
 
Drupalmonitor.com - Drupal User Group Meetup Basel
Drupalmonitor.com - Drupal User Group Meetup BaselDrupalmonitor.com - Drupal User Group Meetup Basel
Drupalmonitor.com - Drupal User Group Meetup BaselNETNODE AG
 
Making your first contribution to Foreman
Making your first contribution to ForemanMaking your first contribution to Foreman
Making your first contribution to ForemanDominic Cleal
 
(some) Drupal Theming by Ryan Price
(some) Drupal Theming by Ryan Price(some) Drupal Theming by Ryan Price
(some) Drupal Theming by Ryan PriceRyan Price
 
DITA on a Shoe String
DITA on a Shoe StringDITA on a Shoe String
DITA on a Shoe StringStan Doherty
 
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...Puppet
 
Your first d8 module
Your first d8 moduleYour first d8 module
Your first d8 moduletedbow
 

Similar to features+ #dcb11 (20)

Plone Intranet under the hood
Plone Intranet under the hoodPlone Intranet under the hood
Plone Intranet under the hood
 
UX challenges of a UI-centric config management tool
UX challenges of a UI-centric config management toolUX challenges of a UI-centric config management tool
UX challenges of a UI-centric config management tool
 
Engage 2018 adm04 The lazy admin wins
Engage 2018   adm04 The lazy admin winsEngage 2018   adm04 The lazy admin wins
Engage 2018 adm04 The lazy admin wins
 
Engage 2018 adm04 - The lazy admin wins
Engage 2018   adm04 - The lazy admin winsEngage 2018   adm04 - The lazy admin wins
Engage 2018 adm04 - The lazy admin wins
 
Drupal 7 - More than a Simple CMS
Drupal 7 - More than a Simple CMSDrupal 7 - More than a Simple CMS
Drupal 7 - More than a Simple CMS
 
Drupal 7: More than a simple CMS
Drupal 7: More than a simple CMSDrupal 7: More than a simple CMS
Drupal 7: More than a simple CMS
 
Becoming A Drupal Master Builder
Becoming A Drupal Master BuilderBecoming A Drupal Master Builder
Becoming A Drupal Master Builder
 
XPages Blast - Ideas, Tips and More
XPages Blast - Ideas, Tips and MoreXPages Blast - Ideas, Tips and More
XPages Blast - Ideas, Tips and More
 
Pythonsevilla2019 - Introduction to MLFlow
Pythonsevilla2019 - Introduction to MLFlowPythonsevilla2019 - Introduction to MLFlow
Pythonsevilla2019 - Introduction to MLFlow
 
Drupal Day 2011 - Features: una vita felice
Drupal Day 2011 - Features: una vita feliceDrupal Day 2011 - Features: una vita felice
Drupal Day 2011 - Features: una vita felice
 
Praes
PraesPraes
Praes
 
Choosing Drupal as your Content Management Framework
Choosing Drupal as your Content Management FrameworkChoosing Drupal as your Content Management Framework
Choosing Drupal as your Content Management Framework
 
Conference Migrate to Drupal 8 by Leon Cros at Drupal Developer Days 2015 in ...
Conference Migrate to Drupal 8 by Leon Cros at Drupal Developer Days 2015 in ...Conference Migrate to Drupal 8 by Leon Cros at Drupal Developer Days 2015 in ...
Conference Migrate to Drupal 8 by Leon Cros at Drupal Developer Days 2015 in ...
 
Devops For Drupal
Devops  For DrupalDevops  For Drupal
Devops For Drupal
 
Drupalmonitor.com - Drupal User Group Meetup Basel
Drupalmonitor.com - Drupal User Group Meetup BaselDrupalmonitor.com - Drupal User Group Meetup Basel
Drupalmonitor.com - Drupal User Group Meetup Basel
 
Making your first contribution to Foreman
Making your first contribution to ForemanMaking your first contribution to Foreman
Making your first contribution to Foreman
 
(some) Drupal Theming by Ryan Price
(some) Drupal Theming by Ryan Price(some) Drupal Theming by Ryan Price
(some) Drupal Theming by Ryan Price
 
DITA on a Shoe String
DITA on a Shoe StringDITA on a Shoe String
DITA on a Shoe String
 
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...
PuppetConf 2016: A Tale of Two Hierarchies: Group Policy & Puppet – Matt Ston...
 
Your first d8 module
Your first d8 moduleYour first d8 module
Your first d8 module
 

More from Florian Latzel

Eine Einführung in Scrum
Eine Einführung in ScrumEine Einführung in Scrum
Eine Einführung in ScrumFlorian Latzel
 
Agiles Projektmanagement mit Scrum
Agiles Projektmanagement mit ScrumAgiles Projektmanagement mit Scrum
Agiles Projektmanagement mit ScrumFlorian Latzel
 
Agiles Projektmanagement mit Scrum
Agiles Projektmanagement mit ScrumAgiles Projektmanagement mit Scrum
Agiles Projektmanagement mit ScrumFlorian Latzel
 
Drupal 6.x, Drupal 7.x -- Scratching the surface
Drupal 6.x, Drupal 7.x -- Scratching the surfaceDrupal 6.x, Drupal 7.x -- Scratching the surface
Drupal 6.x, Drupal 7.x -- Scratching the surfaceFlorian Latzel
 
Scrum aus der Praxis - DrupalDevDays 2010
Scrum aus der Praxis - DrupalDevDays 2010Scrum aus der Praxis - DrupalDevDays 2010
Scrum aus der Praxis - DrupalDevDays 2010Florian Latzel
 
drush_multi @ DrupalDevDays 2010
drush_multi @ DrupalDevDays 2010drush_multi @ DrupalDevDays 2010
drush_multi @ DrupalDevDays 2010Florian Latzel
 
Drush und Multisite: drush_multi
Drush und Multisite: drush_multiDrush und Multisite: drush_multi
Drush und Multisite: drush_multiFlorian Latzel
 
Drush – Das Sackmesser für die Kommandozeile
Drush – Das Sackmesser für die KommandozeileDrush – Das Sackmesser für die Kommandozeile
Drush – Das Sackmesser für die KommandozeileFlorian Latzel
 

More from Florian Latzel (8)

Eine Einführung in Scrum
Eine Einführung in ScrumEine Einführung in Scrum
Eine Einführung in Scrum
 
Agiles Projektmanagement mit Scrum
Agiles Projektmanagement mit ScrumAgiles Projektmanagement mit Scrum
Agiles Projektmanagement mit Scrum
 
Agiles Projektmanagement mit Scrum
Agiles Projektmanagement mit ScrumAgiles Projektmanagement mit Scrum
Agiles Projektmanagement mit Scrum
 
Drupal 6.x, Drupal 7.x -- Scratching the surface
Drupal 6.x, Drupal 7.x -- Scratching the surfaceDrupal 6.x, Drupal 7.x -- Scratching the surface
Drupal 6.x, Drupal 7.x -- Scratching the surface
 
Scrum aus der Praxis - DrupalDevDays 2010
Scrum aus der Praxis - DrupalDevDays 2010Scrum aus der Praxis - DrupalDevDays 2010
Scrum aus der Praxis - DrupalDevDays 2010
 
drush_multi @ DrupalDevDays 2010
drush_multi @ DrupalDevDays 2010drush_multi @ DrupalDevDays 2010
drush_multi @ DrupalDevDays 2010
 
Drush und Multisite: drush_multi
Drush und Multisite: drush_multiDrush und Multisite: drush_multi
Drush und Multisite: drush_multi
 
Drush – Das Sackmesser für die Kommandozeile
Drush – Das Sackmesser für die KommandozeileDrush – Das Sackmesser für die Kommandozeile
Drush – Das Sackmesser für die Kommandozeile
 

Recently uploaded

NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesMd Hossain Ali
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.francesco barbera
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdfJamie (Taka) Wang
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URLRuncy Oommen
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataCloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataSafe Software
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 
Babel Compiler - Transforming JavaScript for All Browsers.pptx
Babel Compiler - Transforming JavaScript for All Browsers.pptxBabel Compiler - Transforming JavaScript for All Browsers.pptx
Babel Compiler - Transforming JavaScript for All Browsers.pptxYounusS2
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IES VE
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7DianaGray10
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 

Recently uploaded (20)

NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
20200723_insight_release_plan_v6.pdf20200723_insight_release_plan_v6.pdf
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URL
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataCloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 
Babel Compiler - Transforming JavaScript for All Browsers.pptx
Babel Compiler - Transforming JavaScript for All Browsers.pptxBabel Compiler - Transforming JavaScript for All Browsers.pptx
Babel Compiler - Transforming JavaScript for All Browsers.pptx
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 

features+ #dcb11

  • 1. 2011-09-18 @ drupalcity.de features+ „A Presentation about monsters, features and the plus“ features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   1
  • 2. whoami Florian Latzel ● @fl3a ● http://is-loesungen.de ● http://netzaffe.de features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   2
  • 3. whoami: f – l – 3 – what?! ● @fl3a → flEa features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   3
  • 4. whoami: f – l – 3 – what?! ● @fl3a → flea [fliː] features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   4
  • 5. whoami: f – l – 3 – what?! ● @fl3a → flea [fliː] features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   5
  • 6. whoami: f – l – 3 – what?! ● @fl3a → flea [fliː] features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   6
  • 7. whoami: fl3a → flEa → flea → floh... ● @fl3a → floh features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   7
  • 8. cat features+/toc.txt ● Questions ● Conclusion ● Features ● Drupal API ● Drush ● Installation profiles ● The Plus features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   8
  • 9. Questions: What is stored where? Filesystem: Database: ● Code ● Drupal Settings ● Code Settings ● Modules Settings ● Content Types ● Content ● Views ● Rules ● ... features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   9
  • 10. Questions: What is exportable* right now? Filesystem: Database: ● Code ● Drupal Settings ● Code Settings ● Modules Settings ● Content Types ● Content *(and importable) ● Views ● Rules ● ... features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   10
  • 12. Questions: How to cooperate with a team*? ● Working together on live? features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   12
  • 13. Questions: How to cooperate with a team*? ● Working together on live? ● Working with ftp? features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   13
  • 14. Questions: How to cooperate with a team*? ● Working together on live? ● Working with ftp? ● Sharing sqldumps? features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   14
  • 15. Questions: How to cooperate with a team*? ● Working together on live? ● Working with ftp? ● Sharing sqldumps? ● Overwriting others' work? *(Perhaps a distributed team) features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   15
  • 16. Questions: How to handle the staging issue? Everything works on dev. Now what? features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   16
  • 17. Questions: How to handle the staging issue? Everything works on dev. Now what? ● Install modules again on stage features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   17
  • 18. Questions: How to handle the staging issue? Everything works on dev. Now what? ● Install modules again on stage ● Export Views, Rules, CT's manually from dev* * Also possible via code for Rules[1] and Views[2] features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   18
  • 19. Questions: How to handle the staging issue? Everything works on dev. Now what? ● Install modules again on stage ● Export Views, Rules, CT's manually from dev* ● Import them manually into stage features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   19
  • 20. Questions: How to handle the staging issue? Whats about the „unexportable“ functionality? features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   20
  • 21. Questions: How to handle the staging issue? Whats about the „unexportable“ functionality? Reproduce manually! features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   21
  • 22. Questions: How to handle the staging issue? Whats about the „unexportable“ functionality? Reproduce manually: ● Module Settings / Configuration features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   22
  • 23. Questions: How to handle the staging issue? Whats about the „unexportable“ functionality? Reproduce manually: ● Module Settings / Configuration ● Roles and its Permissions features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   23
  • 24. Questions: How to handle the staging issue? Whats about the „unexportable“ functionality? Reproduce manually: ● Module Settings / Configuration ● Roles and its Permissions ● And so on... features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   24
  • 25. Questions: How to handle the staging issue? Whats about the „unexportable“ functionality? Reproduce manually: ● Module Settings / Configuration ● Roles and its Permissions ● And so on... ● Ooops, i forgot the live environment, repeat.... features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   25
  • 27. Conclusion ● Not a good strategy for a team... features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   27
  • 28. Conclusion ● Not a good strategy for a team... ● No granularity... features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   28
  • 29. Conclusion ● Not a good strategy for a team... ● No granularity... ● Mostly cumbersome work... features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   29
  • 30. Conclusion ● Not a good strategy for a team... ● No granularity... ● Mostly cumbersome work... ● Hard to use repeating patterns... features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   30
  • 31. Conclusion ● Not a good strategy for a team... ● No granularity... ● Mostly cumbersome work... ● Hard to use repeating patterns... ● Prone to errors... features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   31
  • 32. Conclusion ● Not a good strategy for a team... ● No granularity... ● Mostly cumbersome work... ● Hard to use repeating patterns... ● Prone to errors... ● No revision history... features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   32
  • 33. Conclusion ● Not a good strategy for a team... ● No granularity... ● Mostly cumbersome work... ● Hard to use repeating patterns... ● Prone to errors... ● No revision history... ● No VCS / SCM... features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   33
  • 35. features: The Features Module Features http://drupal.org/project/features Requires ctools http://drupal.org/project/ctools ● Uses the ctools export API ● Export functionality and configuration into code ● Code means Drupal Module features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   35
  • 36. features: What can it handle? Drupal Core: ● CCK Fields ● CCK Fieldgroups ● Content Types ● Dependencies (required modules) ● Menus and Menu links* ● Permissions ● Roles ● Taxonomy (Vocabularies)* * Currently in development. features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   36
  • 37. features: What can it handle? Contributed Modules: ● Context ● ImageCache ● CKEditor Profiles ● Panels (Page Manager) ● Feeds ● Rules ● Flags (from 6.x-2.x) ● Views features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   37
  • 38. features: What is missing? ● Configuration ● Custom Blocks ● Input Formats ● Content features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   38
  • 39. features: Rule #35? Rule #35: "There's a Drupal module for that." [3] features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   39
  • 40. features: Rule #35 ­ Configuration Strongarm http://drupal.org/project/strongarm ● Settings are usually stored in {variables} ● Strongarm makes variables exportable via features ● Uses the ctools export API features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   40
  • 41. features: Rule #35 ­ Boxes Boxes http://drupal.org/project/boxes ● A reimplementation of custom blocks (boxes) ● Uses the ctools export API features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   41
  • 43. features: Rule #35 ­ Content Nodes, Node revisions, User, Taxonomy http://drupal.org/project/uuid_features ● Requires uuid → Universally Unique Identifier http://drupal.org/project/uuid ● e.g. node/259 gets the following uuid: f3159efc-3e1c-102e-882c-fd9c148d8804 features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   43
  • 44. Features: Rule #35 ­ import formats  Input Formats http://drupal.org/project/input_formats ● Allows you to export / import Input Formats manually like CT's and Views ● Features Module Integration ● Requires Exportables http://drupal.org/project/exportables ● Requires Strongarm and Ctools, too features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   44
  • 45. features: myfeature A Profile CT with... ● content_profile ● cck_private_fields ● flag_friend, flag_friend_access ● content_taxonomy ● And a lot of fields... features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   45
  • 46. features: myfeature myfeature/ ├── myfeature.features.content.inc ├── myfeature.features.fieldgroup.inc ├── myfeature.features.inc ├── myfeature.info ├── myfeature.module └── myfeature.strongarm.inc features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   46
  • 47. Features: myfeature.info core = "6.x" dependencies[] = "cck_private_fields" dependencies[] = "cck_private_fields_flag_friend" dependencies[] = "content_profile" ... description = "Myfeature desciption" features[ctools][] = "strongarm:strongarm:1" ... features[fieldgroup][] = "profile-group_personal" ... features[node][] = "profile" ... features[user_permission][] = "edit own profile content" features[user_permission][] = "edit privacy options for field field_relations features[user_permission][] = "view private data for field field_relationship ... features[user_role][] = "Community member" features[variable][] = "comment_anonymous_profile" ... name = "myfeature" package = "Features" features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   47
  • 49. Features: myfeature.features.inc (1) <?php /** * Implementation of hook_ctools_plugin_api(). */ function myfeature_ctools_plugin_api() { list($module, $api) = func_get_args(); if ($module == "strongarm" && $api == "strongarm") { return array("version" => 1); } } features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   49
  • 50. Features: myfeature.features.inc (2) /** * Implementation of hook_node_info(). */ function myfeature_node_info() { $items = array( 'profile' => array( 'name' => t('Profile'), 'module' => 'features', 'description' => t('A user profile built as content.'), 'has_title' => '1', 'title_label' => t('Title'), 'has_body' => '0', 'body_label' => '', 'min_word_count' => '0', 'help' => '', ), ); return $items; } features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   50
  • 51. Features: myfeature.features.inc <?php /** * Implementation of hook_ctools_plugin_api(). */ function myfeature_ctools_plugin_api() { list($module, $api) = func_get_args(); if ($module == "strongarm" && $api == "strongarm") { return array("version" => 1); } } features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   51
  • 52. features: myfeature.features.content.inc <?php /** * Implementation of hook_content_default_fields(). */ function myfeature_content_default_fields() { $fields = array(); ... // Exported field: field_relationship_status $fields['profile-field_relationship_status'] = array( 'field_name' => 'relationship_status', 'type_name' => 'profile', 'display_settings' => array( 'weight' => '37', 'parent' => 'group_common, 'label' => array( 'format' => 'above', ), ... 'allowed_values' => 'solo^M In a relationship^M complicated', ... 'label' => 'relationship status', ); } features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   52
  • 53. features: Specifications Kit [4] ● KIT Feature Specification (kitf 1.0-draft) ● KIT Theme Specification (kitt 1.0-draft) features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   53
  • 54. features: Known Issues Lost in translation [5]... ● e.g. a field is named 'Beziehungsstatus' ● e.g. in your myfeature.content.inc you will get: t('Beziehungsstatus') that will be used as translation source ● but it should be t('relationship status') ● Still a open issue in Features Module [6] ● Solution: Features Export Language [7] features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   54
  • 55. Drupal API: If a feature is not enough...  You know, Drupal has an API... Create Upgrade-Path's with Drupal's update.php ● Create myfeature.install file ● Implement hook_install() http://api.drupal.org/api/drupal/developer--hooks--install.php/function/hook_install/6 ● Implement hook_update_N() http://api.drupal.org/api/drupal/developer--hooks--install.php/function/hook_update_N/6 Perhaps you might use db_query() or implement hook_you_name_it() features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   55
  • 57. drush fu Features Module provides some drush commands: ● drush features ● drush features-export [feature name] [component list] ● drush features-update [feature name] ● drush features-revert [feature name] ● drush features-diff [feature name] features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   57
  • 58. drush: Useful features related extensions ● Features Clone http://drupal.org/project/features_clone ● Features Plumber http://drupal.org/project/features_plumber ● Features Fetch http://drupal.org/project/features_fetch features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   58
  • 59. Installation profiles You might know Installation Profiles from... ● DrupalCenter ● OpenAtrium ● Acquia Drupal ● Commons ● Open Publish ● ... features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   59
  • 60. Installation Profiles: myprofile drupal-6.x/ ├── COPYRIGHT.txt ├── cron.php ├── includes ├── index.php ├── install.php ├── misc ├── modules ├── profiles │ ├── default │ │ └── default.profile │ └── myprofile │ ├── myprofile.profile │ └── translations │ └── de.po ├── robots.txt ├── scripts ├── sites ├── themes ├── update.php └── xmlrpc.php features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   60
  • 61. Installation Profile: myprofile.profile /** * Implementation of hook_profile_modules() * * @return * array of modules to be required and activated */ function myprofile_profile_modules(){ return array( // feature-stuff 'myfeature', … ); } features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   61
  • 62. The Plus ● Perhaps your own Drupal Distribution? features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   62
  • 63. The Plus ● Perhaps your own Drupal Distribution? ● Feature Server http://drupal.org/project/fserver features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   63
  • 64. The Plus ● Perhaps your own Drupal Distribution? ● Feature Server http://drupal.org/project/fserver ● Drush Make http://drupal.org/project/drush_make features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   64
  • 65. The Plus ● Perhaps your own Drupal Distribution? ● Feature Server http://drupal.org/project/fserver ● Drush Make http://drupal.org/project/drush_make ● Drush make UI http://drupal.org/project/drush_make_ui features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   65
  • 66. The Plus ● Perhaps your own Drupal Distribution? ● Feature Server http://drupal.org/project/fserver ● Drush Make http://drupal.org/project/drush_make ● Drush make UI http://drupal.org/project/drush_make_ui ● drush site-install (in drush core >= 4.0) features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   66
  • 67. The Plus ● Perhaps your own Drupal Distribution? ● Feature Server http://drupal.org/project/fserver ● Drush Make http://drupal.org/project/drush_make ● Drush make UI http://drupal.org/project/drush_make_ui ● drush site-install (in drush core >= 4.0) ● CI – Continious Integration (with e.g. Hudson / Jenkins) features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   67
  • 68. echo ­e “Thank you!n“ Questions? ● @fl3a ● http://is-loesungen.de ● http://netzaffe.de features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de   68
  • 69. cat ~/feature+/appendix/references.txt [1] http://drupal.org/node/298634 [2] http://api.lullabot.com/hook_views_default_views [3] Robert Douglass at DrupalCamp Stockholm http://twitter.com/#!/toddross/statuses/1970578988 [4] http://drupal.org/project/kit [5] http://blog.erdfisch.de/2011/05/features-international [6] http://drupal.org/node/874760 [7] http://drupal.org/sandbox/xamanu/1161994 features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de  
  • 70. cat ~/feature+/appendix/image­credits.txt ● Flea (RHCP) http://en.wikipedia.org/wiki/File:Flea_in_skeleton_t-shirt.jpg ● Flea (anatomy) http://en.wikipedia.org/wiki/File:Scheme_flea_anatomy-en.svg ● Feature Monster http://drupal.org/files/images/features_monster.png ● The future of drupal features http://www.flickr.com/photos/developmentseed/3575550279/ ● Strongarm Monster http://drupal.org/files/images/strongarm.png ● Boxes Monster http://drupal.org/node/820924 ● „Node Collision“ http://www.slideshare.net/eaton/drupal-deployment-presentation ● Adrian <3 drush http://www.flickr.com/photos/developmentseed/3614279203/ Feature related images by developmentSEED, monsters by Saman Bemel Benrud features+ | 2011­09­18 | drupalcity.de | Florian Latzel | http://is­loesungen.de