SlideShare una empresa de Scribd logo
1 de 173
Descargar para leer sin conexión
Drupal 7

Angela “webchick” Byron, Drupalcon DC
            March 4, 2009
About Me
•   Started Drupal in 2005 as
    Google Summer of Code
    student

•   Obsessed with everything
    Drupal (especially getting
    new people involved!)

•   Using Drupal co-author,
    Drupal Association board
    member, Drupal 7
    maintainer

•   Work at Lullabot doing
    consulting and education
Agenda

• What happens during release?
• What’s done so far?
• What’s in the future?
• How can you help?
• Questions?
http://flickr.com/photos/earthandeden/
Mom, where
does Drupal
come from?


 A tour of the Drupal
    release cycle.
Step 1: Release the
 current version!
Step 1: Release the
         current version!
    !
   W
NE




 Drupal 6
Step 1: Release the
         current version!
    !
   W
NE




 Drupal 6
Step 2: Open up next
version for development




 Drupal 6
Step 2: Open up next
version for development




 Drupal 6
Step 2: Open up next
version for development




 Drupal 6
Step 2: Open up next
version for development




 Drupal 6     Drupal 7 (HEAD)
Drupal 4.7




http://flickr.com/photos/shashchatter/
http://flickr.com/photos/shashchatter/
              Drupal 4.7




Note: Drupal 5 retires when Drupal 7 is released.
Step 3: “Code thaw”




http://flickr.com/photos/monikahoinkis/
http://flickr.com/photos/monikahoinkis/
Step 3: “Code thaw”
  Fix things that have always annoyed
  you.
http://flickr.com/photos/monikahoinkis/
Step 3: “Code thaw”
  Fix things that have always annoyed
  you.

  Add features that take Drupal to the
  next level.
http://flickr.com/photos/monikahoinkis/
Step 3: “Code thaw”
  Fix things that have always annoyed
  you.

  Add features that take Drupal to the
  next level.

 Integrate useful contributed modules.
http://flickr.com/photos/monikahoinkis/
Step 3: “Code thaw”
  Fix things that have always annoyed
  you.

  Add features that take Drupal to the
  next level.

 Integrate useful contributed modules.

 World domination!
Step 4: “Code freeze”
Step 4: “Code freeze”
Step 4: “Code freeze”
Step 4: “Code freeze”




      Alpha / Beta / RC
Step 5: GOTO Step 1
Step 5: GOTO Step 1

    !
   W
NE




 Drupal 7
Step 5: GOTO Step 1

    !
   W
NE




 Drupal 7
Step 6: Port all your
       modules. ;)



Drupal 7
Where are we?


  code thaw                                       code freeze*




*Code freeze not necessarily drawn to scale. ;)
Where are we?


                             code thaw                                            code freeze*

Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep
08 08 08 08 08 08 08 08 08 08 08 09 09 09 09 09 09 09 09 09




                           *Code freeze not necessarily drawn to scale. ;)
Where are we?
February, 2008
Drupal 6 released
Drupal 7 opened




                              code thaw                                            code freeze*

 Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep
 08 08 08 08 08 08 08 08 08 08 08 09 09 09 09 09 09 09 09 09




                            *Code freeze not necessarily drawn to scale. ;)
Where are we?
                                      March, 2009
February, 2008
                                      Drupalcon DC
Drupal 6 released
                                      (we are here now)
Drupal 7 opened




                              code thaw                                            code freeze*

 Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep
 08 08 08 08 08 08 08 08 08 08 08 09 09 09 09 09 09 09 09 09




                            *Code freeze not necessarily drawn to scale. ;)
Where are we?
                                                               September 1, 2009
                                      March, 2009
February, 2008
                                                               Code freeze
                                      Drupalcon DC
Drupal 6 released
                                      (we are here now)
Drupal 7 opened




                              code thaw                                            code freeze*

 Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep
 08 08 08 08 08 08 08 08 08 08 08 09 09 09 09 09 09 09 09 09




                            *Code freeze not necessarily drawn to scale. ;)
Where are we?
                                                               September 1, 2009
                                      March, 2009
February, 2008
                                                               Code freeze
                                      Drupalcon DC
Drupal 6 released
                                      (we are here now)
Drupal 7 opened                                                                       “When it’s ready”
                                                                                      Drupal 7 release




                              code thaw                                            code freeze*

 Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep
 08 08 08 08 08 08 08 08 08 08 08 09 09 09 09 09 09 09 09 09




                            *Code freeze not necessarily drawn to scale. ;)
Where are we?
                                                               September 1, 2009
                                      March, 2009
February, 2008
                                                               Code freeze
                                      Drupalcon DC
Drupal 6 released
                                      (we are here now)
Drupal 7 opened                                                                       “When it’s ready”
                                                                                      Drupal 7 release
                                                           6 months left!




                              code thaw                                            code freeze*

 Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep
 08 08 08 08 08 08 08 08 08 08 08 09 09 09 09 09 09 09 09 09




                            *Code freeze not necessarily drawn to scale. ;)
When is “When it’s
    ready”?
When is “When it’s
    ready”?
When is “When it’s
    ready”?
When is “When it’s
     ready”?

When this number
 becomes zero.
Should I start building
  sites on Drupal 7?
Should I start building
  sites on Drupal 7?



  NO!
Should I start porting
modules to Drupal 7?
Should I start porting
modules to Drupal 7?



 YES!
Should I start porting
modules to Drupal 7?



 YES!
                     *
Should I start porting
modules to Drupal 7?



 YES!
                                         *




     * Sense of adventure required. ;)
Will $feature be in
     Drupal 7?
Will $feature be in
      Drupal 7?

   IT
DEPENDS.
Drupal is a...
Drupal is a...

DO-OCRACY
Drupal is a...

DO-OCRACY
 The work that gets done is the work that people
       like you (yes, you!) actually do! :)
“Core maintainers”


                       Dries Buytaert
                      Drupal project lead




   Neil Drumm           Gábor Hojtsy          Angela Byron
Drupal 5 maintainer   Drupal 6 maintainer   Drupal 7 maintainer
SLAC
         “Core maintainers”



                          KERS
                       Dries Buytaert
                      Drupal project lead




   Neil Drumm           Gábor Hojtsy          Angela Byron
Drupal 5 maintainer   Drupal 6 maintainer   Drupal 7 maintainer
The people who do
 the actual work. ;)




                        Over 300 contributors
                       to 1,000+ patches so far!
(some of)
Team Drupal 7
(some of)
Team Drupal 7
Help wanted!




http://drupal.org/community-initiatives/drupal-core
             Sprint Day on Saturday!
What’s new

                     ?
in Drupal 7?


 So far, anyway...
Changes for
site builders
New Minimum
Requirements

               5.0
    5.2

               8.3
Installation
Installation
Installation
Installation
Installation
Installation
Installation
Default profile
Default profile
Default profile
Default profile
Permission screen
Permission screen
Permission screen
Users can cancel own
      accounts
Users can cancel own
      accounts
Users can cancel own
      accounts
Users can cancel own
      accounts
Improved Translation
     Interface
Improved Translation
     Interface
