SlideShare a Scribd company logo
1 of 81
Energy.gov Case Study
Do It With Drupal
October 12, 2011
Roger López
Energy.gov

Roger López
‣ VP, Engineering
‣ Treehouse Agency
‣ Drupal.org member since
  July 2006
‣ @zroger



                     Do It With Drupal 2011, Roger López
Energy.gov

Project Goals
‣ Consolidation of 100’s of sub-sites
‣ Sub-site creation should not require
  developer intervention.
‣ Content should be easily shared
  between sub-sites.
‣ Maintain a uniform style across all
  sub-sites.

                     Do it with Drupal, 2011, Roger López
Energy.gov

Drupal 7
‣ Released January 5, 2011
‣ Target launch date: August 4, 2011
‣ Drupal 6 will stopped being
  supported in about 2-3 years




                    Do it with Drupal, 2011, Roger López
Energy.gov

What about contrib?
‣ Entities and fields
‣ DB API and EntityFieldQuery
‣ Image styles
‣ ...




                       Do it with Drupal, 2011, Roger López
Energy.gov

Organic groups
‣ Create groups
‣ Content is added to groups
‣ Users are members of groups
‣ Membership-based access control




                    Do it with Drupal, 2011, Roger López
Energy.gov

Group Type




             Do it with Drupal, 2011, Roger López
Energy.gov

Group Membership




              Do it with Drupal, 2011, Roger López
Energy.gov

OG Usage
‣ Group type
 ‣ Office vocabulary terms
‣ Group content
 ‣ Articles
 ‣ Pages
 ‣ Blocks*

                    Do it with Drupal, 2011, Roger López
Energy.gov
Not all terms are created
equal
‣ Internal sites are groups
‣ External sites are not
‣ Otherwise the same




                      Do it with Drupal, 2011, Roger López
Energy.gov

OG Tasks




           Do it with Drupal, 2011, Roger López
Energy.gov




http://drupal.org/project/og_tasks




                   Do it with Drupal, 2011, Roger López
Blocks
Energy.gov




Block Creator
     !=
Administrator


        Do it with Drupal, 2011, Roger López
Energy.gov

User generated Blocks
‣ Node-like blocks
 ‣ Fields
 ‣ Templates
‣ Listing blocks
 ‣ User-defined filters
 ‣ Pre-defined styles

                     Do it with Drupal, 2011, Roger López
screenshot of listing
block example, with
highlights like previous
slide
screenshot of listing
block example, with
highlights like previous
slide
Energy.gov




   Beans
(Block Entities)




          Do it with Drupal, 2011, Roger López
Energy.gov

Block Entities
‣ Block types
‣ Fieldable
‣ Simple data storage for settings
‣ Non-admin permissions
‣ Data entry is familiar to users



                      Do it with Drupal, 2011, Roger López
Input form for a listing
bean. Explain how non-
field beans work.
Energy.gov

View modes
‣ Previously called “Build modes”
‣ Provides multiple display options
‣ Out of the box
 ‣ Full content
 ‣ Teaser
 ‣ RSS

                     Do it with Drupal, 2011, Roger López
Energy.gov

Named styles

‣ Block teaser   ‣ Related items




                 Do it with Drupal, 2011, Roger López
Energy.gov

Editorial listings
‣ Hand-selected listings of nodes
‣ Multiple Node Reference field
‣ View mode set in the Node
  Reference field settings
‣ Additional fields
  ‣ More link, Header text, etc.


                      Do it with Drupal, 2011, Roger López
Energy.gov




Block Placement




         Do it with Drupal, 2011, Roger López
Energy.gov

Pages vs Nodes
‣ Users think about Pages
‣ Pages with only blocks
‣ Publishing workflow doesn’t include
  block placements




                     Do it with Drupal, 2011, Roger López
Energy.gov

Block References
‣ Block reference fields to emulate
  regions
‣ “Landing page” node types for each
  page layout
