SlideShare ist ein Scribd-Unternehmen logo
1 von 138
Deliverance
a compelling way to Plone sites
Nate Aune
www.jazkarta.com
Plone Conference 2009
Slides to add
•   if-content

    •   used to match certain templates
•   proxy to live site

    •   jquery.com example - show theme=
•   how to handle theming of elements inside the
    HTML that Plone generates in the static theme

•   does the XML file need to be well-formed?
    what about the HTML? does it need to be valid
    XHTML.
•   can Plone's authoring interface be themed to
    look like the Deliverance-themed site?
                                              jazkarta
Obstacles
Plone theming has a
high barrier to entry
Theming in Plone
         an exercise in patience
•   Install dependencies (Python, XCode, GCC)
•   Create a theme egg using paster
•   Put your stylesheets and images in /browser
•   But override Plone assets in /skins
•   To turn off viewlets, must edit configure.zcml
•   To make new viewlets must code Python
•   Must learn ZPT to edit page templates
                                             jazkarta
Knowledge needed
•   Buildout
•   Paster
•   Zope page templates (ZPT)
•   Python
•   ZCML
•   resource registry (for CSS and JS)
•   /skins vs. /browser
                                         jazkarta
Does your head   hurt yet?
                     jazkarta
What is Deliverance?


•   Middleware tool that serves as a proxy
•   Maps content HTML into design HTML
•   Keeps presentation separate from content




                                             jazkarta
Who is it for?




                 jazkarta
Who is it for?

•   Designers




                         jazkarta
Who is it for?

•   Designers
•   Integrators




                          jazkarta
Who is it for?

•   Designers
•   Integrators
•   Developers




                          jazkarta
Who is it for?

•   Designers
•   Integrators
•   Developers
•   Customers



                          jazkarta
How does it work?




                    jazkarta
How does it work?
move elements from your content




                                  jazkarta
How does it work?
move elements from your content




                                  jazkarta
How does it work?
move elements from your content


into placeholders in your theme




                                  jazkarta
How does it work?
move elements from your content


into placeholders in your theme




                                  jazkarta
How does it work?
move elements from your content


into placeholders in your theme


... without touching the theme or content
                                   jazkarta
How does it work?
move elements from your content


into placeholders in your theme


... without touching the theme or content
                                   jazkarta
Python
  is
magical




http://xkcd.com/353/   jazkarta
jazkarta
Deliverance




              jazkarta
Knowledge needed

•   HTML
•   CSS
•   Firebug
•   simple editing of XML file



                                jazkarta
Four simple rules

•   drop
•   replace
•   prepend
•   append



                         jazkarta
Deliverance benefits


•   web designer doesn't need to learn CMS templating
•   separation of concerns
•   theme multiple apps with one design
    (trac, wiki, blog, etc.)



                                              jazkarta
Who is using Deliverance?




                      jazkarta
Who is using Deliverance?

•   plone.org




                      jazkarta
Who is using Deliverance?

•   plone.org
•   plone.tv




                      jazkarta
Who is using Deliverance?

•   plone.org
•   plone.tv
•   Harvard School of Engineering (subsites)




                                               jazkarta
Who is using Deliverance?

•   plone.org
•   plone.tv
•   Harvard School of Engineering (subsites)
•   ploneconf2009.org (get the buildout!)




                                               jazkarta
Who is using Deliverance?

•   plone.org
•   plone.tv
•   Harvard School of Engineering (subsites)
•   ploneconf2009.org (get the buildout!)
•   repoze.org (multi-app theming)



                                               jazkarta
Who is using Deliverance?

•   plone.org
•   plone.tv
•   Harvard School of Engineering (subsites)
•   ploneconf2009.org (get the buildout!)
•   repoze.org (multi-app theming)
•   and many others...

                                               jazkarta
Case study
A real world example of using Deliverance
jazkarta
jazkarta
jazkarta
jazkarta
"Replace our custom backend with Plone CMS."
HaiVision




                                                   jazkarta
"Replace our custom backend with Plone CMS."
HaiVision


                             "Sure, we can do that."
                                                       Jazkarta




                                                       jazkarta
"Replace our custom backend with Plone CMS."
HaiVision


                              "Sure, we can do that."
                                                        Jazkarta


            "Keep the frontend design the same."
HaiVision




                                                        jazkarta
"Replace our custom backend with Plone CMS."
HaiVision


                              "Sure, we can do that."
                                                        Jazkarta


            "Keep the frontend design the same."
HaiVision


                                     "No problem."
                                                        Jazkarta




                                                        jazkarta
"Replace our custom backend with Plone CMS."
HaiVision


                              "Sure, we can do that."
                                                        Jazkarta


            "Keep the frontend design the same."
HaiVision


                                     "No problem."
                                                        Jazkarta


            "We're going to change the design soon, and
            we want to be able to change the HTML/CSS
HaiVision
            ourselves."


                                                        jazkarta
"Replace our custom backend with Plone CMS."
HaiVision


                              "Sure, we can do that."
                                                        Jazkarta


            "Keep the frontend design the same."
HaiVision


                                     "No problem."
                                                        Jazkarta


            "We're going to change the design soon, and
            we want to be able to change the HTML/CSS
HaiVision
            ourselves."

              "Umm. Ok, you will be able to do that."
                                                        Jazkarta
                                                        jazkarta
Customers
change their
 mind about
their identity
 all the time.
Don't make it painful than
 it already is for them.
"Oh, and we need this done
HaiVision   in two weeks."




                                  Jazkarta
"Oh, and we need this done
HaiVision   in two weeks."




                      "WTF!?"     Jazkarta
DELIVERANCE




               Deliverance
              to the rescue!
Why Deliverance?
•   They have three different sections of the
    site, each needing to be themed differently.
•   They want to change the design, but their
    staff only knows HTML/CSS.
•   They might want to theme another web
    app to have the same look-n-feel as their
    website.
•   Oh, and they want this done ASAP.

                                             jazkarta
Why not a Plone theme?
•   Significant man hours to make a pixel perfect Plone
    theme
•   Difficult to apply a different theme for different
    sections of the site
•   The customer should not have to learn Plone
    theming technology to make design changes.
•   One less piece of software that we have to maintain
•   Difficult to upgrade to newer versions of Plone
    when there are many theme customizations
                                                   jazkarta
Seven Steps to Heaven




                    jazkarta
Seven Steps to Heaven

1. Check out and run the Deliverance demo buildout




                                           jazkarta
Seven Steps to Heaven

1. Check out and run the Deliverance demo buildout
2. Prepare your HTML/CSS files (might need to do
   some cleanup)




                                           jazkarta
Seven Steps to Heaven

1. Check out and run the Deliverance demo buildout
2. Prepare your HTML/CSS files (might need to do
   some cleanup)
3. Stick the files in a /static folder in buildout dir




                                                  jazkarta
