SlideShare a Scribd company logo
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 Tartu
René 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 Nashville
Irina Zaks
 
The OpenEuropa Initiative
The OpenEuropa InitiativeThe OpenEuropa Initiative
The OpenEuropa Initiative
Nuvole
 
Using Features
Using FeaturesUsing Features
Using Features
Alexandru Badiu
 
Doctrine Php Object Relational Mapper
Doctrine Php Object Relational MapperDoctrine Php Object Relational Mapper
Doctrine Php Object Relational Mapper
guesta3af58
 
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
 
Drupal in-depth
Drupal in-depthDrupal in-depth
Drupal in-depth
Kathryn Carruthers
 
2014 hadoop wrocław jug
2014 hadoop   wrocław jug2014 hadoop   wrocław jug
2014 hadoop wrocław jug
Wojciech Langiewicz
 
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 8
Hector 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 hood
Guido 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 tool
RUDDER
 
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
Factor-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 wins
Matteo 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 CMS
Marco Lancellotti
 
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
Commit Software Sh.p.k.
 
Becoming A Drupal Master Builder
Becoming A Drupal Master BuilderBecoming A Drupal Master Builder
Becoming A Drupal Master Builder
Philip Norton
 
XPages Blast - Ideas, Tips and More
XPages Blast - Ideas, Tips and MoreXPages Blast - Ideas, Tips and More
XPages Blast - Ideas, Tips and More
Teamstudio
 
Pythonsevilla2019 - Introduction to MLFlow
Pythonsevilla2019 - Introduction to MLFlowPythonsevilla2019 - Introduction to MLFlow
Pythonsevilla2019 - Introduction to MLFlow
Fernando 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 felice
DrupalDay
 
Praes
PraesPraes
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
Mediacurrent
 
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
 
Devops For Drupal
Devops  For DrupalDevops  For Drupal
Devops For Drupal
Kris Buytaert
 
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
NETNODE AG
 
Making your first contribution to Foreman
Making your first contribution to ForemanMaking your first contribution to Foreman
Making your first contribution to Foreman
Dominic Cleal
 
(some) Drupal Theming by Ryan Price
(some) Drupal Theming by Ryan Price(some) Drupal Theming by Ryan Price
(some) Drupal Theming by Ryan Price
Ryan Price
 
DITA on a Shoe String
DITA on a Shoe StringDITA on a Shoe String
DITA on a Shoe String
Stan 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 module
tedbow
 

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 Scrum
Florian Latzel
 
Agiles Projektmanagement mit Scrum
Agiles Projektmanagement mit ScrumAgiles Projektmanagement mit Scrum
Agiles Projektmanagement mit Scrum
Florian Latzel
 
Agiles Projektmanagement mit Scrum
Agiles Projektmanagement mit ScrumAgiles Projektmanagement mit Scrum
Agiles Projektmanagement mit Scrum
Florian 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 surface
Florian Latzel
 
Scrum aus der Praxis - DrupalDevDays 2010
Scrum aus der Praxis - DrupalDevDays 2010Scrum aus der Praxis - DrupalDevDays 2010
Scrum aus der Praxis - DrupalDevDays 2010
Florian Latzel
 
drush_multi @ DrupalDevDays 2010
drush_multi @ DrupalDevDays 2010drush_multi @ DrupalDevDays 2010
drush_multi @ DrupalDevDays 2010
Florian Latzel
 
Drush und Multisite: drush_multi
Drush und Multisite: drush_multiDrush und Multisite: drush_multi
Drush und Multisite: drush_multi
Florian 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 Kommandozeile
Florian 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

20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
Pixlogix Infotech
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 

Recently uploaded (20)

20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 

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