‣ Can be combined with other
  methods (context, core block
  module, etc.)


                     Do it with Drupal, 2011, Roger López
Block reference fields
Text fields
Block Reference fields
Context
Energy.gov




Workflows




     Do it with Drupal, 2011, Roger López
Energy.gov

Standard Workflow




            Do it with Drupal, 2011, Roger López
Energy.gov

Standard Workflow
‣ Draft




            Do it with Drupal, 2011, Roger López
Energy.gov

Standard Workflow
‣ Draft
 ‣ Needs Review




                  Do it with Drupal, 2011, Roger López
Energy.gov

Standard Workflow
‣ Draft
 ‣ Needs Review
   ‣ Approved




                  Do it with Drupal, 2011, Roger López
Energy.gov

Standard Workflow
‣ Draft
 ‣ Needs Review
   ‣ Approved
     ‣ Published




                   Do it with Drupal, 2011, Roger López
Energy.gov

Standard Workflow
‣ Draft
 ‣ Needs Review
   ‣ Approved
     ‣ Published
          ‣ Unpublished



                          Do it with Drupal, 2011, Roger López
Energy.gov

Other Requirements
‣ Workflow setup in code
 ‣ Exportable, API, etc.
‣ Multiple concurrent revisions
 ‣ Draft revisions subject to workflow
 ‣ Published revision is not editable



                     Do it with Drupal, 2011, Roger López
Energy.gov

Options
‣ Workflow
‣ Rules
‣ Workbench moderation




                  Do it with Drupal, 2011, Roger López
Energy.gov




StateFlow




      Do it with Drupal, 2011, Roger López
Energy.gov

Revisions
‣ New nodes start as Drafts
‣ Published revisions are not editable
‣ Editing a published node creates a
  new draft revision
‣ Publishing a revision archives the
  current revision


                     Do it with Drupal, 2011, Roger López
Energy.gov




Do it with Drupal, 2011, Roger López
Energy.gov



New Draft




            Do it with Drupal, 2011, Roger López
Energy.gov



New Draft
            Reviewed




                       Do it with Drupal, 2011, Roger López
Energy.gov



New Draft
            Reviewed
                       Published




                       Do it with Drupal, 2011, Roger López
Energy.gov



New Draft
             Reviewed
                        Published

            Edit
New Draft



                        Do it with Drupal, 2011, Roger López
Energy.gov



New Draft
             Reviewed
                        Published

            Edit
New Draft
             Reviewed



                        Do it with Drupal, 2011, Roger López
Energy.gov



New Draft
             Reviewed
                        Published
                                           Archived
            Edit
New Draft
             Reviewed
                        Published


                        Do it with Drupal, 2011, Roger López
Energy.gov

API First
‣ 100% implementable from code
‣ State Machine
‣ Customize by extending
  ‣ Workflow
  ‣ States
  ‣ Events

                   Do it with Drupal, 2011, Roger López
Energy.gov




http://drupal.org/sandbox/
     fmitchell/1298244
   (waiting for approval)


              Do it with Drupal, 2011, Roger López
Energy.gov




Data Visualizations




           Do it with Drupal, 2011, Roger López
Energy.gov


Front-end
 Front-end                 Drupal
  Front-end
 Libraries
  Libraries              Integration
   Libraries




 DataViz                   DataViz
 Adapters                  Format


               Do it with Drupal, 2011, Roger López
Energy.gov

Libraries
‣ jqPlot
  ‣ jqplot.com
‣ The Jit
  ‣ thejit.org
‣ High Charts
  ‣ highcharts.com

                     Do it with Drupal, 2011, Roger López