jazkarta
4. Identify the CSS selectors of the elements in the
   Plone site that we wish to map to the static
   theme.




                                              jazkarta
4. Identify the CSS selectors of the elements in the
   Plone site that we wish to map to the static
   theme.
5. Identify the CSS selectors in the static theme that
   should serve as placeholders for the dynamic
   content coming from Plone.




                                               jazkarta
4. Identify the CSS selectors of the elements in the
   Plone site that we wish to map to the static
   theme.
5. Identify the CSS selectors in the static theme that
   should serve as placeholders for the dynamic
   content coming from Plone.
6. Create a rules file that maps Plone content
   elements to placeholder elements in the theme



                                               jazkarta
4. Identify the CSS selectors of the elements in the
   Plone site that we wish to map to the static
   theme.
5. Identify the CSS selectors in the static theme that
   should serve as placeholders for the dynamic
   content coming from Plone.
6. Create a rules file that maps Plone content
   elements to placeholder elements in the theme
7. Set up an Apache vhost to proxy to Deliverance

                                               jazkarta
Start your engines!   jazkarta
1. Check out and run
          the demo buildout
svn co http://svn.plone.org/svn/collective/deliverancedemo/trunk/ dd



Run the bootstrap command and run the buildout

cd dd
python bootstrap.py
bin/buildout -v


 This will install Deliverance and it's dependencies (lxml)
              and install a Plone site at /Plone
                                                         jazkarta
2. Prepare your HTML/CSS

•   An HTML/CSS template that you downloaded
    from somewhere
•   Design assets that were given to you by a
    customer, design agency or your designer
•   A design from an existing website



                                                jazkarta
jazkarta
3. Stick them in a /static
   dir in your buildout




                        jazkarta
3. Stick them in a /static
   dir in your buildout




                        jazkarta
4. Identify elements in
Plone to map to design

•   Firebug is your friend (www.getfirebug.com)
•   Click on elements to get their class or id
•   Can also get XPath expression by right-
    clicking on element



                                              jazkarta
jazkarta
jazkarta
5. Identify the corresponding
     element in the theme
  •   You may need to add a class or ID to better
      identify the element.
  •   You can use an absolute path to the element in
      the DOM, but if the element gets moved, the
      mapping rule will not work anymore.
  •   So it's best to always use a class or ID to avoid
      breakage.

                                                  jazkarta
jazkarta
jazkarta
rules-training.xml
<?xml version="1.0" encoding="UTF-8"?>
<ruleset>

  <server-settings>
    <server>0.0.0.0:5000</server>
    <execute-pyref>true</execute-pyref>
    <dev-allow>127.0.0.1</dev-allow>
    <dev-user username="guest" password="guest" />
  </server-settings>

  <proxy path="/static" class="static" editable="1">
    <dest href="{here}/static/" />
  </proxy>

  <proxy path="/" class="plone">
    <dest href="http://localhost:8080/VirtualHostBase/http/
localhost:5000/Plone/VirtualHostRoot/" />
  </proxy>

  <rule class="static" />
                                                          jazkarta
rules-training.xml
<?xml version="1.0" encoding="UTF-8"?>
<ruleset>

                Open the rules-training.xml file
  <server-settings>
                  in the buildout directory.
    <server>0.0.0.0:5000</server>
    <execute-pyref>true</execute-pyref>
    <dev-allow>127.0.0.1</dev-allow>
    <dev-user username="guest" password="guest" />
  </server-settings>

  <proxy path="/static" class="static" editable="1">
    <dest href="{here}/static/" />
  </proxy>

  <proxy path="/" class="plone">
    <dest href="http://localhost:8080/VirtualHostBase/http/
localhost:5000/Plone/VirtualHostRoot/" />
  </proxy>

  <rule class="static" />
                                                          jazkarta
The "plone" rule class
<rule class="plone">

   <!-- Theme -->
   <theme href="/static/index.html" />

   <!-- Put your rules below this line -->

  </rule>
</ruleset>




                                             jazkarta
Replace rule
            for page heading

<replace content='children:_______________________'

           theme='children:_________________' />




                                               jazkarta
Replace rule
            for page heading

<replace content='children:h1.documentFirstHeading'

           theme='children:_________________' />




                                               jazkarta
Replace rule
            for page heading

<replace content='children:h1.documentFirstHeading'

           theme='children:span.sectionTitle' />




                                               jazkarta
6. Insert our rule into the
      rules-training.xml file
<rule class="plone">

   <!-- Theme -->
   <theme href="/static/index.html" />

   <!-- Put your rules below this line -->


   <replace content='children:h1.documentFirstHeading'

               theme='children:span.sectionTitle' />


  </rule>
</ruleset>

                                                         jazkarta
Let's start up Zope and
          the Deliverance proxy
$ cd dd

$ bin/instance start
. . daemon process started, pid=3556

$ bin/deliverance-proxy rules-training.xml

To see logging, visit http://127.0.0.1:5000/.deliverance/login
    after login go to http://127.0.0.1:5000/?deliv_log
serving on http://127.0.0.1:5000




                                                         jazkarta
Go to
http://localhost:5000
... to see the Plone site themed with Deliverance
jazkarta
jazkarta
Replace navigation tree
Replace navigation tree

<drop content='.portletNavigationTree dt.portletHeader' />
Replace navigation tree

<drop content='.portletNavigationTree dt.portletHeader' />

<drop content='li.navTreeItem img' />
Replace navigation tree

<drop content='.portletNavigationTree dt.portletHeader' />

<drop content='li.navTreeItem img' />
Replace navigation tree

<drop content='.portletNavigationTree dt.portletHeader' />

<drop content='li.navTreeItem img' />



<replace content="dl.portletNavigationTree"
Replace navigation tree

<drop content='.portletNavigationTree dt.portletHeader' />

<drop content='li.navTreeItem img' />



<replace content="dl.portletNavigationTree"

           theme="children:#left-navigation" />
Replace navigation tree

<drop content='.portletNavigationTree dt.portletHeader' />

<drop content='li.navTreeItem img' />



<replace content="dl.portletNavigationTree"

           theme="children:#left-navigation" />




        Must place drop rules before replace rule.
How do you theme the
 sections differently?
haivision.com/products




                     jazkarta
Apply page class by path

<match path="/" class="default" />



<match path="/applications" class="applications" />



<match path="exact:/" class="frontpage" />




                                             jazkarta
haivision.com/applications




                       jazkarta
haivision.com/applications




                       jazkarta
Repurpose static portlet




                      jazkarta
Repurpose static portlet




                      jazkarta
Repurpose static portlet




                      jazkarta
Each page class can have
a separate theme & rules




                      jazkarta
Each page class can have
 a separate theme & rules
<rule class="applications" suppress-standard="1">

    <theme href="/static/applications.html" />



    <replace content='children:p.documentDescription'

            theme='children:span.SectionSubtitle' />



    <replace content='children:#portal-column-two'

            theme='children:#right-column' />