Forums
Forums
Content Type Screen
Content Type Screen
Content Type Screen
Content Type Screen
Content Type Screen
Modules page
Modules page
Modules page
Modules page
Themes page
Themes page
Themes page
Configurable Error
   Reporting
Configurable Error
   Reporting
Configurable Error
   Reporting
What’s next for
        usability?
• Vastly improved Help system
• Clearer separation of admin vs. user tasks
• Filter system improvements
• Mark Boulton Design to help re-design
  Drupal 7
• Fixing issues found in University of
  Baltimore usability study (Designers, come
  and join us!)
Sign me up!
• http://drupal.org/community-initiatives/
  drupal-core/usability
• http://groups.drupal.org/usability
• http://groups.drupal.org/mark-boulton-
  design-drupal-7-project
• Go to the Usability team’s sessions on
  Thursday afternoon!
Changes for
 designers
Re-vamped page.tpl.php
Re-vamped page.tpl.php
Re-vamped page.tpl.php
Re-vamped page.tpl.php

• Re-engineered XHTML structure to facilitate
  CSS-only design.
Re-vamped page.tpl.php

• Re-engineered XHTML structure to facilitate
  CSS-only design.
• Standard, semantic class/ID names   (.section,
  #navigation, etc.)
Re-vamped page.tpl.php

• Re-engineered XHTML structure to facilitate
  CSS-only design.
• Standard, semantic class/ID names   (.section,
  #navigation, etc.)
• Improved consistency throughout.
Re-vamped page.tpl.php

• Re-engineered XHTML structure to facilitate
  CSS-only design.
• Standard, semantic class/ID names   (.section,
  #navigation, etc.)
• Improved consistency throughout.
• Enables designers to create beautiful, CSS-
  only themes without touching PHP.
And to show it off...
Stark: “Naked” Drupal
drupal_add_js()
       improvements
• Now pass in $options rather than 500
  function arguments
• Uses actual weighting rather than awkward
  ‘core’ vs. ‘module’ vs. ‘theme’ types.
• Add external JavaScript files to the page.
• hook_js_alter()
• drupal_add_css() is next!
Cross-library
               compatibility                  works in
                                                6!
Before:                      After:

                             (function($) {

$('a').fadeOut().fadeIn();   $('a').fadeOut().fadeIn();

                             })(jQuery);
What’s next for
       designers?
• Re-vamped node, block, comment, etc.
  templates to further cater to CSS-only
  themes.
• Removing old core themes (and adding new
  ones)?
• jQuery 1.3.x (and jQuery UI?)
• Additional interface elements: pop-ups,
  modal dialogs, vertical tabs, results filters...
Sign me up!
• http://drupal.org/community-initiatives/
  drupal-core/theming
• http://groups.drupal.org/theme-
  development
• http://drupal.org/community-initiatives/
  drupal-core/javascript
• http://groups.drupal.org/javascript
Changes for
  coders
               01110111 01101001 01101100
              01101100 00100000 01100011 01101111
              01100100 01100101 00100000 01110000
              01101000 01110000 00100000 01100110
              01101111 01110010 00100000 01100110
               01101111 01101111 01100100
Warning:
Things are about to
   get... geeky.
http://www.flickr.com/photos/sebastian_bergmann/
SimpleTest
SimpleTest
SimpleTest
SimpleTest
SimpleTest
• Writing tests causes you to really think
  through a problem, and helps flesh out
  obscure bugs.
SimpleTest
• Writing tests causes you to really think
  through a problem, and helps flesh out
  obscure bugs.
• Know instantly if your changes break
  something; freedom to refactor wildly.
SimpleTest
• Writing tests causes you to really think
  through a problem, and helps flesh out
  obscure bugs.
• Know instantly if your changes break
  something; freedom to refactor wildly.
• Submit a test with your bug fix, it’ll stay
  fixed forever.
SimpleTest
• Writing tests causes you to really think
  through a problem, and helps flesh out
  obscure bugs.
• Know instantly if your changes break
  something; freedom to refactor wildly.
• Submit a test with your bug fix, it’ll stay
  fixed forever.
• Over 75% test coverage!
SimpleTest
                                              works in
Excerpt from modules/block/block.test:
                                                6!
testing.drupal.org
testing.drupal.org
testing.drupal.org
testing.drupal.org
testing.drupal.org
• “Patch (code needs review)” and “Patch
  (reviewed & tested by community)”
  statuses can now be trusted.
testing.drupal.org
• “Patch (code needs review)” and “Patch
  (reviewed & tested by community)”
  statuses can now be trusted.
• Reviewers no longer getting carpal tunnel
  clicking through all the basic stuff.
testing.drupal.org
• “Patch (code needs review)” and “Patch
  (reviewed & tested by community)”
  statuses can now be trusted.
• Reviewers no longer getting carpal tunnel
  clicking through all the basic stuff.
• Running the full test suite takes a long
  time; let a computer do it for you!
testing.drupal.org
• “Patch (code needs review)” and “Patch
  (reviewed & tested by community)”
  statuses can now be trusted.
• Reviewers no longer getting carpal tunnel
  clicking through all the basic stuff.
• Running the full test suite takes a long
  time; let a computer do it for you!
• Notifies author within 24 hours if patch no
  longer applies or breaks tests.
What’s next for testing?
• testing.drupal.org testing on multiple
  databases/platforms
• Automated testing for contributed modules
• Testing site per patch
• Automated testing for JavaScript
• Improved core test coverage
Sign me up!
• http://drupal.org/community-initiatives/
  drupal-core/testing
• http://groups.drupal.org/testing-qa
• testing.drupal.org back-end:
  Go see the “Saving Webchick Time” session
• Donate to testing framework
  improvements @ http://testing.drupal.org/
Database
The next geNERATION
The who in the what
          now?
•   Database abstraction layer built with PHP Data
    Objects (PDO)

•   Theoretical support for any database PHP
    supports; mysql, sqlite, and pgsql drivers in D7.

•   Dynamic query builder (db_rewrite_sql is
    DEAD!), with support for old-fashioned SELECTs
    for simple queries.

•   Transaction support

•   Master/slave replication
Static Select Queries
Drupal 6:
$result = db_query(quot;SELECT nid, title FROM {node} WHERE
type = '%s' AND nid = %dquot;, array($type, $nid));
$node = db_fetch_object($result);




Drupal 7:
$node = db_query('SELECT nid, title FROM {node} WHERE
type = :type AND nid = :nid', array(':type' => $type,
':nid' => $nid))->fetchObject();
Dynamic Select
                Queries
Drupal 6:
$result = pager_query(db_rewrite_sql('SELECT n.nid FROM {node} n
WHERE n.promote = 1 AND n.status = 1 ORDER BY n.sticky DESC,
n.created DESC'), variable_get('default_nodes_main', 10));


Drupal 7:
$select = db_select('node', 'n')
  ->fields('n', array('nid'))
  ->condition('promote', 1)
  ->condition('status', 1)
  ->orderBy('sticky', 'DESC')
  ->orderBy('created', 'DESC')
  ->extend('PagerDefault')
  ->limit(variable_get('default_nodes_main', 10))
  ->addTag('node_access');
Other Queries
 Insert                                           Delete
$nid = db_insert('node')
                                                  $num_deleted = db_delete('node')
  ->fields(array('title', 'uid'))
                                                    ->condition('nid', 5)
  ->values(array(
                                                    ->execute();
     'title' => 'Example',
     'uid' => 1,
  ))
  ->execute();



                      Update
                     $num_updated = db_update('node')
                       ->fields(array(
                          'uid' => 5,
                          'status' => 1,
                       ))
                       ->condition('created', REQUEST_TIME - 3600, '>=')
                       ->execute();
hook_query_alter()
Drupal 6:
function hook_db_rewrite_sql($query, $primary_table, $primary_field, $args) {
  switch ($primary_field) {
    case 'nid':
      $return = array();
      if ($primary_table != 'n') {
        $return['join'] = quot;LEFT JOIN {node} n ON $primary_table.nid = n.nidquot;;
      }
      $return['where'] = 'created >' . time() - 3600;
      return $return;
      break;
}



Drupal 7:
function hook_query_alter(&$query) {
  if ($query->hasTag(‘node_access’)) {
    $query->condition(‘created’, time() - 3600, ‘>’);
  }
}
What’s next for
       databases?
• Improvements to:
 • Slave replication
 • Schema API
 • Update system
 • Multiple database support
• Conversion of all core queries to DBTNG
Sign me up!

• http://drupal.org/community-initiatives/
  drupal-core/database
• http://groups.drupal.org/database
• DBTNG session (uh. right now :)
• API docs: http://drupal.org/node/310069
• Core conversion party on Saturday!
Field API




http://www.flickr.com/photos/piper/
About Field API
• CCK API in Drupal core (UI in contrib)
• No longer node-specific: can attach fields
  to users, potentially other objects.
• Swappable storage back-ends (currently,
  SQL but potentially web services, etc.)
• Consistent way of storing/referencing fields
  to ease making changes.
Overview
                                           Bundles
                       Field
  Fields
                     instances             name = Article
name = subtitle                            type = node
type = text
                     Article subtitle
                     widget = text area    name = User
name = photo                               type = user
type = image         Article photo
                     widget = file upload
                                           Group of fields
                                            that make up
 Base types          User photo
                                           a larger entity
                     widget = file upload



                     A field attached
                  to a particular bundle
CCK Today
      content_type_profile
         (content type)
nid      vid    name     gender   age   color    picture
1        1       Sally      F     37    Purple   sally.png
2        2      Jesse       M     32     Red     jesse.png
CCK Today
CCK Today
        content_type_profile
           (content type)
nid        vid     name         gender   age   color    picture
1           1       Sally            F   37    Purple   sally.png
2           2      Jesse             M   32     Red     jesse.png
content_field_fav_colors
   (multi-value field)
  nid      vid   delta      color
    1      1      0         Purple
    1      1      1         Green
    2      2      0          Red
CCK Today
CCK Today
       content_type_profile
          (content type)
 nid           vid           name     gender         age          picture
  1            1             Sally      F            37           sally.png
  2            2             Jesse      M            32          jesse.png

content_field_fav_colors                  content_field_picture
   (multi-value field)                        (shared field)
 nid     vid         delta   color      nid    vid             image
  1      1            0      Purple     1      1              sally.png
  1      1            1      Green      1      1           album_cover.png
Field API
                                                          “revision id”
“entity type”
                                                          Corresponds
  1 = user
                          field_data_name                 to node rev. ID
  2 = node
            etid         bundle    entity_id   revision_id   delta   name_value
                2        profile       1            1          0         Sally
                2        profile       2            2          0        Jesse

                      “bundle”             “entity id”
                      Name of             Corresponds
                    content type           to node ID
Field API
etid   bundle    entity_id   revision_id   delta   name_value
 2     profile       1            1          0          Sally
 2     profile       2            2          0          Jesse

etid   bundle    entity_id   revision_id   delta   gender_value
 2     profile       1            1          0           F
 2     profile       2            2          0           M

etid   bundle    entity_id   revision_id   delta   color_value
 2     profile       1            1          0         Purple
 2     profile       1            1          1         Green
 2     profile       2            2          0          Red

etid   bundle    entity_id   revision_id   delta   picture_value
 2     profile       1            1          0        sally.png
 2     profile       2            2          0        jesse.png
 2     album        3            3          0       cover.png
What’s next for Field
         API?
• Performance improvements with
  per-”bundle” storage and materialized
  views
• Translatable fields
• User Interface?
• Additional fields types (+ body/teaser/
  taxonomy?)
Sign me up!

• http://drupal.org/community-initiatives/
  drupal-core/fields
• http://groups.drupal.org/fields-core
• API documentation: http://api.drupal.org/
  api/group/field/7
Performance




              http://flickr.com/photos/thatguyfromcchs08/
Registry
Registry
Registry
• Auto-parses and caches list of all functions,
  classes, and interfaces in all files
Registry
• Auto-parses and caches list of all functions,
  classes, and interfaces in all files
• Facilitates faster hook calls; only loop
  through modules that implement a hook
Registry
• Auto-parses and caches list of all functions,
  classes, and interfaces in all files
• Facilitates faster hook calls; only loop
  through modules that implement a hook
• Allows more fine-grained break-up of code
  (ex: all “info” functions in
  module.registry.inc)
Registry
• Auto-parses and caches list of all functions,
  classes, and interfaces in all files
• Facilitates faster hook calls; only loop
  through modules that implement a hook
• Allows more fine-grained break-up of code
  (ex: all “info” functions in
  module.registry.inc)
• Need to register all files in .info:
Registry
• Auto-parses and caches list of all functions,
  classes, and interfaces in all files
• Facilitates faster hook calls; only loop
  through modules that implement a hook
• Allows more fine-grained break-up of code
  (ex: all “info” functions in
  module.registry.inc)
• Need to register all files in .info:
Registry
• Auto-parses and caches list of all functions,
  classes, and interfaces in all files
• Facilitates faster hook calls; only loop
  through modules that implement a hook
• Allows more fine-grained break-up of code
  (ex: all “info” functions in
  module.registry.inc)
• Need to register all files in .info:
            files[] = example.module
            files[] = example.install
No more $op
                                      works in
                                        6!
• hook_nodeapi(), hook_user(),
  hook_block(), etc. are no longer “mega”
  hooks:
 • hook_nodeapi_load(),
    hook_nodeapi_update()
 • hook_user_register(), hook_user_login()
 • hook_block_list(), hook_block_view()
 • hook_form_FORM_ID_alter()
Multi-load!

• node_load_multiple()
• file_load_multiple()
• taxonomy_term_load_multiple()
• user_load_multiple() (coming soon!)
File API




http://flickr.com/photos/bunny/
File API improvements
• Files are now first-class objects
• hook_file_load(), hook_file_save(),
  hook_file_move(), etc.
• Files are managed automatically; no need to
  deal with {files} table yourself
• Potential for modules to share files
What’s next for files?

• Image handling in core (for real this time?)
• File management console
• Native file fields
• Improved private file handling?
Sign me up!
• http://drupal.org/community-initiatives/
  drupal-core/files
• http://drupal.org/community-initiatives/
  drupal-core/images
• http://groups.drupal.org/file-api
• http://groups.drupal.org/image
Hooks




http://flickr.com/photos/yabanji/
New Hooks in D7

• hook_modules_X(): installed, enabled,
  disabled, uninstalled
• hook_taxonomy_term_X(): load, insert,
  update, delete
• hook_taxonomy_vocabulary_X(): load,
  insert, update, delete
• hook_aggregator_X(): fetch, parse, process,
  remove
hook_page_alter()
Drupal 6:                                    Drupal 7:
function page_callback($nids) {              function page_callback($nids) {
  $output =                                    $nodes = node_load_multiple($nids);
    t('Welcome to a big list of nodes.');      $build['message'] = array(
  foreach ($nids as $nid) {                       '#markup' =>
    $output .= node_view(node_load($nid));          t('Welcome to a big list of nodes.'),
 }                                             );
  $output .= theme('pager');                   foreach ($nodes as $node) {
                                                  $build['nodes'][$node->nid] =
  return $output;                                   node_build($node);
}                                             }
                                               $build['pager'] = array(
                                                  '#markup' => theme('pager'),
                                                  '#weight' => 5,
                                               );

                                               return drupal_get_page($build);
                                             }
$page object
$page['left']['blocks']['user-navigation']['#block'] = (block
object);
$page['content']['message']['#markup'] = 'Welcome to a big list of
nodes.';
$page['content']['nodes'] = (array of node objects keyed by node ID);
$page['content']['pager']['#markup'] = (HTML markup of pager);
$page['footer']['blocks']['system-powered-by']['#block'] = (block
object);




                       Mwahahahahaha....!
Questions?

Más contenido relacionado

La actualidad más candente

Scaling Etsy: What Went Wrong, What Went Right
Scaling Etsy: What Went Wrong, What Went RightScaling Etsy: What Went Wrong, What Went Right
Scaling Etsy: What Went Wrong, What Went RightRoss Snyder
 
Introduce cocoapods
Introduce cocoapodsIntroduce cocoapods
Introduce cocoapodsJason Huang
 
Responsive & Ready: Why Drupal 8 is Ideal for Building Mobile-first Experienc...
Responsive & Ready: Why Drupal 8 is Ideal for Building Mobile-first Experienc...Responsive & Ready: Why Drupal 8 is Ideal for Building Mobile-first Experienc...
Responsive & Ready: Why Drupal 8 is Ideal for Building Mobile-first Experienc...Acquia
 
Modernisation of Legacy PHP Applications to Symfony2 - Symfony Live Berlin 2012
Modernisation of Legacy PHP Applications to Symfony2 - Symfony Live Berlin 2012Modernisation of Legacy PHP Applications to Symfony2 - Symfony Live Berlin 2012
Modernisation of Legacy PHP Applications to Symfony2 - Symfony Live Berlin 2012Fabrice Bernhard
 
Co powinieneś wiedzieć na temat devops?f
Co powinieneś wiedzieć na temat devops?f Co powinieneś wiedzieć na temat devops?f
Co powinieneś wiedzieć na temat devops?f Maciej Lasyk
 
Gears and HTML 5 @media Ajax London 2008
Gears and HTML 5 @media Ajax London 2008Gears and HTML 5 @media Ajax London 2008
Gears and HTML 5 @media Ajax London 2008dion
 
Session #6: Get More Bang For Your Buck
Session #6: Get More Bang For Your BuckSession #6: Get More Bang For Your Buck
Session #6: Get More Bang For Your BuckSteve Lange
 

La actualidad más candente (7)

Scaling Etsy: What Went Wrong, What Went Right
Scaling Etsy: What Went Wrong, What Went RightScaling Etsy: What Went Wrong, What Went Right
Scaling Etsy: What Went Wrong, What Went Right
 
Introduce cocoapods
Introduce cocoapodsIntroduce cocoapods
Introduce cocoapods
 
Responsive & Ready: Why Drupal 8 is Ideal for Building Mobile-first Experienc...
Responsive & Ready: Why Drupal 8 is Ideal for Building Mobile-first Experienc...Responsive & Ready: Why Drupal 8 is Ideal for Building Mobile-first Experienc...
Responsive & Ready: Why Drupal 8 is Ideal for Building Mobile-first Experienc...
 
Modernisation of Legacy PHP Applications to Symfony2 - Symfony Live Berlin 2012
Modernisation of Legacy PHP Applications to Symfony2 - Symfony Live Berlin 2012Modernisation of Legacy PHP Applications to Symfony2 - Symfony Live Berlin 2012
Modernisation of Legacy PHP Applications to Symfony2 - Symfony Live Berlin 2012
 
Co powinieneś wiedzieć na temat devops?f
Co powinieneś wiedzieć na temat devops?f Co powinieneś wiedzieć na temat devops?f
Co powinieneś wiedzieć na temat devops?f
 
Gears and HTML 5 @media Ajax London 2008
Gears and HTML 5 @media Ajax London 2008Gears and HTML 5 @media Ajax London 2008
Gears and HTML 5 @media Ajax London 2008
 
Session #6: Get More Bang For Your Buck
Session #6: Get More Bang For Your BuckSession #6: Get More Bang For Your Buck
Session #6: Get More Bang For Your Buck
 

Destacado

Introduction to Drupal Basics
Introduction to Drupal BasicsIntroduction to Drupal Basics
Introduction to Drupal BasicsJuha Niemi
 
Introduction to Drupal for Absolute Beginners
Introduction to Drupal for Absolute BeginnersIntroduction to Drupal for Absolute Beginners
Introduction to Drupal for Absolute Beginnerseverlearner
 
Drupal Goes to College
Drupal Goes to CollegeDrupal Goes to College
Drupal Goes to CollegeDominik Lukes
 
A Gentle Introduction to Drupal's Views API
A Gentle Introduction to Drupal's Views APIA Gentle Introduction to Drupal's Views API
A Gentle Introduction to Drupal's Views APIDan Muzyka
 
Case Study - Developing Drupal Framework For ePublishing Platform Using Agile...
Case Study - Developing Drupal Framework For ePublishing Platform Using Agile...Case Study - Developing Drupal Framework For ePublishing Platform Using Agile...
Case Study - Developing Drupal Framework For ePublishing Platform Using Agile...Faichi Solutions
 
Introduction to Drupal
Introduction to DrupalIntroduction to Drupal
Introduction to Drupalsdmaxey
 
Introduction to Drupal features
Introduction to Drupal featuresIntroduction to Drupal features
Introduction to Drupal featuresStijn De Meyere
 
Drupal Module Development
Drupal Module DevelopmentDrupal Module Development
Drupal Module Developmentipsitamishra
 
Setting the Record Straight: Drupal as an Enterprise Web Content Management S...
Setting the Record Straight: Drupal as an Enterprise Web Content Management S...Setting the Record Straight: Drupal as an Enterprise Web Content Management S...
Setting the Record Straight: Drupal as an Enterprise Web Content Management S...Acquia
 
Drupal 7 cho người mới học
Drupal 7 cho người mới họcDrupal 7 cho người mới học
Drupal 7 cho người mới họcNgo Trung
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great InfographicsSlideShare
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShareKapost
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareEmpowered Presentations
 

Destacado (20)

Introduction to Drupal Basics
Introduction to Drupal BasicsIntroduction to Drupal Basics
Introduction to Drupal Basics
 
Introduction to Drupal for Absolute Beginners
Introduction to Drupal for Absolute BeginnersIntroduction to Drupal for Absolute Beginners
Introduction to Drupal for Absolute Beginners
 
Drupal
DrupalDrupal
Drupal
 
Drupal end.ppt
Drupal end.pptDrupal end.ppt
Drupal end.ppt
 
An Introduction to Drupal
An Introduction to DrupalAn Introduction to Drupal
An Introduction to Drupal
 
Drupal Goes to College
Drupal Goes to CollegeDrupal Goes to College
Drupal Goes to College
 
A Gentle Introduction to Drupal's Views API
A Gentle Introduction to Drupal's Views APIA Gentle Introduction to Drupal's Views API
A Gentle Introduction to Drupal's Views API
 
Case Study - Developing Drupal Framework For ePublishing Platform Using Agile...
Case Study - Developing Drupal Framework For ePublishing Platform Using Agile...Case Study - Developing Drupal Framework For ePublishing Platform Using Agile...
Case Study - Developing Drupal Framework For ePublishing Platform Using Agile...
 
Introduction to Drupal
Introduction to DrupalIntroduction to Drupal
Introduction to Drupal
 
Beginners Guide to Drupal
Beginners Guide to DrupalBeginners Guide to Drupal
Beginners Guide to Drupal
 
Introduction to Drupal features
Introduction to Drupal featuresIntroduction to Drupal features
Introduction to Drupal features
 
Drupal Module Development
Drupal Module DevelopmentDrupal Module Development
Drupal Module Development
 
Setting the Record Straight: Drupal as an Enterprise Web Content Management S...
Setting the Record Straight: Drupal as an Enterprise Web Content Management S...Setting the Record Straight: Drupal as an Enterprise Web Content Management S...
Setting the Record Straight: Drupal as an Enterprise Web Content Management S...
 
SlideShare 101
SlideShare 101SlideShare 101
SlideShare 101
 
13 cms ht14
13 cms ht1413 cms ht14
13 cms ht14
 
Drupal 7 cho người mới học
Drupal 7 cho người mới họcDrupal 7 cho người mới học
Drupal 7 cho người mới học
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great Infographics
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShare
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
 
You Suck At PowerPoint!
You Suck At PowerPoint!You Suck At PowerPoint!
You Suck At PowerPoint!
 

Similar a Drupal 7

Drupal haters gonna hate
Drupal haters gonna hateDrupal haters gonna hate
Drupal haters gonna hateMarcus Deglos
 
The State of Drupal 8
The State of Drupal 8The State of Drupal 8
The State of Drupal 8nyccamp
 
Drupal 8: Most common beginner mistakes
Drupal 8: Most common beginner mistakesDrupal 8: Most common beginner mistakes
Drupal 8: Most common beginner mistakesIztok Smolic
 
Building Drupal 8 Sites
Building Drupal 8 SitesBuilding Drupal 8 Sites
Building Drupal 8 SitesExove
 
Docker experience @inbotapp
Docker experience @inbotappDocker experience @inbotapp
Docker experience @inbotappJilles van Gurp
 
Bay Area Drupal Camp Efficiency
Bay Area Drupal Camp EfficiencyBay Area Drupal Camp Efficiency
Bay Area Drupal Camp Efficiencysmattoon
 
Building Websites of the Future With Drupal 7
Building Websites of the Future With Drupal 7Building Websites of the Future With Drupal 7
Building Websites of the Future With Drupal 7Jay Epstein
 
Building Websites of the Future With Drupal 7
Building Websites of the Future With Drupal 7Building Websites of the Future With Drupal 7
Building Websites of the Future With Drupal 7Jay Epstein
 
Drupal 8: Huge wins, a Bigger Community, and why you (and I) will Love it
Drupal 8: Huge wins, a Bigger Community, and why you (and I) will Love itDrupal 8: Huge wins, a Bigger Community, and why you (and I) will Love it
Drupal 8: Huge wins, a Bigger Community, and why you (and I) will Love itRyan Weaver
 
Java and Container - Make it Awesome !
Java and Container - Make it Awesome !Java and Container - Make it Awesome !
Java and Container - Make it Awesome !Dinakar Guniguntala
 
Anton Faibyshev - Drupal 8: lazy builder. What we need to build a house - we ...
Anton Faibyshev - Drupal 8: lazy builder. What we need to build a house - we ...Anton Faibyshev - Drupal 8: lazy builder. What we need to build a house - we ...
Anton Faibyshev - Drupal 8: lazy builder. What we need to build a house - we ...DrupalCamp Kyiv
 
Groovy there's a docker in my application pipeline
Groovy there's a docker in my application pipelineGroovy there's a docker in my application pipeline
Groovy there's a docker in my application pipelineKris Buytaert
 
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert NETWAYS
 
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...Eric Sembrat
 
ABQ Drupal Users Group Presentation 2014/07/10
ABQ Drupal Users Group Presentation 2014/07/10ABQ Drupal Users Group Presentation 2014/07/10
ABQ Drupal Users Group Presentation 2014/07/10Mark Casias
 
Why I've Not bothered With Drupal 8
Why I've Not bothered With Drupal 8Why I've Not bothered With Drupal 8
Why I've Not bothered With Drupal 8Robert Carr
 
Vagrant + Veewee : Barcampboston April 10-2011
Vagrant + Veewee : Barcampboston April 10-2011Vagrant + Veewee : Barcampboston April 10-2011
Vagrant + Veewee : Barcampboston April 10-2011Draco2002
 
ZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ON
ZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ONZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ON
ZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ONZensations GmbH
 

Similar a Drupal 7 (20)

Drupal haters gonna hate
Drupal haters gonna hateDrupal haters gonna hate
Drupal haters gonna hate
 
The State of Drupal 8
The State of Drupal 8The State of Drupal 8
The State of Drupal 8
 
Drupal 8: Most common beginner mistakes
Drupal 8: Most common beginner mistakesDrupal 8: Most common beginner mistakes
Drupal 8: Most common beginner mistakes
 
Building Drupal 8 Sites
Building Drupal 8 SitesBuilding Drupal 8 Sites
Building Drupal 8 Sites
 
Docker experience @inbotapp
Docker experience @inbotappDocker experience @inbotapp
Docker experience @inbotapp
 
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
 
Bay Area Drupal Camp Efficiency
Bay Area Drupal Camp EfficiencyBay Area Drupal Camp Efficiency
Bay Area Drupal Camp Efficiency
 
Building Websites of the Future With Drupal 7
Building Websites of the Future With Drupal 7Building Websites of the Future With Drupal 7
Building Websites of the Future With Drupal 7
 
Building Websites of the Future With Drupal 7
Building Websites of the Future With Drupal 7Building Websites of the Future With Drupal 7
Building Websites of the Future With Drupal 7
 
Drupal 8: Huge wins, a Bigger Community, and why you (and I) will Love it
Drupal 8: Huge wins, a Bigger Community, and why you (and I) will Love itDrupal 8: Huge wins, a Bigger Community, and why you (and I) will Love it
Drupal 8: Huge wins, a Bigger Community, and why you (and I) will Love it
 
Java and Container - Make it Awesome !
Java and Container - Make it Awesome !Java and Container - Make it Awesome !
Java and Container - Make it Awesome !
 
Anton Faibyshev - Drupal 8: lazy builder. What we need to build a house - we ...
Anton Faibyshev - Drupal 8: lazy builder. What we need to build a house - we ...Anton Faibyshev - Drupal 8: lazy builder. What we need to build a house - we ...
Anton Faibyshev - Drupal 8: lazy builder. What we need to build a house - we ...
 
Groovy there's a docker in my application pipeline
Groovy there's a docker in my application pipelineGroovy there's a docker in my application pipeline
Groovy there's a docker in my application pipeline
 
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
OSMC 2017 | Groovy There is a Docker in my Dashing Pipeline by Kris Buytaert
 
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...
 
ABQ Drupal Users Group Presentation 2014/07/10
ABQ Drupal Users Group Presentation 2014/07/10ABQ Drupal Users Group Presentation 2014/07/10
ABQ Drupal Users Group Presentation 2014/07/10
 
Why I've Not bothered With Drupal 8
Why I've Not bothered With Drupal 8Why I've Not bothered With Drupal 8
Why I've Not bothered With Drupal 8
 
Vagrant + Veewee : Barcampboston April 10-2011
Vagrant + Veewee : Barcampboston April 10-2011Vagrant + Veewee : Barcampboston April 10-2011
Vagrant + Veewee : Barcampboston April 10-2011
 
ZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ON
ZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ONZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ON
ZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ON
 
Updating drupal core in a git way
Updating drupal core in a git wayUpdating drupal core in a git way
Updating drupal core in a git way
 

Último

HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 

Último (20)

HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 

Drupal 7

  • 1. Drupal 7 Angela “webchick” Byron, Drupalcon DC March 4, 2009
  • 2. About Me • Started Drupal in 2005 as Google Summer of Code student • Obsessed with everything Drupal (especially getting new people involved!) • Using Drupal co-author, Drupal Association board member, Drupal 7 maintainer • Work at Lullabot doing consulting and education
  • 3. Agenda • What happens during release? • What’s done so far? • What’s in the future? • How can you help? • Questions?
  • 5. Step 1: Release the current version!
  • 6. Step 1: Release the current version! ! W NE Drupal 6
  • 7. Step 1: Release the current version! ! W NE Drupal 6
  • 8. Step 2: Open up next version for development Drupal 6
  • 9. Step 2: Open up next version for development Drupal 6
  • 10. Step 2: Open up next version for development Drupal 6
  • 11. Step 2: Open up next version for development Drupal 6 Drupal 7 (HEAD)
  • 13. http://flickr.com/photos/shashchatter/ Drupal 4.7 Note: Drupal 5 retires when Drupal 7 is released.
  • 14. Step 3: “Code thaw” http://flickr.com/photos/monikahoinkis/
  • 15. http://flickr.com/photos/monikahoinkis/ Step 3: “Code thaw” Fix things that have always annoyed you.
  • 16. http://flickr.com/photos/monikahoinkis/ Step 3: “Code thaw” Fix things that have always annoyed you. Add features that take Drupal to the next level.
  • 17. http://flickr.com/photos/monikahoinkis/ Step 3: “Code thaw” Fix things that have always annoyed you. Add features that take Drupal to the next level. Integrate useful contributed modules.
  • 18. http://flickr.com/photos/monikahoinkis/ Step 3: “Code thaw” Fix things that have always annoyed you. Add features that take Drupal to the next level. Integrate useful contributed modules. World domination!
  • 19. Step 4: “Code freeze”
  • 20. Step 4: “Code freeze”
  • 21. Step 4: “Code freeze”
  • 22. Step 4: “Code freeze” Alpha / Beta / RC
  • 23. Step 5: GOTO Step 1
  • 24. Step 5: GOTO Step 1 ! W NE Drupal 7
  • 25. Step 5: GOTO Step 1 ! W NE Drupal 7
  • 26. Step 6: Port all your modules. ;) Drupal 7
  • 27. Where are we? code thaw code freeze* *Code freeze not necessarily drawn to scale. ;)
  • 28. Where are we? code thaw code freeze* Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep 08 08 08 08 08 08 08 08 08 08 08 09 09 09 09 09 09 09 09 09 *Code freeze not necessarily drawn to scale. ;)
  • 29. Where are we? February, 2008 Drupal 6 released Drupal 7 opened code thaw code freeze* Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep 08 08 08 08 08 08 08 08 08 08 08 09 09 09 09 09 09 09 09 09 *Code freeze not necessarily drawn to scale. ;)
  • 30. Where are we? March, 2009 February, 2008 Drupalcon DC Drupal 6 released (we are here now) Drupal 7 opened code thaw code freeze* Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep 08 08 08 08 08 08 08 08 08 08 08 09 09 09 09 09 09 09 09 09 *Code freeze not necessarily drawn to scale. ;)
  • 31. Where are we? September 1, 2009 March, 2009 February, 2008 Code freeze Drupalcon DC Drupal 6 released (we are here now) Drupal 7 opened code thaw code freeze* Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep 08 08 08 08 08 08 08 08 08 08 08 09 09 09 09 09 09 09 09 09 *Code freeze not necessarily drawn to scale. ;)
  • 32. Where are we? September 1, 2009 March, 2009 February, 2008 Code freeze Drupalcon DC Drupal 6 released (we are here now) Drupal 7 opened “When it’s ready” Drupal 7 release code thaw code freeze* Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep 08 08 08 08 08 08 08 08 08 08 08 09 09 09 09 09 09 09 09 09 *Code freeze not necessarily drawn to scale. ;)
  • 33. Where are we? September 1, 2009 March, 2009 February, 2008 Code freeze Drupalcon DC Drupal 6 released (we are here now) Drupal 7 opened “When it’s ready” Drupal 7 release 6 months left! code thaw code freeze* Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Jul Aug Sep 08 08 08 08 08 08 08 08 08 08 08 09 09 09 09 09 09 09 09 09 *Code freeze not necessarily drawn to scale. ;)
  • 34. When is “When it’s ready”?
  • 35. When is “When it’s ready”?
  • 36. When is “When it’s ready”?
  • 37. When is “When it’s ready”? When this number becomes zero.
  • 38. Should I start building sites on Drupal 7?
  • 39. Should I start building sites on Drupal 7? NO!
  • 40. Should I start porting modules to Drupal 7?
  • 41. Should I start porting modules to Drupal 7? YES!
  • 42. Should I start porting modules to Drupal 7? YES! *
  • 43. Should I start porting modules to Drupal 7? YES! * * Sense of adventure required. ;)
  • 44. Will $feature be in Drupal 7?
  • 45. Will $feature be in Drupal 7? IT DEPENDS.
  • 48. Drupal is a... DO-OCRACY The work that gets done is the work that people like you (yes, you!) actually do! :)
  • 49. “Core maintainers” Dries Buytaert Drupal project lead Neil Drumm Gábor Hojtsy Angela Byron Drupal 5 maintainer Drupal 6 maintainer Drupal 7 maintainer
  • 50. SLAC “Core maintainers” KERS Dries Buytaert Drupal project lead Neil Drumm Gábor Hojtsy Angela Byron Drupal 5 maintainer Drupal 6 maintainer Drupal 7 maintainer
  • 51. The people who do the actual work. ;) Over 300 contributors to 1,000+ patches so far!
  • 55. What’s new ? in Drupal 7? So far, anyway...
  • 72. Users can cancel own accounts
  • 73. Users can cancel own accounts
  • 74. Users can cancel own accounts
  • 75. Users can cancel own accounts
  • 76. Improved Translation Interface
  • 77. Improved Translation Interface
  • 92. Configurable Error Reporting
  • 93. Configurable Error Reporting
  • 94. Configurable Error Reporting
  • 95. What’s next for usability? • Vastly improved Help system • Clearer separation of admin vs. user tasks • Filter system improvements • Mark Boulton Design to help re-design Drupal 7 • Fixing issues found in University of Baltimore usability study (Designers, come and join us!)
  • 96. Sign me up! • http://drupal.org/community-initiatives/ drupal-core/usability • http://groups.drupal.org/usability • http://groups.drupal.org/mark-boulton- design-drupal-7-project • Go to the Usability team’s sessions on Thursday afternoon!
  • 101. Re-vamped page.tpl.php • Re-engineered XHTML structure to facilitate CSS-only design.
  • 102. Re-vamped page.tpl.php • Re-engineered XHTML structure to facilitate CSS-only design. • Standard, semantic class/ID names (.section, #navigation, etc.)
  • 103. Re-vamped page.tpl.php • Re-engineered XHTML structure to facilitate CSS-only design. • Standard, semantic class/ID names (.section, #navigation, etc.) • Improved consistency throughout.
  • 104. Re-vamped page.tpl.php • Re-engineered XHTML structure to facilitate CSS-only design. • Standard, semantic class/ID names (.section, #navigation, etc.) • Improved consistency throughout. • Enables designers to create beautiful, CSS- only themes without touching PHP.
  • 105. And to show it off...
  • 107. drupal_add_js() improvements • Now pass in $options rather than 500 function arguments • Uses actual weighting rather than awkward ‘core’ vs. ‘module’ vs. ‘theme’ types. • Add external JavaScript files to the page. • hook_js_alter() • drupal_add_css() is next!
  • 108. Cross-library compatibility works in 6! Before: After: (function($) { $('a').fadeOut().fadeIn(); $('a').fadeOut().fadeIn(); })(jQuery);
  • 109. What’s next for designers? • Re-vamped node, block, comment, etc. templates to further cater to CSS-only themes. • Removing old core themes (and adding new ones)? • jQuery 1.3.x (and jQuery UI?) • Additional interface elements: pop-ups, modal dialogs, vertical tabs, results filters...
  • 110. Sign me up! • http://drupal.org/community-initiatives/ drupal-core/theming • http://groups.drupal.org/theme- development • http://drupal.org/community-initiatives/ drupal-core/javascript • http://groups.drupal.org/javascript
  • 111. Changes for coders 01110111 01101001 01101100 01101100 00100000 01100011 01101111 01100100 01100101 00100000 01110000 01101000 01110000 00100000 01100110 01101111 01110010 00100000 01100110 01101111 01101111 01100100
  • 112. Warning: Things are about to get... geeky.
  • 118. SimpleTest • Writing tests causes you to really think through a problem, and helps flesh out obscure bugs.
  • 119. SimpleTest • Writing tests causes you to really think through a problem, and helps flesh out obscure bugs. • Know instantly if your changes break something; freedom to refactor wildly.
  • 120. SimpleTest • Writing tests causes you to really think through a problem, and helps flesh out obscure bugs. • Know instantly if your changes break something; freedom to refactor wildly. • Submit a test with your bug fix, it’ll stay fixed forever.
  • 121. SimpleTest • Writing tests causes you to really think through a problem, and helps flesh out obscure bugs. • Know instantly if your changes break something; freedom to refactor wildly. • Submit a test with your bug fix, it’ll stay fixed forever. • Over 75% test coverage!
  • 122. SimpleTest works in Excerpt from modules/block/block.test: 6!
  • 127. testing.drupal.org • “Patch (code needs review)” and “Patch (reviewed & tested by community)” statuses can now be trusted.
  • 128. testing.drupal.org • “Patch (code needs review)” and “Patch (reviewed & tested by community)” statuses can now be trusted. • Reviewers no longer getting carpal tunnel clicking through all the basic stuff.
  • 129. testing.drupal.org • “Patch (code needs review)” and “Patch (reviewed & tested by community)” statuses can now be trusted. • Reviewers no longer getting carpal tunnel clicking through all the basic stuff. • Running the full test suite takes a long time; let a computer do it for you!
  • 130. testing.drupal.org • “Patch (code needs review)” and “Patch (reviewed & tested by community)” statuses can now be trusted. • Reviewers no longer getting carpal tunnel clicking through all the basic stuff. • Running the full test suite takes a long time; let a computer do it for you! • Notifies author within 24 hours if patch no longer applies or breaks tests.
  • 131. What’s next for testing? • testing.drupal.org testing on multiple databases/platforms • Automated testing for contributed modules • Testing site per patch • Automated testing for JavaScript • Improved core test coverage
  • 132. Sign me up! • http://drupal.org/community-initiatives/ drupal-core/testing • http://groups.drupal.org/testing-qa • testing.drupal.org back-end: Go see the “Saving Webchick Time” session • Donate to testing framework improvements @ http://testing.drupal.org/
  • 133.
  • 135. The who in the what now? • Database abstraction layer built with PHP Data Objects (PDO) • Theoretical support for any database PHP supports; mysql, sqlite, and pgsql drivers in D7. • Dynamic query builder (db_rewrite_sql is DEAD!), with support for old-fashioned SELECTs for simple queries. • Transaction support • Master/slave replication
  • 136. Static Select Queries Drupal 6: $result = db_query(quot;SELECT nid, title FROM {node} WHERE type = '%s' AND nid = %dquot;, array($type, $nid)); $node = db_fetch_object($result); Drupal 7: $node = db_query('SELECT nid, title FROM {node} WHERE type = :type AND nid = :nid', array(':type' => $type, ':nid' => $nid))->fetchObject();
  • 137. Dynamic Select Queries Drupal 6: $result = pager_query(db_rewrite_sql('SELECT n.nid FROM {node} n WHERE n.promote = 1 AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC'), variable_get('default_nodes_main', 10)); Drupal 7: $select = db_select('node', 'n') ->fields('n', array('nid')) ->condition('promote', 1) ->condition('status', 1) ->orderBy('sticky', 'DESC') ->orderBy('created', 'DESC') ->extend('PagerDefault') ->limit(variable_get('default_nodes_main', 10)) ->addTag('node_access');
  • 138. Other Queries Insert Delete $nid = db_insert('node') $num_deleted = db_delete('node') ->fields(array('title', 'uid')) ->condition('nid', 5) ->values(array( ->execute(); 'title' => 'Example', 'uid' => 1, )) ->execute(); Update $num_updated = db_update('node') ->fields(array( 'uid' => 5, 'status' => 1, )) ->condition('created', REQUEST_TIME - 3600, '>=') ->execute();
  • 139. hook_query_alter() Drupal 6: function hook_db_rewrite_sql($query, $primary_table, $primary_field, $args) { switch ($primary_field) { case 'nid': $return = array(); if ($primary_table != 'n') { $return['join'] = quot;LEFT JOIN {node} n ON $primary_table.nid = n.nidquot;; } $return['where'] = 'created >' . time() - 3600; return $return; break; } Drupal 7: function hook_query_alter(&$query) { if ($query->hasTag(‘node_access’)) { $query->condition(‘created’, time() - 3600, ‘>’); } }
  • 140. What’s next for databases? • Improvements to: • Slave replication • Schema API • Update system • Multiple database support • Conversion of all core queries to DBTNG
  • 141. Sign me up! • http://drupal.org/community-initiatives/ drupal-core/database • http://groups.drupal.org/database • DBTNG session (uh. right now :) • API docs: http://drupal.org/node/310069 • Core conversion party on Saturday!
  • 143. About Field API • CCK API in Drupal core (UI in contrib) • No longer node-specific: can attach fields to users, potentially other objects. • Swappable storage back-ends (currently, SQL but potentially web services, etc.) • Consistent way of storing/referencing fields to ease making changes.
  • 144. Overview Bundles Field Fields instances name = Article name = subtitle type = node type = text Article subtitle widget = text area name = User name = photo type = user type = image Article photo widget = file upload Group of fields that make up Base types User photo a larger entity widget = file upload A field attached to a particular bundle
  • 145. CCK Today content_type_profile (content type) nid vid name gender age color picture 1 1 Sally F 37 Purple sally.png 2 2 Jesse M 32 Red jesse.png
  • 147. CCK Today content_type_profile (content type) nid vid name gender age color picture 1 1 Sally F 37 Purple sally.png 2 2 Jesse M 32 Red jesse.png content_field_fav_colors (multi-value field) nid vid delta color 1 1 0 Purple 1 1 1 Green 2 2 0 Red
  • 149. CCK Today content_type_profile (content type) nid vid name gender age picture 1 1 Sally F 37 sally.png 2 2 Jesse M 32 jesse.png content_field_fav_colors content_field_picture (multi-value field) (shared field) nid vid delta color nid vid image 1 1 0 Purple 1 1 sally.png 1 1 1 Green 1 1 album_cover.png
  • 150. Field API “revision id” “entity type” Corresponds 1 = user field_data_name to node rev. ID 2 = node etid bundle entity_id revision_id delta name_value 2 profile 1 1 0 Sally 2 profile 2 2 0 Jesse “bundle” “entity id” Name of Corresponds content type to node ID
  • 151. Field API etid bundle entity_id revision_id delta name_value 2 profile 1 1 0 Sally 2 profile 2 2 0 Jesse etid bundle entity_id revision_id delta gender_value 2 profile 1 1 0 F 2 profile 2 2 0 M etid bundle entity_id revision_id delta color_value 2 profile 1 1 0 Purple 2 profile 1 1 1 Green 2 profile 2 2 0 Red etid bundle entity_id revision_id delta picture_value 2 profile 1 1 0 sally.png 2 profile 2 2 0 jesse.png 2 album 3 3 0 cover.png
  • 152. What’s next for Field API? • Performance improvements with per-”bundle” storage and materialized views • Translatable fields • User Interface? • Additional fields types (+ body/teaser/ taxonomy?)
  • 153. Sign me up! • http://drupal.org/community-initiatives/ drupal-core/fields • http://groups.drupal.org/fields-core • API documentation: http://api.drupal.org/ api/group/field/7
  • 154. Performance http://flickr.com/photos/thatguyfromcchs08/
  • 157. Registry • Auto-parses and caches list of all functions, classes, and interfaces in all files
  • 158. Registry • Auto-parses and caches list of all functions, classes, and interfaces in all files • Facilitates faster hook calls; only loop through modules that implement a hook
  • 159. Registry • Auto-parses and caches list of all functions, classes, and interfaces in all files • Facilitates faster hook calls; only loop through modules that implement a hook • Allows more fine-grained break-up of code (ex: all “info” functions in module.registry.inc)
  • 160. Registry • Auto-parses and caches list of all functions, classes, and interfaces in all files • Facilitates faster hook calls; only loop through modules that implement a hook • Allows more fine-grained break-up of code (ex: all “info” functions in module.registry.inc) • Need to register all files in .info:
  • 161. Registry • Auto-parses and caches list of all functions, classes, and interfaces in all files • Facilitates faster hook calls; only loop through modules that implement a hook • Allows more fine-grained break-up of code (ex: all “info” functions in module.registry.inc) • Need to register all files in .info:
  • 162. Registry • Auto-parses and caches list of all functions, classes, and interfaces in all files • Facilitates faster hook calls; only loop through modules that implement a hook • Allows more fine-grained break-up of code (ex: all “info” functions in module.registry.inc) • Need to register all files in .info: files[] = example.module files[] = example.install
  • 163. No more $op works in 6! • hook_nodeapi(), hook_user(), hook_block(), etc. are no longer “mega” hooks: • hook_nodeapi_load(), hook_nodeapi_update() • hook_user_register(), hook_user_login() • hook_block_list(), hook_block_view() • hook_form_FORM_ID_alter()
  • 164. Multi-load! • node_load_multiple() • file_load_multiple() • taxonomy_term_load_multiple() • user_load_multiple() (coming soon!)
  • 166. File API improvements • Files are now first-class objects • hook_file_load(), hook_file_save(), hook_file_move(), etc. • Files are managed automatically; no need to deal with {files} table yourself • Potential for modules to share files
  • 167. What’s next for files? • Image handling in core (for real this time?) • File management console • Native file fields • Improved private file handling?
  • 168. Sign me up! • http://drupal.org/community-initiatives/ drupal-core/files • http://drupal.org/community-initiatives/ drupal-core/images • http://groups.drupal.org/file-api • http://groups.drupal.org/image
  • 170. New Hooks in D7 • hook_modules_X(): installed, enabled, disabled, uninstalled • hook_taxonomy_term_X(): load, insert, update, delete • hook_taxonomy_vocabulary_X(): load, insert, update, delete • hook_aggregator_X(): fetch, parse, process, remove
  • 171. hook_page_alter() Drupal 6: Drupal 7: function page_callback($nids) { function page_callback($nids) { $output =   $nodes = node_load_multiple($nids); t('Welcome to a big list of nodes.');   $build['message'] = array(   foreach ($nids as $nid) {   '#markup' =>   $output .= node_view(node_load($nid)); t('Welcome to a big list of nodes.'),  }   );   $output .= theme('pager');   foreach ($nodes as $node) {   $build['nodes'][$node->nid] =   return $output; node_build($node); }  }   $build['pager'] = array(   '#markup' => theme('pager'),   '#weight' => 5,   );   return drupal_get_page($build); }
  • 172. $page object $page['left']['blocks']['user-navigation']['#block'] = (block object); $page['content']['message']['#markup'] = 'Welcome to a big list of nodes.'; $page['content']['nodes'] = (array of node objects keyed by node ID); $page['content']['pager']['#markup'] = (HTML markup of pager); $page['footer']['blocks']['system-powered-by']['#block'] = (block object); Mwahahahahaha....!