Energy.gov
{
    "series": [
          {
               "seriesName": "series1",
               "data": [
                   [2,1],
                   [4,2],
                   [6,3],
                   [3,4]
               ]
          },
    ],
    ...

                                          Do it with Drupal, 2011, Roger López
Energy.gov
"options": {
  "title": { "text" : "A test bar plot." },
  "description": {"text" : "A test description."},
  "pointLabels": {
       "show": true,
       "location": "e",
       "edgeTolerance": -15
  },
  "barDirection": "horizontal",
  "seriesOptions": [],
  "legend": {
       "show": false,
       "location": "s"

                                       Do it with Drupal, 2011, Roger López
Energy.gov




Do it with Drupal, 2011, Roger López
Energy.gov




Do it with Drupal, 2011, Roger López
Energy.gov




Do it with Drupal, 2011, Roger López
Energy.gov




Do it with Drupal, 2011, Roger López
Energy.gov




Do it with Drupal, 2011, Roger López
Energy.gov




Do it with Drupal, 2011, Roger López
Energy.gov




Do it with Drupal, 2011, Roger López
Energy.gov




Do it with Drupal, 2011, Roger López
Energy.gov

Resources
‣ Bean
  http://drupal.org/project/bean
‣ OG Tasks
  http://drupal.org/project/og_tasks
‣ DataViz Javascript Adapters
  http://github.com/treehouseagency/dataviz-adapters
‣ Data Visualization API for Drupal
  http://drupal.org/sandbox/LSU_JBob/1299606
‣ StateFlow
  http://drupal.org/sandbox/fmitchell/1298244

                            Do it with Drupal, 2011, Roger López

More Related Content

Similar to Energy.gov Case Study

Drupal 8 - A Brief Introduction
Drupal 8 - A Brief IntroductionDrupal 8 - A Brief Introduction
Drupal 8 - A Brief IntroductionJeff Geerling
 
Drupalcamp Tallinn - Drupal 8
Drupalcamp Tallinn - Drupal 8Drupalcamp Tallinn - Drupal 8
Drupalcamp Tallinn - Drupal 8drupalcampest
 
What is headless drupal?
What is headless drupal?What is headless drupal?
What is headless drupal?ValueCoders
 
Healthy Drupal 7 Upgrades
Healthy Drupal 7 UpgradesHealthy Drupal 7 Upgrades
Healthy Drupal 7 UpgradesForum One
 
The State of Drupal 8
The State of Drupal 8The State of Drupal 8
The State of Drupal 8nyccamp
 
Apcug 2011 07-17-intro_to_drupal_jeff_schuler
Apcug 2011 07-17-intro_to_drupal_jeff_schulerApcug 2011 07-17-intro_to_drupal_jeff_schuler
Apcug 2011 07-17-intro_to_drupal_jeff_schulerhewie
 
[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?
[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?
[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?Wong Hoi Sing Edison
 
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
 
Brussels Drupal Dev Days - Internationalization for Drupal 7 - Jose Reyero
Brussels Drupal Dev Days - Internationalization for Drupal 7 - Jose ReyeroBrussels Drupal Dev Days - Internationalization for Drupal 7 - Jose Reyero
Brussels Drupal Dev Days - Internationalization for Drupal 7 - Jose Reyerojosereyero
 
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
 
DrupalCon Chicago 2011 Recap
DrupalCon Chicago 2011 RecapDrupalCon Chicago 2011 Recap
DrupalCon Chicago 2011 RecapChris Hales
 
Normalization in Redux
Normalization in ReduxNormalization in Redux
Normalization in ReduxUnfold UI
 
An Introduction to Spring Data
An Introduction to Spring DataAn Introduction to Spring Data
An Introduction to Spring DataOliver Gierke
 
Introduction to new technologies in drupal 8
Introduction to new technologies in drupal 8Introduction to new technologies in drupal 8
Introduction to new technologies in drupal 8naxoc
 
Translating Drupal
Translating DrupalTranslating Drupal
Translating Drupalguest3a6661
 

Similar to Energy.gov Case Study (20)

Drupal 8 - A Brief Introduction
Drupal 8 - A Brief IntroductionDrupal 8 - A Brief Introduction
Drupal 8 - A Brief Introduction
 
Drupalcamp Tallinn - Drupal 8
Drupalcamp Tallinn - Drupal 8Drupalcamp Tallinn - Drupal 8
Drupalcamp Tallinn - Drupal 8
 
Decoupled drupal
Decoupled drupal Decoupled drupal
Decoupled drupal
 
What is headless drupal?
What is headless drupal?What is headless drupal?
What is headless drupal?
 
Healthy Drupal 7 Upgrades
Healthy Drupal 7 UpgradesHealthy Drupal 7 Upgrades
Healthy Drupal 7 Upgrades
 
The State of Drupal 8
The State of Drupal 8The State of Drupal 8
The State of Drupal 8
 
Apcug 2011 07-17-intro_to_drupal_jeff_schuler
Apcug 2011 07-17-intro_to_drupal_jeff_schulerApcug 2011 07-17-intro_to_drupal_jeff_schuler
Apcug 2011 07-17-intro_to_drupal_jeff_schuler
 
[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?
[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?
[HKDUG] #20151017 - BarCamp 2015 - Drupal 8 is Coming! Are You Ready?
 
Drupalcampatl d7
Drupalcampatl d7Drupalcampatl d7
Drupalcampatl d7
 
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 course hengl
Drupal course henglDrupal course hengl
Drupal course hengl
 
Brussels Drupal Dev Days - Internationalization for Drupal 7 - Jose Reyero
Brussels Drupal Dev Days - Internationalization for Drupal 7 - Jose ReyeroBrussels Drupal Dev Days - Internationalization for Drupal 7 - Jose Reyero
Brussels Drupal Dev Days - Internationalization for Drupal 7 - Jose Reyero
 
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
 
DrupalCon Chicago 2011 Recap
DrupalCon Chicago 2011 RecapDrupalCon Chicago 2011 Recap
DrupalCon Chicago 2011 Recap
 
Alex Snaps JEEConf Presentation
Alex Snaps JEEConf PresentationAlex Snaps JEEConf Presentation
Alex Snaps JEEConf Presentation
 
Normalization in Redux
Normalization in ReduxNormalization in Redux
Normalization in Redux
 
An Introduction to Spring Data
An Introduction to Spring DataAn Introduction to Spring Data
An Introduction to Spring Data
 
Introduction to new technologies in drupal 8
Introduction to new technologies in drupal 8Introduction to new technologies in drupal 8
Introduction to new technologies in drupal 8
 
Translating Drupal
Translating DrupalTranslating Drupal
Translating Drupal
 

Recently uploaded

Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 

Recently uploaded (20)

Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 

Energy.gov Case Study

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. For the sub-site architecture, we turned to Organic groups.   A quick overview of OG: OG is a module that lets you specify groups, group content and group membership.  Users can be members of groups, and can create content within those groups.  OG can also limit access to content based on group membership, thereby sectioning off the site into separately mantained sections.  This fit very well with our requirements to have different editors for each office.\n\n
  8. OG got a major rewrite for Drupal 7, meaning that no longer are you limited to using only nodes as the basis of your groups.  \n\n
  9. In OG 7, groups are simply entities which have this field enabled and selected. Any fieldable entity can be a group, including, but not limited to nodes, taxonomy terms and users. \n
  10. In OG 7, the groups audience field can be added to any fieldable entity. The audience field adds creates a membership record for the entity in each selected group. This is the way user membership is handled, as well as content association.\n
  11. This is how we’re using OG on Energy.gov. Since the sub-sites always felt like categorization of content to me, we used a taxonomy term for the sub-site group entity in the Office vocabulary.  Although this still feels right from a schema standpoint, technically nodes are still better supported by OG. Pretty much all other node types, as well as custom blocks are assignable to groups.\n
  12. \n
  13. \n
  14. To assist with the initial setup of groups, we created the OG Tasks module.  This module allows developers to create automated tasks that can be run against the specified group.  Some of these tasks are optional, and can be run after the group is created.  Other tasks are required, and will be run automatically when the group is created.\n\n
  15. \n
  16. Remember when I told you that blocks could be specified as group content. That’s not entirely true.\n
  17. This site was going to have hundreds of blocks, which needed to be created by normal CMS users. How do we allow users to create blocks without granting them administrative access?\n
  18. \n
  19. Here we see 2 “Graphic” blocks. If these were nodes, we would immediately know how to build these. A title, an image field with a link, some body text. Then we style the template, or perhaps if the template isn’t too complicated, we just select the appropriate field formatters for this view mode. But these aren’t nodes, they’re blocks.\n
  20. \n
  21. \n
  22. \n
  23. Bean exposes blocks as a new type of fieldable entity.  Creating new block types and adding fields is as easy as creating new node types (screenshot of block type admin).  Use the display settings for the blocks to control the display output, just like with other fieldable entities (screenshot of “display fields” tab).\n\n
  24. \n
  25. Bean types can have custom logic and settings forms.  With this functionality, we created simple listing blocks that give CMS users the ability to create custom filtered lists.  The article listing bean has filters for the Article type taxonomy, the Topic taxonomy and the Audience taxonomy.  It also has options for the title, number of articles to display, link to use for a “more link” and an option to group the results by date (screenshot of article listing edit form).  These options give the users the ability to quickly create special purpose blocks that list, for instance, the latest 3 articles of type “blog”, which are in one of the solar, wind, or geothermal topics and are targetted towards the “homeowner” audience.  \n\n
  26. \n
  27. As for display, there is a View Mode option, which controls the output of the nodes being listed.  This empowers the users to select one of several predefined styles, ranging from a simple linked title, to a more complex display with title, teaser, thumbnail and date.  (screenshots of same block rendered with various view modes)\n\n
  28. \n
  29. Here’s a quick recipe that we used a lot on the site. It is very easy to implement and your users will love it.\n
  30. So now that we have all of the blocks, how do we place them? We’ve made block creation a non-admin task, how can we do the same for block placement?\n\n\n
  31. Now that the users can easily create blocks, they need an equally simple way to place these blocks on pages.  The problem with the most common methods for block placement (block.module, context.module), is that they are largely considered administrative tasks, not something you would allow a typical CMS user access to.  But most CMS users think of “pages” not nodes, especially for “landing page” type content.  Nodes typically consist of the “content” portion of the page.   Pages contain the main content, but also the blocks on that page.  Pretty much everything but the truly common elements like the header and footer.  (wireframe showing the node vs page concept)\n\n
  32. Using the Blockreference module, we were able to match our node creation workflow to the expectations of the users.  We created many different types of “landing page” content types, each representing a different layout with different block placement options.  Many of the have no other fields besides the block references.  (screenshots of different layouts, marked up to show block reference field regions)  Templates and these faux regions are marked up in the node template and css.  These do not integrate with standard regions.  We are also combining this method with the standard methods, namely using the context module.  We use the context module to place the common blocks, that should not be managed by normal CMS users.  \n\n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  40. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  41. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  42. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  43. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  44. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  45. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  46. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  47. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  48. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  49. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  50. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  51. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  52. Here we have not only block reference fields, but additional text fields to use as headers for the groupings.\n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. We evaluated several options for tools to accomplish this workflow.  In addition to the ability to supply this workflow, we were also looking for a module that would allow us to easily put the workflows in code, possibly by creating the workflows from the install profile or a module install file, either via an exportable mechanism, or a clear API.\n\n
  73. Workflow - no drupal 7 version.  The drupal 6 version, which we had worked with before, has a pretty complicated interface, and lacked any sort of exportability or install API.  \nRules - Drupal 7 version available, and exportable via ctools/features.  No readily apparent way to deal with the revisions issue.\nWorkbench Moderation - This seemed to be a good match to our required workflow, but at least at the time we started development, it was very young and lacked any sort of install API or exportability.\n\n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n