</rule>
                                                 jazkarta
frontpage: haivision.com/




                       jazkarta
frontpage: haivision.com/




                       jazkarta
Repurpose the news portlet




                      jazkarta
Repurpose the news portlet




                      jazkarta
Repurpose the news portlet




                      jazkarta
Frontpage has it's own
       theme and rules
<rule class="frontpage">

    <theme href="/static/frontpage.html"/>

    <drop content=".portletNews dt.portletHeader" />

    <drop content='.portletNews dd.portletFooter' />

    <drop content='.portletNews dd.portletItem img' />

    <replace content='dl.portletNews'

              theme='children:#newsbox' />

</rule>

                                               jazkarta
Serve up different web apps




                       jazkarta
Serve up different web apps
<proxy path="/trac" class="trac">
  <dest href="http://localhost:10002" />
</proxy>


<proxy path="/blog" class="blog">
  <dest href="http://localhost:10003" />
</proxy>


<proxy path="/" class="plone">
    <transform rewrite-links="1" keep-host="1" />
    <dest href="http://localhost:8081/VirtualHostBase/http/
{HOST}/sites/haivision-manage/VirtualHostRoot/" />
</proxy>                                            jazkarta
How do I deploy Deliverance
     into production?
   •   Run as a proxy on port 5000. Apache or
       Nginx proxies to port 5000.
       •   two separate python processes
   •   Run as WSGI middleware.
       •   only one python process running



                                                jazkarta
Where does Deliverance
   sit in the stack?

                Apache




        Deliverance

        !"#$
        %&'($




                         jazkarta
Where does Deliverance
   sit in the stack?

                Apache




        Deliverance

        !"#$
        %&'($




                         jazkarta
7. Make the Apache vhost
<VirtualHost *:80>

    ServerName www.haivision.com

    ProxyPreserveHost On

    RewriteEngine On

    RewriteRule ^/(.*) http://127.0.0.1:5000/$1 [L,P]

</VirtualHost>




    The ProxyPreserveHost is very important.
                                              jazkarta
What about
         performance?
•   Deliverance respects caching headers
•   Pages load fast because they don't have to
    load all of Plone's assets
•   Deliverance runs in small memory footprint
    and takes hardly any server resources



                                            jazkarta
How is Deliverance
 better than xdv?




                     jazkarta
How is Deliverance
         better than xdv?

•   Has a dedicated maintainer




                                 jazkarta
How is Deliverance
         better than xdv?

•   Has a dedicated maintainer
•   Use CSS selectors instead of only XPath




                                              jazkarta
How is Deliverance
         better than xdv?

•   Has a dedicated maintainer
•   Use CSS selectors instead of only XPath
•   Can combine multiple themes without Apache magic



                                              jazkarta
More Deliverance advantages

•   Serves static resources directly from the file system.
    No need to make a skin or serve from Apache.
•   Deliverance has a very useful debugging console
•   Deliverance lets you edit files through-the-web



                                                 jazkarta
Debugging console
Edit rules TTW




http://codespeak.net/svn/z3/deliverance/trunk/deliverance/editor/
dvsites - wsgi middleware
          Map domains to different rules files

[sites]

domains =

   *.mysite            %(here)s/rules/mysite.xml

   anothersite.com     %(here)s/rules/anothersite.xml




     http://svn.plone.org/svn/collective/dvsites/
Future

•   CSSZenGarden for Plone themes

    •   theme1.demo.plone.org
    •   theme2.demo.plone.org
    •   ...
Banjo

•   jQuery-powered frontend to rules creation
•   Make rules by point-n-click
•   Still in proof-of-concept stage




                                           jazkarta
Banjo demo
http://localhost:5000/banjo/
Thanks to...


Paul Everitt




                               Fred van Dijk
                               Reinout van Rees
Jordan Baker     Eric Steele
Thanks to...


Paul Everitt




                               Fred van Dijk
                               Reinout van Rees
Jordan Baker     Eric Steele
Thanks to...


Paul Everitt     Ian Bicking




                               Fred van Dijk
                               Reinout van Rees
Jordan Baker     Eric Steele
Thanks to...


Paul Everitt     Ian Bicking




                               Fred van Dijk
                               Reinout van Rees
Jordan Baker     Eric Steele
Thanks to...


Paul Everitt     Ian Bicking   Aaron VanDerlip




                                Fred van Dijk
                                Reinout van Rees
Jordan Baker     Eric Steele
Project pages
http://coactivate.org/projects/deliverance/
http://coactivate.org/projects/banjo/


Deliverance documentation and tutorial
http://deliverance.openplans.org
http://plone.org/docu



Sample Deliverance buildouts
http://svn.plone.org/svn/collective/ploneconf/buildout/ploneconf/trunk/
http://svn.plone.org/svn/collective/deliverancedemo/trunk
                                                            jazkarta
Banjo sprint this wkend?

       •   jQuery help needed
       •   Python programmers wanted
       •   User interface gurus



            Put your name on the interest list at:
http://www.coactivate.org/projects/banjo/plone-conference-banjo-sprint
                                                            jazkarta
Photo credits
•   http://www.flickr.com/photos/sir_mervs/2697096089/
•   http://www.flickr.com/photos/foxypar4/1004464889
•   http://www.flickr.com/photos/pamilne/2271490945
•   http://www.flickr.com/photos/motleye/1459699804
•   http://www.flickr.com/photos/kaptainkobold/351967847
•   http://www.flickr.com/photos/aldoaldoz/2332755401
•   http://xkcd.com/353/
                                             jazkarta

Weitere ähnliche Inhalte

Andere mochten auch

Modern Western Music
Modern Western MusicModern Western Music
Modern Western Musicjojopw
 
Country presentation
Country presentationCountry presentation
Country presentationTudy Parau
 
Anatomy of a Large Website Project
Anatomy of a Large Website ProjectAnatomy of a Large Website Project
Anatomy of a Large Website ProjectJazkarta, Inc.
 
Theme In Literature
Theme In LiteratureTheme In Literature
Theme In LiteratureMark Dixon
 
How to make effective presentation
How to make effective presentationHow to make effective presentation
How to make effective presentationSatyajeet Singh
 
Effective presentation skills
Effective presentation skillsEffective presentation skills
Effective presentation skillsAshish Srivastava
 

Andere mochten auch (7)

Dueling banjos
Dueling banjosDueling banjos
Dueling banjos
 
Modern Western Music
Modern Western MusicModern Western Music
Modern Western Music
 
Country presentation
Country presentationCountry presentation
Country presentation
 
Anatomy of a Large Website Project
Anatomy of a Large Website ProjectAnatomy of a Large Website Project
Anatomy of a Large Website Project
 
Theme In Literature
Theme In LiteratureTheme In Literature
Theme In Literature
 
How to make effective presentation
How to make effective presentationHow to make effective presentation
How to make effective presentation
 
Effective presentation skills
Effective presentation skillsEffective presentation skills
Effective presentation skills
 

Ähnlich wie Deliverance - a compelling way to theme Plone sites

Easier and faster Plone theming with Deliverance and xdv
Easier and faster Plone theming with Deliverance and xdvEasier and faster Plone theming with Deliverance and xdv
Easier and faster Plone theming with Deliverance and xdvJazkarta, Inc.
 
Responsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and TechniquesResponsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and TechniquesVitaly Friedman
 
Pump up the JAM with Gatsby
Pump up the JAM with GatsbyPump up the JAM with Gatsby
Pump up the JAM with GatsbyStefan Adolf
 
Front-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewFront-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewDiacode
 
Designing in the Browser - Mason Wendell, Drupaldelphia
Designing in the Browser - Mason Wendell, DrupaldelphiaDesigning in the Browser - Mason Wendell, Drupaldelphia
Designing in the Browser - Mason Wendell, Drupaldelphiacanarymason
 
Css3 transitions and animations + graceful degradation with jQuery
Css3 transitions and animations + graceful degradation with jQueryCss3 transitions and animations + graceful degradation with jQuery
Css3 transitions and animations + graceful degradation with jQueryAndrea Verlicchi
 
WordCamp 2012 - WordPress Webapps
WordCamp 2012 - WordPress WebappsWordCamp 2012 - WordPress Webapps
WordCamp 2012 - WordPress Webappstjasko
 
Famo.us introduction
Famo.us introductionFamo.us introduction
Famo.us introductionAllen Wu
 
Rapid Prototyping with Sass, Compass and Middleman by Bermon Painter
Rapid Prototyping with Sass, Compass and Middleman by Bermon PainterRapid Prototyping with Sass, Compass and Middleman by Bermon Painter
Rapid Prototyping with Sass, Compass and Middleman by Bermon PainterCodemotion
 
Quo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynoteQuo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynoteChristian Heilmann
 
A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....
A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....
A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....Aidan Foster
 
Design4Drupal Boston 2013 - Bumps in the Road to Responsive
Design4Drupal Boston 2013 - Bumps in the Road to ResponsiveDesign4Drupal Boston 2013 - Bumps in the Road to Responsive
Design4Drupal Boston 2013 - Bumps in the Road to ResponsiveSalem Ghoweri
 
Responsive & Responsible: Implementing Responsive Design at Scale
Responsive & Responsible: Implementing Responsive Design at ScaleResponsive & Responsible: Implementing Responsive Design at Scale
Responsive & Responsible: Implementing Responsive Design at Scalescottjehl
 
Future-Proof Responsive Web Design #RWD
Future-Proof Responsive Web Design #RWDFuture-Proof Responsive Web Design #RWD
Future-Proof Responsive Web Design #RWDDigital Surgeons
 
CSS vs. JavaScript - Trust vs. Control
CSS vs. JavaScript - Trust vs. ControlCSS vs. JavaScript - Trust vs. Control
CSS vs. JavaScript - Trust vs. ControlChristian Heilmann
 
Creating Responsive Drupal Sites with Zen Grids and the Zen 5 Theme
Creating Responsive Drupal Sites with Zen Grids and the Zen 5 ThemeCreating Responsive Drupal Sites with Zen Grids and the Zen 5 Theme
Creating Responsive Drupal Sites with Zen Grids and the Zen 5 ThemeAcquia
 
Rapid and Responsive - UX to Prototype with Bootstrap
Rapid and Responsive - UX to Prototype with BootstrapRapid and Responsive - UX to Prototype with Bootstrap
Rapid and Responsive - UX to Prototype with BootstrapJosh Jeffryes
 
Usersnap and the javascript magic behind the scenes - ViennaJS
Usersnap and the javascript magic behind the scenes - ViennaJSUsersnap and the javascript magic behind the scenes - ViennaJS
Usersnap and the javascript magic behind the scenes - ViennaJSUsersnap
 

Ähnlich wie Deliverance - a compelling way to theme Plone sites (20)

Easier and faster Plone theming with Deliverance and xdv
Easier and faster Plone theming with Deliverance and xdvEasier and faster Plone theming with Deliverance and xdv
Easier and faster Plone theming with Deliverance and xdv
 
Responsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and TechniquesResponsive Web Design: Clever Tips and Techniques
Responsive Web Design: Clever Tips and Techniques
 
Pump up the JAM with Gatsby
Pump up the JAM with GatsbyPump up the JAM with Gatsby
Pump up the JAM with Gatsby
 
Front-End Frameworks: a quick overview
Front-End Frameworks: a quick overviewFront-End Frameworks: a quick overview
Front-End Frameworks: a quick overview
 
Designing in the Browser - Mason Wendell, Drupaldelphia
Designing in the Browser - Mason Wendell, DrupaldelphiaDesigning in the Browser - Mason Wendell, Drupaldelphia
Designing in the Browser - Mason Wendell, Drupaldelphia
 
Css3 transitions and animations + graceful degradation with jQuery
Css3 transitions and animations + graceful degradation with jQueryCss3 transitions and animations + graceful degradation with jQuery
Css3 transitions and animations + graceful degradation with jQuery
 
WordCamp 2012 - WordPress Webapps
WordCamp 2012 - WordPress WebappsWordCamp 2012 - WordPress Webapps
WordCamp 2012 - WordPress Webapps
 
Famo.us introduction
Famo.us introductionFamo.us introduction
Famo.us introduction
 
wt mod3.pdf
wt mod3.pdfwt mod3.pdf
wt mod3.pdf
 
Rapid Prototyping with Sass, Compass and Middleman by Bermon Painter
Rapid Prototyping with Sass, Compass and Middleman by Bermon PainterRapid Prototyping with Sass, Compass and Middleman by Bermon Painter
Rapid Prototyping with Sass, Compass and Middleman by Bermon Painter
 
Quo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynoteQuo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynote
 
A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....
A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....
A Responsive Design Case Study - What We Did Wrong Building ResponsiveDesign....
 
Design4Drupal Boston 2013 - Bumps in the Road to Responsive
Design4Drupal Boston 2013 - Bumps in the Road to ResponsiveDesign4Drupal Boston 2013 - Bumps in the Road to Responsive
Design4Drupal Boston 2013 - Bumps in the Road to Responsive
 
Responsive & Responsible: Implementing Responsive Design at Scale
Responsive & Responsible: Implementing Responsive Design at ScaleResponsive & Responsible: Implementing Responsive Design at Scale
Responsive & Responsible: Implementing Responsive Design at Scale
 
Future proof rwd
Future proof rwdFuture proof rwd
Future proof rwd
 
Future-Proof Responsive Web Design #RWD
Future-Proof Responsive Web Design #RWDFuture-Proof Responsive Web Design #RWD
Future-Proof Responsive Web Design #RWD
 
CSS vs. JavaScript - Trust vs. Control
CSS vs. JavaScript - Trust vs. ControlCSS vs. JavaScript - Trust vs. Control
CSS vs. JavaScript - Trust vs. Control
 
Creating Responsive Drupal Sites with Zen Grids and the Zen 5 Theme
Creating Responsive Drupal Sites with Zen Grids and the Zen 5 ThemeCreating Responsive Drupal Sites with Zen Grids and the Zen 5 Theme
Creating Responsive Drupal Sites with Zen Grids and the Zen 5 Theme
 
Rapid and Responsive - UX to Prototype with Bootstrap
Rapid and Responsive - UX to Prototype with BootstrapRapid and Responsive - UX to Prototype with Bootstrap
Rapid and Responsive - UX to Prototype with Bootstrap
 
Usersnap and the javascript magic behind the scenes - ViennaJS
Usersnap and the javascript magic behind the scenes - ViennaJSUsersnap and the javascript magic behind the scenes - ViennaJS
Usersnap and the javascript magic behind the scenes - ViennaJS
 

Mehr von Jazkarta, Inc.

Traveling through time and place with Plone
Traveling through time and place with PloneTraveling through time and place with Plone
Traveling through time and place with PloneJazkarta, Inc.
 
Questions: A Form Library for Python with SurveyJS Frontend
Questions: A Form Library for Python with SurveyJS FrontendQuestions: A Form Library for Python with SurveyJS Frontend
Questions: A Form Library for Python with SurveyJS FrontendJazkarta, Inc.
 
The User Experience: Editing Composite Pages in Plone 6 and Beyond
The User Experience: Editing Composite Pages in Plone 6 and BeyondThe User Experience: Editing Composite Pages in Plone 6 and Beyond
The User Experience: Editing Composite Pages in Plone 6 and BeyondJazkarta, Inc.
 
WTA and Plone After 13 Years
WTA and Plone After 13 YearsWTA and Plone After 13 Years
WTA and Plone After 13 YearsJazkarta, Inc.
 
Collaborating With Orchid Data
Collaborating With Orchid DataCollaborating With Orchid Data
Collaborating With Orchid DataJazkarta, Inc.
 
Spend a Week Hacking in Sorrento!
Spend a Week Hacking in Sorrento!Spend a Week Hacking in Sorrento!
Spend a Week Hacking in Sorrento!Jazkarta, Inc.
 
Plone 5 Upgrades In Real Life
Plone 5 Upgrades In Real LifePlone 5 Upgrades In Real Life
Plone 5 Upgrades In Real LifeJazkarta, Inc.
 
Accessibility in Plone: The Good, the Bad, and the Ugly
Accessibility in Plone: The Good, the Bad, and the UglyAccessibility in Plone: The Good, the Bad, and the Ugly
Accessibility in Plone: The Good, the Bad, and the UglyJazkarta, Inc.
 
Getting Paid Without GetPaid
Getting Paid Without GetPaidGetting Paid Without GetPaid
Getting Paid Without GetPaidJazkarta, Inc.
 
An Open Source Platform for Social Science Research
An Open Source Platform for Social Science ResearchAn Open Source Platform for Social Science Research
An Open Source Platform for Social Science ResearchJazkarta, Inc.
 
For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...
For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...
For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...Jazkarta, Inc.
 
Anatomy of a Large Website Project - With Presenter Notes
Anatomy of a Large Website Project - With Presenter NotesAnatomy of a Large Website Project - With Presenter Notes
Anatomy of a Large Website Project - With Presenter NotesJazkarta, Inc.
 
The Mountaineers: Scaling the Heights with Plone
The Mountaineers: Scaling the Heights with PloneThe Mountaineers: Scaling the Heights with Plone
The Mountaineers: Scaling the Heights with PloneJazkarta, Inc.
 
Plone Hosting: A Panel Discussion
Plone Hosting: A Panel DiscussionPlone Hosting: A Panel Discussion
Plone Hosting: A Panel DiscussionJazkarta, Inc.
 
Academic Websites in Plone
Academic Websites in PloneAcademic Websites in Plone
Academic Websites in PloneJazkarta, Inc.
 
Online Exhibits in Plone
Online Exhibits in PloneOnline Exhibits in Plone
Online Exhibits in PloneJazkarta, Inc.
 
Online exhibits in Plone
Online exhibits in PloneOnline exhibits in Plone
Online exhibits in PloneJazkarta, Inc.
 

Mehr von Jazkarta, Inc. (20)

Traveling through time and place with Plone
Traveling through time and place with PloneTraveling through time and place with Plone
Traveling through time and place with Plone
 
Questions: A Form Library for Python with SurveyJS Frontend
Questions: A Form Library for Python with SurveyJS FrontendQuestions: A Form Library for Python with SurveyJS Frontend
Questions: A Form Library for Python with SurveyJS Frontend
 
The User Experience: Editing Composite Pages in Plone 6 and Beyond
The User Experience: Editing Composite Pages in Plone 6 and BeyondThe User Experience: Editing Composite Pages in Plone 6 and Beyond
The User Experience: Editing Composite Pages in Plone 6 and Beyond
 
WTA and Plone After 13 Years
WTA and Plone After 13 YearsWTA and Plone After 13 Years
WTA and Plone After 13 Years
 
Collaborating With Orchid Data
Collaborating With Orchid DataCollaborating With Orchid Data
Collaborating With Orchid Data
 
Spend a Week Hacking in Sorrento!
Spend a Week Hacking in Sorrento!Spend a Week Hacking in Sorrento!
Spend a Week Hacking in Sorrento!
 
Plone 5 Upgrades In Real Life
Plone 5 Upgrades In Real LifePlone 5 Upgrades In Real Life
Plone 5 Upgrades In Real Life
 
Accessibility in Plone: The Good, the Bad, and the Ugly
Accessibility in Plone: The Good, the Bad, and the UglyAccessibility in Plone: The Good, the Bad, and the Ugly
Accessibility in Plone: The Good, the Bad, and the Ugly
 
Getting Paid Without GetPaid
Getting Paid Without GetPaidGetting Paid Without GetPaid
Getting Paid Without GetPaid
 
An Open Source Platform for Social Science Research
An Open Source Platform for Social Science ResearchAn Open Source Platform for Social Science Research
An Open Source Platform for Social Science Research
 
For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...
For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...
For the Love of Volunteers! How Do You Choose the Right Technology to Manage ...
 
Anatomy of a Large Website Project - With Presenter Notes
Anatomy of a Large Website Project - With Presenter NotesAnatomy of a Large Website Project - With Presenter Notes
Anatomy of a Large Website Project - With Presenter Notes
 
The Mountaineers: Scaling the Heights with Plone
The Mountaineers: Scaling the Heights with PloneThe Mountaineers: Scaling the Heights with Plone
The Mountaineers: Scaling the Heights with Plone
 
Plone Hosting: A Panel Discussion
Plone Hosting: A Panel DiscussionPlone Hosting: A Panel Discussion
Plone Hosting: A Panel Discussion
 
Plone+Salesforce
Plone+SalesforcePlone+Salesforce
Plone+Salesforce
 
Academic Websites in Plone
Academic Websites in PloneAcademic Websites in Plone
Academic Websites in Plone
 
Plone
PlonePlone
Plone
 
Online Exhibits in Plone
Online Exhibits in PloneOnline Exhibits in Plone
Online Exhibits in Plone
 
Online exhibits in Plone
Online exhibits in PloneOnline exhibits in Plone
Online exhibits in Plone
 
ZODB Tips and Tricks
ZODB Tips and TricksZODB Tips and Tricks
ZODB Tips and Tricks
 

Kürzlich hochgeladen

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
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
 
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
 
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
 
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
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
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
 
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
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
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
 
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
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 

Kürzlich hochgeladen (20)

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
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
 
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
 
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
 
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!
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
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
 
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)
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
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)
 
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!
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 

Deliverance - a compelling way to theme Plone sites

  • 1. Deliverance a compelling way to Plone sites Nate Aune www.jazkarta.com Plone Conference 2009
  • 2. Slides to add • if-content • used to match certain templates • proxy to live site • jquery.com example - show theme= • how to handle theming of elements inside the HTML that Plone generates in the static theme • does the XML file need to be well-formed? what about the HTML? does it need to be valid XHTML. • can Plone's authoring interface be themed to look like the Deliverance-themed site? jazkarta
  • 3. Obstacles Plone theming has a high barrier to entry
  • 4. Theming in Plone an exercise in patience • Install dependencies (Python, XCode, GCC) • Create a theme egg using paster • Put your stylesheets and images in /browser • But override Plone assets in /skins • To turn off viewlets, must edit configure.zcml • To make new viewlets must code Python • Must learn ZPT to edit page templates jazkarta
  • 5. Knowledge needed • Buildout • Paster • Zope page templates (ZPT) • Python • ZCML • resource registry (for CSS and JS) • /skins vs. /browser jazkarta
  • 6. Does your head hurt yet? jazkarta
  • 7. What is Deliverance? • Middleware tool that serves as a proxy • Maps content HTML into design HTML • Keeps presentation separate from content jazkarta
  • 8. Who is it for? jazkarta
  • 9. Who is it for? • Designers jazkarta
  • 10. Who is it for? • Designers • Integrators jazkarta
  • 11. Who is it for? • Designers • Integrators • Developers jazkarta
  • 12. Who is it for? • Designers • Integrators • Developers • Customers jazkarta
  • 13. How does it work? jazkarta
  • 14. How does it work? move elements from your content jazkarta
  • 15. How does it work? move elements from your content jazkarta
  • 16. How does it work? move elements from your content into placeholders in your theme jazkarta
  • 17. How does it work? move elements from your content into placeholders in your theme jazkarta
  • 18. How does it work? move elements from your content into placeholders in your theme ... without touching the theme or content jazkarta
  • 19. How does it work? move elements from your content into placeholders in your theme ... without touching the theme or content jazkarta
  • 22. Deliverance jazkarta
  • 23. Knowledge needed • HTML • CSS • Firebug • simple editing of XML file jazkarta
  • 24. Four simple rules • drop • replace • prepend • append jazkarta
  • 25. Deliverance benefits • web designer doesn't need to learn CMS templating • separation of concerns • theme multiple apps with one design (trac, wiki, blog, etc.) jazkarta
  • 26. Who is using Deliverance? jazkarta
  • 27. Who is using Deliverance? • plone.org jazkarta
  • 28. Who is using Deliverance? • plone.org • plone.tv jazkarta
  • 29. Who is using Deliverance? • plone.org • plone.tv • Harvard School of Engineering (subsites) jazkarta
  • 30. Who is using Deliverance? • plone.org • plone.tv • Harvard School of Engineering (subsites) • ploneconf2009.org (get the buildout!) jazkarta
  • 31. Who is using Deliverance? • plone.org • plone.tv • Harvard School of Engineering (subsites) • ploneconf2009.org (get the buildout!) • repoze.org (multi-app theming) jazkarta
  • 32. Who is using Deliverance? • plone.org • plone.tv • Harvard School of Engineering (subsites) • ploneconf2009.org (get the buildout!) • repoze.org (multi-app theming) • and many others... jazkarta
  • 33. Case study A real world example of using Deliverance
  • 38. "Replace our custom backend with Plone CMS." HaiVision jazkarta
  • 39. "Replace our custom backend with Plone CMS." HaiVision "Sure, we can do that." Jazkarta jazkarta
  • 40. "Replace our custom backend with Plone CMS." HaiVision "Sure, we can do that." Jazkarta "Keep the frontend design the same." HaiVision jazkarta
  • 41. "Replace our custom backend with Plone CMS." HaiVision "Sure, we can do that." Jazkarta "Keep the frontend design the same." HaiVision "No problem." Jazkarta jazkarta
  • 42. "Replace our custom backend with Plone CMS." HaiVision "Sure, we can do that." Jazkarta "Keep the frontend design the same." HaiVision "No problem." Jazkarta "We're going to change the design soon, and we want to be able to change the HTML/CSS HaiVision ourselves." jazkarta
  • 43. "Replace our custom backend with Plone CMS." HaiVision "Sure, we can do that." Jazkarta "Keep the frontend design the same." HaiVision "No problem." Jazkarta "We're going to change the design soon, and we want to be able to change the HTML/CSS HaiVision ourselves." "Umm. Ok, you will be able to do that." Jazkarta jazkarta
  • 44. Customers change their mind about their identity all the time. Don't make it painful than it already is for them.
  • 45. "Oh, and we need this done HaiVision in two weeks." Jazkarta
  • 46. "Oh, and we need this done HaiVision in two weeks." "WTF!?" Jazkarta
  • 47. DELIVERANCE Deliverance to the rescue!
  • 48. Why Deliverance? • They have three different sections of the site, each needing to be themed differently. • They want to change the design, but their staff only knows HTML/CSS. • They might want to theme another web app to have the same look-n-feel as their website. • Oh, and they want this done ASAP. jazkarta
  • 49. Why not a Plone theme? • Significant man hours to make a pixel perfect Plone theme • Difficult to apply a different theme for different sections of the site • The customer should not have to learn Plone theming technology to make design changes. • One less piece of software that we have to maintain • Difficult to upgrade to newer versions of Plone when there are many theme customizations jazkarta
  • 50. Seven Steps to Heaven jazkarta
  • 51. Seven Steps to Heaven 1. Check out and run the Deliverance demo buildout jazkarta
  • 52. Seven Steps to Heaven 1. Check out and run the Deliverance demo buildout 2. Prepare your HTML/CSS files (might need to do some cleanup) jazkarta
  • 53. Seven Steps to Heaven 1. Check out and run the Deliverance demo buildout 2. Prepare your HTML/CSS files (might need to do some cleanup) 3. Stick the files in a /static folder in buildout dir jazkarta
  • 55. 4. Identify the CSS selectors of the elements in the Plone site that we wish to map to the static theme. jazkarta
  • 56. 4. Identify the CSS selectors of the elements in the Plone site that we wish to map to the static theme. 5. Identify the CSS selectors in the static theme that should serve as placeholders for the dynamic content coming from Plone. jazkarta
  • 57. 4. Identify the CSS selectors of the elements in the Plone site that we wish to map to the static theme. 5. Identify the CSS selectors in the static theme that should serve as placeholders for the dynamic content coming from Plone. 6. Create a rules file that maps Plone content elements to placeholder elements in the theme jazkarta
  • 58. 4. Identify the CSS selectors of the elements in the Plone site that we wish to map to the static theme. 5. Identify the CSS selectors in the static theme that should serve as placeholders for the dynamic content coming from Plone. 6. Create a rules file that maps Plone content elements to placeholder elements in the theme 7. Set up an Apache vhost to proxy to Deliverance jazkarta
  • 60. 1. Check out and run the demo buildout svn co http://svn.plone.org/svn/collective/deliverancedemo/trunk/ dd Run the bootstrap command and run the buildout cd dd python bootstrap.py bin/buildout -v This will install Deliverance and it's dependencies (lxml) and install a Plone site at /Plone jazkarta
  • 61. 2. Prepare your HTML/CSS • An HTML/CSS template that you downloaded from somewhere • Design assets that were given to you by a customer, design agency or your designer • A design from an existing website jazkarta
  • 63. 3. Stick them in a /static dir in your buildout jazkarta
  • 64. 3. Stick them in a /static dir in your buildout jazkarta
  • 65. 4. Identify elements in Plone to map to design • Firebug is your friend (www.getfirebug.com) • Click on elements to get their class or id • Can also get XPath expression by right- clicking on element jazkarta
  • 68. 5. Identify the corresponding element in the theme • You may need to add a class or ID to better identify the element. • You can use an absolute path to the element in the DOM, but if the element gets moved, the mapping rule will not work anymore. • So it's best to always use a class or ID to avoid breakage. jazkarta
  • 71. rules-training.xml <?xml version="1.0" encoding="UTF-8"?> <ruleset> <server-settings> <server>0.0.0.0:5000</server> <execute-pyref>true</execute-pyref> <dev-allow>127.0.0.1</dev-allow> <dev-user username="guest" password="guest" /> </server-settings> <proxy path="/static" class="static" editable="1"> <dest href="{here}/static/" /> </proxy> <proxy path="/" class="plone"> <dest href="http://localhost:8080/VirtualHostBase/http/ localhost:5000/Plone/VirtualHostRoot/" /> </proxy> <rule class="static" /> jazkarta
  • 72. rules-training.xml <?xml version="1.0" encoding="UTF-8"?> <ruleset> Open the rules-training.xml file <server-settings> in the buildout directory. <server>0.0.0.0:5000</server> <execute-pyref>true</execute-pyref> <dev-allow>127.0.0.1</dev-allow> <dev-user username="guest" password="guest" /> </server-settings> <proxy path="/static" class="static" editable="1"> <dest href="{here}/static/" /> </proxy> <proxy path="/" class="plone"> <dest href="http://localhost:8080/VirtualHostBase/http/ localhost:5000/Plone/VirtualHostRoot/" /> </proxy> <rule class="static" /> jazkarta
  • 73. The "plone" rule class <rule class="plone"> <!-- Theme --> <theme href="/static/index.html" /> <!-- Put your rules below this line --> </rule> </ruleset> jazkarta
  • 74. Replace rule for page heading <replace content='children:_______________________' theme='children:_________________' /> jazkarta
  • 75. Replace rule for page heading <replace content='children:h1.documentFirstHeading' theme='children:_________________' /> jazkarta
  • 76. Replace rule for page heading <replace content='children:h1.documentFirstHeading' theme='children:span.sectionTitle' /> jazkarta
  • 77. 6. Insert our rule into the rules-training.xml file <rule class="plone"> <!-- Theme --> <theme href="/static/index.html" /> <!-- Put your rules below this line --> <replace content='children:h1.documentFirstHeading' theme='children:span.sectionTitle' /> </rule> </ruleset> jazkarta
  • 78. Let's start up Zope and the Deliverance proxy $ cd dd $ bin/instance start . . daemon process started, pid=3556 $ bin/deliverance-proxy rules-training.xml To see logging, visit http://127.0.0.1:5000/.deliverance/login after login go to http://127.0.0.1:5000/?deliv_log serving on http://127.0.0.1:5000 jazkarta
  • 79. Go to http://localhost:5000 ... to see the Plone site themed with Deliverance
  • 80.
  • 81.
  • 85. Replace navigation tree <drop content='.portletNavigationTree dt.portletHeader' />
  • 86. Replace navigation tree <drop content='.portletNavigationTree dt.portletHeader' /> <drop content='li.navTreeItem img' />
  • 87. Replace navigation tree <drop content='.portletNavigationTree dt.portletHeader' /> <drop content='li.navTreeItem img' />
  • 88. Replace navigation tree <drop content='.portletNavigationTree dt.portletHeader' /> <drop content='li.navTreeItem img' /> <replace content="dl.portletNavigationTree"
  • 89. Replace navigation tree <drop content='.portletNavigationTree dt.portletHeader' /> <drop content='li.navTreeItem img' /> <replace content="dl.portletNavigationTree" theme="children:#left-navigation" />
  • 90. Replace navigation tree <drop content='.portletNavigationTree dt.portletHeader' /> <drop content='li.navTreeItem img' /> <replace content="dl.portletNavigationTree" theme="children:#left-navigation" /> Must place drop rules before replace rule.
  • 91. How do you theme the sections differently?
  • 93. Apply page class by path <match path="/" class="default" /> <match path="/applications" class="applications" /> <match path="exact:/" class="frontpage" /> jazkarta
  • 99. Each page class can have a separate theme & rules jazkarta
  • 100. Each page class can have a separate theme & rules <rule class="applications" suppress-standard="1"> <theme href="/static/applications.html" /> <replace content='children:p.documentDescription' theme='children:span.SectionSubtitle' /> <replace content='children:#portal-column-two' theme='children:#right-column' /> </rule> jazkarta
  • 103. Repurpose the news portlet jazkarta
  • 104. Repurpose the news portlet jazkarta
  • 105. Repurpose the news portlet jazkarta
  • 106. Frontpage has it's own theme and rules <rule class="frontpage"> <theme href="/static/frontpage.html"/> <drop content=".portletNews dt.portletHeader" /> <drop content='.portletNews dd.portletFooter' /> <drop content='.portletNews dd.portletItem img' /> <replace content='dl.portletNews' theme='children:#newsbox' /> </rule> jazkarta
  • 107. Serve up different web apps jazkarta
  • 108. Serve up different web apps <proxy path="/trac" class="trac"> <dest href="http://localhost:10002" /> </proxy> <proxy path="/blog" class="blog"> <dest href="http://localhost:10003" /> </proxy> <proxy path="/" class="plone"> <transform rewrite-links="1" keep-host="1" /> <dest href="http://localhost:8081/VirtualHostBase/http/ {HOST}/sites/haivision-manage/VirtualHostRoot/" /> </proxy> jazkarta
  • 109. How do I deploy Deliverance into production? • Run as a proxy on port 5000. Apache or Nginx proxies to port 5000. • two separate python processes • Run as WSGI middleware. • only one python process running jazkarta
  • 110. Where does Deliverance sit in the stack? Apache Deliverance !"#$ %&'($ jazkarta
  • 111. Where does Deliverance sit in the stack? Apache Deliverance !"#$ %&'($ jazkarta
  • 112. 7. Make the Apache vhost <VirtualHost *:80> ServerName www.haivision.com ProxyPreserveHost On RewriteEngine On RewriteRule ^/(.*) http://127.0.0.1:5000/$1 [L,P] </VirtualHost> The ProxyPreserveHost is very important. jazkarta
  • 113. What about performance? • Deliverance respects caching headers • Pages load fast because they don't have to load all of Plone's assets • Deliverance runs in small memory footprint and takes hardly any server resources jazkarta
  • 114. How is Deliverance better than xdv? jazkarta
  • 115. How is Deliverance better than xdv? • Has a dedicated maintainer jazkarta
  • 116. How is Deliverance better than xdv? • Has a dedicated maintainer • Use CSS selectors instead of only XPath jazkarta
  • 117. How is Deliverance better than xdv? • Has a dedicated maintainer • Use CSS selectors instead of only XPath • Can combine multiple themes without Apache magic jazkarta
  • 118. More Deliverance advantages • Serves static resources directly from the file system. No need to make a skin or serve from Apache. • Deliverance has a very useful debugging console • Deliverance lets you edit files through-the-web jazkarta
  • 121. dvsites - wsgi middleware Map domains to different rules files [sites] domains = *.mysite %(here)s/rules/mysite.xml anothersite.com %(here)s/rules/anothersite.xml http://svn.plone.org/svn/collective/dvsites/
  • 122. Future • CSSZenGarden for Plone themes • theme1.demo.plone.org • theme2.demo.plone.org • ...
  • 123. Banjo • jQuery-powered frontend to rules creation • Make rules by point-n-click • Still in proof-of-concept stage jazkarta
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131. Thanks to... Paul Everitt Fred van Dijk Reinout van Rees Jordan Baker Eric Steele
  • 132. Thanks to... Paul Everitt Fred van Dijk Reinout van Rees Jordan Baker Eric Steele
  • 133. Thanks to... Paul Everitt Ian Bicking Fred van Dijk Reinout van Rees Jordan Baker Eric Steele
  • 134. Thanks to... Paul Everitt Ian Bicking Fred van Dijk Reinout van Rees Jordan Baker Eric Steele
  • 135. Thanks to... Paul Everitt Ian Bicking Aaron VanDerlip Fred van Dijk Reinout van Rees Jordan Baker Eric Steele
  • 136. Project pages http://coactivate.org/projects/deliverance/ http://coactivate.org/projects/banjo/ Deliverance documentation and tutorial http://deliverance.openplans.org http://plone.org/docu Sample Deliverance buildouts http://svn.plone.org/svn/collective/ploneconf/buildout/ploneconf/trunk/ http://svn.plone.org/svn/collective/deliverancedemo/trunk jazkarta
  • 137. Banjo sprint this wkend? • jQuery help needed • Python programmers wanted • User interface gurus Put your name on the interest list at: http://www.coactivate.org/projects/banjo/plone-conference-banjo-sprint jazkarta
  • 138. Photo credits • http://www.flickr.com/photos/sir_mervs/2697096089/ • http://www.flickr.com/photos/foxypar4/1004464889 • http://www.flickr.com/photos/pamilne/2271490945 • http://www.flickr.com/photos/motleye/1459699804 • http://www.flickr.com/photos/kaptainkobold/351967847 • http://www.flickr.com/photos/aldoaldoz/2332755401 • http://xkcd.com/353/ jazkarta

Hinweis der Redaktion

  1. One of the first things people want to do with their web site is change the look-n-feel. Unfortunately, with Plone this is a time consuming and frustrating experience for most people.
  2. If you&apos;ve ever tried to theme a Plone site, you know that there are a lot of concepts to wrap your head around before you start seeing results. The learning curve is simply to steep for most people.
  3. Poll the audience to see who represents each role.
  4. Poll the audience to see who represents each role.
  5. Poll the audience to see who represents each role.
  6. Poll the audience to see who represents each role.
  7. If you know this one from XKCD, it says &quot;You&apos;re flying! How?&quot; and the guy up in the sky says, &quot;Python!&quot;
  8. plone.org is actually using xdv, but same underlying technology plone.tv was one of the first sites to adopt it in production (currently down), SEAS was our first customer project.
  9. plone.org is actually using xdv, but same underlying technology plone.tv was one of the first sites to adopt it in production (currently down), SEAS was our first customer project.
  10. plone.org is actually using xdv, but same underlying technology plone.tv was one of the first sites to adopt it in production (currently down), SEAS was our first customer project.
  11. plone.org is actually using xdv, but same underlying technology plone.tv was one of the first sites to adopt it in production (currently down), SEAS was our first customer project.
  12. plone.org is actually using xdv, but same underlying technology plone.tv was one of the first sites to adopt it in production (currently down), SEAS was our first customer project.
  13. plone.org is actually using xdv, but same underlying technology plone.tv was one of the first sites to adopt it in production (currently down), SEAS was our first customer project.
  14. HaiVision approached us and said that they wanted to use Plone as the CMS for their website, that was currently powered by an inflexible custom Cold Fusion app.
  15. Significant # of man hours required to make a pixel perfect theme that fits within Plone&apos;s templating structure.
  16. After 2) we did some clean-up of the HTML, mostly changing the GIF images that were used as navigation to text. 3) Obviously need to run buildout to build Deliverance and its dependencies.
  17. After 2) we did some clean-up of the HTML, mostly changing the GIF images that were used as navigation to text. 3) Obviously need to run buildout to build Deliverance and its dependencies.
  18. After 2) we did some clean-up of the HTML, mostly changing the GIF images that were used as navigation to text. 3) Obviously need to run buildout to build Deliverance and its dependencies.
  19. For those of you who like to follow along, now you can fire up your terminal and do some Deliverance theming.
  20. Rename to index.html and images. Change all references to &quot;products_files&quot; in index.html to &quot;images&quot;
  21. The only thing dynamic on this page is the news box. Every thing else is static that the customer manages in the HTML.
  22. By Nathan Van Gheem