SlideShare ist ein Scribd-Unternehmen logo
1 von 109
Deliverance
                  Deliverance
Plone theming without the learning curve


      Plone Symposium East 2009
           State College, PA
             May 29, 2009

            Nate Aune
          www.jazkarta.com
Who am I?

• Using Plone since 2002
• Founder/President of Jazkarta since 2004
• Not a designer but work with many designers
Put this nav and content...
Put this nav and content...
Put this nav and content...
...into this website design.
...into this website design.
...into this website design.
Voila!
Voila!
Voila!
How long did this take?
2 minutes
How many lines of code?
2 rules
And I didn't touch
  www.psu.edu
       (honest)
Agenda
• What is the problem with Plone theming?
• What is Deliverance?
• Who is it for?
• When might you consider using Deliverance?
• Who is using it?
• How do you use it?
• Q&A
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
Knowledge needed
• Buildout
• Paster
• Zope page templates (ZPT)
• Python
• ZCML
• resource registry (for CSS and JS)
• /skins vs. /browser
Designers are not coders
      quot;It is a significant disadvantage if
      the designers and HTML/CSS
      coders are not familiar with Plone,
      but it's incredibly difficult to find top
      designers who have even heard of
      Plone.quot;

           - Scott Paley (Abstract Edge)
Who is it for?

• Designers
• Integrators
• Customers
• First-timers
When you might consider
  using Deliverance?

 • Consulting projects
 • Heterogenous environment
 • Designers are not familiar with Plone
Why use it?

• Designers don't want to learn unusual stuff
• Sometimes the design already exists
• Reduce size of stuff-unique-to-Plone
• Performance and flexibility
• Works with Python (and non-Python)
Why not?

• Plone 2.5/3.0 is easy enough to theme
• Might be hard, but worth it
• I'm both the developer and UI person
• I'll need to stray over the line anyway
• Plone needs to stop changing
Who is using it?

• The Open Planning Project
• repoze.org
• plone.tv
• plone.org
TOPP

• Many different
  systems
• All being themed
  using Deliverance
• topp.openplans.org
TOPP

One Deliverance
theme for:
• Plone site
• Wordpress site
• Task tracker
repoze.org

nginx   Deliverance
proxy      proxy
Home page
Blog
Issue tracker
Mailing lists
plone.tv uses Deliverance
plone.org uses Deliverance
How does it work?
move elements from your content


into placeholders in your theme


... without touching the theme or content
Black magic?
         (well, not really)

• uses a rule file to govern the merging
• rules are verbs of common actions
• use CSS selectors or XPath to identify
  elements to act on
What are the verbs?

• drop
• append
• prepend
• replace

                     Rules documentation:
     http://deliverance.openplans.org/configuration.html
Let's look at an example
How do I make this...
...look like this?




http://www.oswd.org/design/preview/id/3293
With Deliverance!


      Deliverance
Replace the logo

• Replace the logo in the theme with the
  logo in the Plone site.
• Use Firebug to identify the CSS selectors
• Use the <replace> verb since we only want
  one logo.
#portal-logo img
#logo h1
Rule to replace logo


<replace content=quot;____________quot; theme=quot;_______quot; />
Rule to replace logo


<replace content=quot;#portal-logo imgquot; theme=quot;________quot; />
Rule to replace logo


<replace content=quot;#portal-logo imgquot; theme=quot;#logo h1quot; />
Logo placeholder is
replaced with real logo
Slightly more complex
        example
• Replace horizontal navigation tabs with
  Plone's portal_tabs
• Uses children: to select the children
  elements
• Keeps parent which has the proper CSS
  attributes for the theme style.
children:#portal-globalnav
children:#links ul
Rule to replace navigation


<replace content=quot;__________________quot; theme=quot;____________quot; />
Rule to replace navigation


<replace content=quot;children:#portal-globalnavquot; theme=quot;____________quot; />
Rule to replace navigation


<replace content=quot;children:#portal-globalnavquot; theme=quot;children:#links ulquot; />
Dummy text for top
navigation is replaced
Introducing XPath

• Replace page title and description and body
  text
• Theme doesn't have explicit identifiers for
  the description and body text fields
• We can use Firebug to tell us the XPath
  expression for these elements.
children:#parent-fieldname-title
children:div#leftbar h2
Rule to replace heading


<replace content=quot;children:#parent-fieldname-titlequot;
theme=quot;children:div#leftbar h2quot; />
p.documentDescription
No class or id for this
Use XPath to get the
 element identifier
XPath

• The XPath expression that Firebug gives us:
 • /html/body/div/div/div[3]/div[2]/p
• since the <div> above the <p> has an ID,
  we can use this shorthand notation:
 • //*[@id=quot;leftbarquot;]/p
Replace the first
       paragraph with the
      document description
<replace content=quot;p.documentDescriptionquot; theme=quot;//*[@id=quot;leftbarquot;]/pquot; />
children:#parent-fieldname-text
What is the XPath for
 the 2nd paragraph?
What is the XPath for
 the 2nd paragraph?


• children://*[@id=quot;leftbarquot;]/p[2]
Map body text to 2nd
         paragraph

<replace content=quot;children:#parent-fieldname-textquot;
theme=quot;children://*[@id=quot;leftbarquot;]/p[2]quot; />
Logo, nav, heading,
description, body text
Logo, nav, heading,
description, body text
XPath of more link
Remove the more link
     with drop


<drop theme='/html/body/div/div/div[3]/div/a' />
Other cool features of
   Deliverance 0.3
• modify attributes
• drop a particular CSS file
• conditionals (when logged in, when not)
• load content from external sources
• rewriting - don't need a local dev environment
• debugging console
Modify attributes
 Replace tags
Debugging console
Edit rules TTW
Ways to run
          deliverance

• proxy
• WSGI middleware using repoze
• xdv (using Martin's collective.xdv)
Proxy


• Deliverance runs on port 5000 and
  forwards requests on to port 8080
• Two separate Python processes
WSGI Middleware

• Deliverances runs as WSGI middleware
• Only one Python process
• Example showing Zope and Zine running in
  same process
Make your blog look
like your Plone site
Zine - python blogging tool
paste.ini
[pipeline:zope]                          [filter:deliverance]
pipeline = egg:Paste#cgitb               use = egg:deliverance#main
           egg:Paste#httpexceptions      rule_filename = %(here)s/rules.xml
           egg:repoze.retry#retry
           egg:repoze.tm#tm              [server:main]
           egg:repoze.vhm#vhm_xheaders   use = egg:repoze.zope2#zserver
           errorlog                      host = localhost
           zope2                         port = 8080cat

[pipeline:blog]                          [composite:main]
pipeline = egg:Paste#cgitb               use = egg:Paste#urlmap
           egg:Paste#httpexceptions      /blog = blog
           errorlog                      /zope = zope
           deliverance
           zine
rules.xml
<ruleset>

  <theme href=quot;/zope/Plone/main_templatequot; />

  <rule>

    <prepend theme=quot;//headquot; content=quot;//head/linkquot; nocontent=quot;ignorequot; />

    <prepend theme=quot;//headquot; content=quot;//head/stylequot; nocontent=quot;ignorequot; />

    <append theme=quot;//headquot; content=quot;//head/scriptquot; nocontent=quot;ignorequot; />

    <append theme=quot;//headquot; content=quot;//head/metaquot; nocontent=quot;ignorequot; />

    <replace theme=quot;//head/titlequot; content=quot;//head/titlequot;    nocontent=quot;ignorequot; />

    <!-- we don't need the reddit zine links -->

    <drop content=quot;//div[@class='reddit']quot;/>

    <!-- let's drop the breadcrumbs from the plone theme -->

    <drop theme=quot;#portal-breadcrumbsquot;/>

    <!-- let's drop the plone login box -->

    <drop theme=quot;//td[@id='portal-column-one']/div/divquot;/>

    <!-- put the zine portlets in column one -->

    <append theme=quot;//td[@id='portal-column-one']/divquot; content=quot;//div[@class='sidebar']/*quot; nocontent=quot;ignorequot;/>

    <!-- put the body of the zine in the content region -->

    <append theme=quot;children:#region-contentquot; content=quot;children://div[@class='contents']quot; nocontent=quot;ignorequot; />

    <!-- put the administrative links in column two -->

    <prepend theme=quot;children:#portal-column-twoquot; content=quot;//div[@class='body']/ulquot; nocontent=quot;ignorequot;/>

    <!-- make sure the login box has a spot when we need it -->

    <append theme=quot;#viewlet-above-contentquot; content=quot;//div[@class='login-box']quot; nocontent=quot;ignorequot;/>

  </rule>

</ruleset>
Zine themed as Plone
collective.xdv
• tightly integration solution with Plone
• applies a transformation to Plone's HTML
  output, using the XDV compiler
• XDV is an implementation of Deliverance,
  specifically the original Deliverance XML-
  based syntax
• Compiles the theme (an HTML file) and
  rules (an XML file) into a single XSLT file,
  which is then applied to Plone's HTML on
  render.
collective.xdv
xdv vs. Deliverance 0.3
        Pros and Cons
Pros for xdv


• Deployment is simpler, as pure XSLT
• No runtime overhead of another long-
  running Python process
Cons for xdv
• Somewhat less natural selectors/rules (i.e.
  you can't use CSS selectors, at least not
  directly)
• Less momentum
• The dv.xdvproxy that lets you use xdv on-
  the-fly with WSGI has some issues and is
  not intended for production use.
Pros for Deliverance 0.3

• Has a dedicated maintainer
• More powerful - can combine multiple
  themes without requiring Apache magic, for
  example
• CSS selectors
Cons for Deliverance 0.3

• More power means people will start doing crazy
  things
• Makes most sense (for Plone) in a WSGI pipeline,
  but that aspect is not quite as developed yet, and
  Plone is not WSGI-ified until 4.0.
• Requires a long-running process until we're talking
  about a full WSGI stack or mod_wsgi
Thanks to...


Paul Everitt
Thanks to...


Paul Everitt
Thanks to...


Paul Everitt     Ian Bicking
Thanks to...


Paul Everitt     Ian Bicking
Thanks to...


Paul Everitt     Ian Bicking   Aaron VanDerlip
Your chance to
      contribute and learn!
            Deliverance documentation sprint

• produce the Definitive
  Deliverance tutorial
• help promote and
  disseminate information
  about Deliverance
• make Plone theming
  easier for all!
Your chance to
      contribute and learn!
            Deliverance documentation sprint

• produce the Definitive       • learn the easiest way
                                 to theme your Plone
  Deliverance tutorial
                                 sites
• help promote and            • learn hands-on how
  disseminate information
                                 Deliverance works
  about Deliverance
• make Plone theming          • get all your
                                 Deliverance questions
  easier for all!
                                 answered
More info
•   http://svn.plone.org/svn/collective/deliverancedemo/

•   http://www.openplans.org/projects/deliverance/
    introduction

•   http://deliverance.openplans.org/configuration.html

•   http://plone.tv/media/1884178516/view (Ian's talk)

•   http://plone.tv/media/1099397680/view (Paul's talk)

•   http://pypi.python.org/pypi/collective.xdv/

•   http://www.sixfeetup.com/blog/2009/4/27/deploying-
    plone-and-zine-together-with-deliverance-using-
    repoze
Photo credits


• http://www.flickr.com/photos/sir_mervs/
  2697096089/

Weitere ähnliche Inhalte

Was ist angesagt?

More Secrets of JavaScript Libraries
More Secrets of JavaScript LibrariesMore Secrets of JavaScript Libraries
More Secrets of JavaScript Librariesjeresig
 
HTML5 and the web of tomorrow!
HTML5  and the  web of tomorrow!HTML5  and the  web of tomorrow!
HTML5 and the web of tomorrow!Christian Heilmann
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginningAnis Ahmad
 
Future proofing design work with Web components
Future proofing design work with Web componentsFuture proofing design work with Web components
Future proofing design work with Web componentsbtopro
 
HTML5 Semantics, Accessibility & Forms [Carsonified HTML5 Online Conference]
HTML5 Semantics, Accessibility & Forms [Carsonified HTML5 Online Conference]HTML5 Semantics, Accessibility & Forms [Carsonified HTML5 Online Conference]
HTML5 Semantics, Accessibility & Forms [Carsonified HTML5 Online Conference]Aaron Gustafson
 
Building mobile applications with DrupalGap
Building mobile applications with DrupalGapBuilding mobile applications with DrupalGap
Building mobile applications with DrupalGapAlex S
 
Hybrid Web Applications
Hybrid Web ApplicationsHybrid Web Applications
Hybrid Web ApplicationsJames Da Costa
 
jQuery For Beginners - jQuery Conference 2009
jQuery For Beginners - jQuery Conference 2009jQuery For Beginners - jQuery Conference 2009
jQuery For Beginners - jQuery Conference 2009Ralph Whitbeck
 
Introduction to HAML
Introduction to HAMLIntroduction to HAML
Introduction to HAMLJon Dean
 
plumbing for the next web
plumbing for the next webplumbing for the next web
plumbing for the next webIan Forrester
 
Using Ember to Make a Bazillion Dollars
Using Ember to Make a Bazillion DollarsUsing Ember to Make a Bazillion Dollars
Using Ember to Make a Bazillion DollarsMike Pack
 
Mozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: BasicMozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: Basiclittlebtc
 
High Performance Ajax Applications
High Performance Ajax ApplicationsHigh Performance Ajax Applications
High Performance Ajax ApplicationsJulien Lecomte
 
PHP Presentation
PHP PresentationPHP Presentation
PHP PresentationAnkush Jain
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2fishwarter
 
Create responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJSCreate responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJSHannes Hapke
 

Was ist angesagt? (20)

More Secrets of JavaScript Libraries
More Secrets of JavaScript LibrariesMore Secrets of JavaScript Libraries
More Secrets of JavaScript Libraries
 
EPiServer Web Parts
EPiServer Web PartsEPiServer Web Parts
EPiServer Web Parts
 
PHP
PHPPHP
PHP
 
HTML5 and the web of tomorrow!
HTML5  and the  web of tomorrow!HTML5  and the  web of tomorrow!
HTML5 and the web of tomorrow!
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginning
 
Future proofing design work with Web components
Future proofing design work with Web componentsFuture proofing design work with Web components
Future proofing design work with Web components
 
HTML5 Semantics, Accessibility & Forms [Carsonified HTML5 Online Conference]
HTML5 Semantics, Accessibility & Forms [Carsonified HTML5 Online Conference]HTML5 Semantics, Accessibility & Forms [Carsonified HTML5 Online Conference]
HTML5 Semantics, Accessibility & Forms [Carsonified HTML5 Online Conference]
 
WordPress and Ajax
WordPress and AjaxWordPress and Ajax
WordPress and Ajax
 
Building mobile applications with DrupalGap
Building mobile applications with DrupalGapBuilding mobile applications with DrupalGap
Building mobile applications with DrupalGap
 
Hybrid Web Applications
Hybrid Web ApplicationsHybrid Web Applications
Hybrid Web Applications
 
jQuery For Beginners - jQuery Conference 2009
jQuery For Beginners - jQuery Conference 2009jQuery For Beginners - jQuery Conference 2009
jQuery For Beginners - jQuery Conference 2009
 
Introduction to HAML
Introduction to HAMLIntroduction to HAML
Introduction to HAML
 
Seven Reasons for Code Bloat
Seven Reasons for Code BloatSeven Reasons for Code Bloat
Seven Reasons for Code Bloat
 
plumbing for the next web
plumbing for the next webplumbing for the next web
plumbing for the next web
 
Using Ember to Make a Bazillion Dollars
Using Ember to Make a Bazillion DollarsUsing Ember to Make a Bazillion Dollars
Using Ember to Make a Bazillion Dollars
 
Mozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: BasicMozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: Basic
 
High Performance Ajax Applications
High Performance Ajax ApplicationsHigh Performance Ajax Applications
High Performance Ajax Applications
 
PHP Presentation
PHP PresentationPHP Presentation
PHP Presentation
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
Create responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJSCreate responsive websites with Django, REST and AngularJS
Create responsive websites with Django, REST and AngularJS
 

Ähnlich wie Deliverance: Plone theming without the learning curve from Plone Symposium East 2009

Merb Slices
Merb SlicesMerb Slices
Merb Sliceshassox
 
Why Python Web Frameworks Are Changing the Web
Why Python Web Frameworks Are Changing the WebWhy Python Web Frameworks Are Changing the Web
Why Python Web Frameworks Are Changing the Webjoelburton
 
Turbogears Presentation
Turbogears PresentationTurbogears Presentation
Turbogears Presentationdidip
 
WordPress Development Confoo 2010
WordPress Development Confoo 2010WordPress Development Confoo 2010
WordPress Development Confoo 2010Brendan Sera-Shriar
 
Intro To Django
Intro To DjangoIntro To Django
Intro To DjangoUdi Bauman
 
Adventures in infrastructure as code
Adventures in infrastructure as codeAdventures in infrastructure as code
Adventures in infrastructure as codeJulian Simpson
 
Bfg Ploneconf Oct2008
Bfg Ploneconf Oct2008Bfg Ploneconf Oct2008
Bfg Ploneconf Oct2008Jeffrey Clark
 
Drupal7 Release Party in Luxembourg
Drupal7 Release Party in LuxembourgDrupal7 Release Party in Luxembourg
Drupal7 Release Party in Luxembourgnvisionagency
 
Plone Interactivity
Plone InteractivityPlone Interactivity
Plone InteractivityEric Steele
 
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909Yusuke Wada
 
Generic Setup De-Mystified
Generic Setup De-MystifiedGeneric Setup De-Mystified
Generic Setup De-MystifiedClayton Parker
 
Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8Tatsuhiko Miyagawa
 
Optaros Surf Code Camp Walkthrough 1
Optaros Surf Code Camp Walkthrough 1Optaros Surf Code Camp Walkthrough 1
Optaros Surf Code Camp Walkthrough 1Jeff Potts
 
Joomla Template Development
Joomla Template DevelopmentJoomla Template Development
Joomla Template DevelopmentLinda Coonen
 
When To Use Ruby On Rails
When To Use Ruby On RailsWhen To Use Ruby On Rails
When To Use Ruby On Railsdosire
 
How Not To Code Flex Applications
How Not To Code Flex ApplicationsHow Not To Code Flex Applications
How Not To Code Flex Applicationsjeff tapper
 

Ähnlich wie Deliverance: Plone theming without the learning curve from Plone Symposium East 2009 (20)

Merb Slices
Merb SlicesMerb Slices
Merb Slices
 
Why Python Web Frameworks Are Changing the Web
Why Python Web Frameworks Are Changing the WebWhy Python Web Frameworks Are Changing the Web
Why Python Web Frameworks Are Changing the Web
 
Turbogears Presentation
Turbogears PresentationTurbogears Presentation
Turbogears Presentation
 
WordPress Development Confoo 2010
WordPress Development Confoo 2010WordPress Development Confoo 2010
WordPress Development Confoo 2010
 
Intro To Django
Intro To DjangoIntro To Django
Intro To Django
 
Adventures in infrastructure as code
Adventures in infrastructure as codeAdventures in infrastructure as code
Adventures in infrastructure as code
 
Bfg Ploneconf Oct2008
Bfg Ploneconf Oct2008Bfg Ploneconf Oct2008
Bfg Ploneconf Oct2008
 
T5 Oli Aro
T5 Oli AroT5 Oli Aro
T5 Oli Aro
 
Drupal7 Release Party in Luxembourg
Drupal7 Release Party in LuxembourgDrupal7 Release Party in Luxembourg
Drupal7 Release Party in Luxembourg
 
Plone Interactivity
Plone InteractivityPlone Interactivity
Plone Interactivity
 
Please dont touch-3.6-jsday
Please dont touch-3.6-jsdayPlease dont touch-3.6-jsday
Please dont touch-3.6-jsday
 
yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909yusukebe in Yokohama.pm 090909
yusukebe in Yokohama.pm 090909
 
Generic Setup De-Mystified
Generic Setup De-MystifiedGeneric Setup De-Mystified
Generic Setup De-Mystified
 
Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8
 
SearchMonkey
SearchMonkeySearchMonkey
SearchMonkey
 
Cooking with Chef
Cooking with ChefCooking with Chef
Cooking with Chef
 
Optaros Surf Code Camp Walkthrough 1
Optaros Surf Code Camp Walkthrough 1Optaros Surf Code Camp Walkthrough 1
Optaros Surf Code Camp Walkthrough 1
 
Joomla Template Development
Joomla Template DevelopmentJoomla Template Development
Joomla Template Development
 
When To Use Ruby On Rails
When To Use Ruby On RailsWhen To Use Ruby On Rails
When To Use Ruby On Rails
 
How Not To Code Flex Applications
How Not To Code Flex ApplicationsHow Not To Code Flex Applications
How Not To Code Flex Applications
 

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
Anatomy of a Large Website ProjectAnatomy of a Large Website Project
Anatomy of a Large Website ProjectJazkarta, 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
Anatomy of a Large Website ProjectAnatomy of a Large Website Project
Anatomy of a Large Website Project
 
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
 

Kürzlich hochgeladen

HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 

Kürzlich hochgeladen (20)

HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 

Deliverance: Plone theming without the learning curve from Plone Symposium East 2009

  • 1. Deliverance Deliverance Plone theming without the learning curve Plone Symposium East 2009 State College, PA May 29, 2009 Nate Aune www.jazkarta.com
  • 2. Who am I? • Using Plone since 2002 • Founder/President of Jazkarta since 2004 • Not a designer but work with many designers
  • 3. Put this nav and content...
  • 4. Put this nav and content...
  • 5. Put this nav and content...
  • 12. How long did this take?
  • 14. How many lines of code?
  • 16. And I didn't touch www.psu.edu (honest)
  • 17. Agenda • What is the problem with Plone theming? • What is Deliverance? • Who is it for? • When might you consider using Deliverance? • Who is using it? • How do you use it? • Q&A
  • 18. 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
  • 19. Knowledge needed • Buildout • Paster • Zope page templates (ZPT) • Python • ZCML • resource registry (for CSS and JS) • /skins vs. /browser
  • 20. Designers are not coders quot;It is a significant disadvantage if the designers and HTML/CSS coders are not familiar with Plone, but it's incredibly difficult to find top designers who have even heard of Plone.quot; - Scott Paley (Abstract Edge)
  • 21. Who is it for? • Designers • Integrators • Customers • First-timers
  • 22. When you might consider using Deliverance? • Consulting projects • Heterogenous environment • Designers are not familiar with Plone
  • 23. Why use it? • Designers don't want to learn unusual stuff • Sometimes the design already exists • Reduce size of stuff-unique-to-Plone • Performance and flexibility • Works with Python (and non-Python)
  • 24. Why not? • Plone 2.5/3.0 is easy enough to theme • Might be hard, but worth it • I'm both the developer and UI person • I'll need to stray over the line anyway • Plone needs to stop changing
  • 25. Who is using it? • The Open Planning Project • repoze.org • plone.tv • plone.org
  • 26. TOPP • Many different systems • All being themed using Deliverance • topp.openplans.org
  • 27. TOPP One Deliverance theme for: • Plone site • Wordpress site • Task tracker
  • 28. repoze.org nginx Deliverance proxy proxy
  • 30. Blog
  • 35. How does it work? move elements from your content into placeholders in your theme ... without touching the theme or content
  • 36. Black magic? (well, not really) • uses a rule file to govern the merging • rules are verbs of common actions • use CSS selectors or XPath to identify elements to act on
  • 37. What are the verbs? • drop • append • prepend • replace Rules documentation: http://deliverance.openplans.org/configuration.html
  • 38. Let's look at an example
  • 39. How do I make this...
  • 41. With Deliverance! Deliverance
  • 42. Replace the logo • Replace the logo in the theme with the logo in the Plone site. • Use Firebug to identify the CSS selectors • Use the <replace> verb since we only want one logo.
  • 43.
  • 45.
  • 47. Rule to replace logo <replace content=quot;____________quot; theme=quot;_______quot; />
  • 48. Rule to replace logo <replace content=quot;#portal-logo imgquot; theme=quot;________quot; />
  • 49. Rule to replace logo <replace content=quot;#portal-logo imgquot; theme=quot;#logo h1quot; />
  • 51. Slightly more complex example • Replace horizontal navigation tabs with Plone's portal_tabs • Uses children: to select the children elements • Keeps parent which has the proper CSS attributes for the theme style.
  • 52.
  • 54.
  • 56. Rule to replace navigation <replace content=quot;__________________quot; theme=quot;____________quot; />
  • 57. Rule to replace navigation <replace content=quot;children:#portal-globalnavquot; theme=quot;____________quot; />
  • 58. Rule to replace navigation <replace content=quot;children:#portal-globalnavquot; theme=quot;children:#links ulquot; />
  • 59. Dummy text for top navigation is replaced
  • 60. Introducing XPath • Replace page title and description and body text • Theme doesn't have explicit identifiers for the description and body text fields • We can use Firebug to tell us the XPath expression for these elements.
  • 61.
  • 63.
  • 65. Rule to replace heading <replace content=quot;children:#parent-fieldname-titlequot; theme=quot;children:div#leftbar h2quot; />
  • 66.
  • 68. No class or id for this
  • 69. Use XPath to get the element identifier
  • 70. XPath • The XPath expression that Firebug gives us: • /html/body/div/div/div[3]/div[2]/p • since the <div> above the <p> has an ID, we can use this shorthand notation: • //*[@id=quot;leftbarquot;]/p
  • 71. Replace the first paragraph with the document description <replace content=quot;p.documentDescriptionquot; theme=quot;//*[@id=quot;leftbarquot;]/pquot; />
  • 72.
  • 74. What is the XPath for the 2nd paragraph?
  • 75. What is the XPath for the 2nd paragraph? • children://*[@id=quot;leftbarquot;]/p[2]
  • 76. Map body text to 2nd paragraph <replace content=quot;children:#parent-fieldname-textquot; theme=quot;children://*[@id=quot;leftbarquot;]/p[2]quot; />
  • 80. Remove the more link with drop <drop theme='/html/body/div/div/div[3]/div/a' />
  • 81. Other cool features of Deliverance 0.3 • modify attributes • drop a particular CSS file • conditionals (when logged in, when not) • load content from external sources • rewriting - don't need a local dev environment • debugging console
  • 85. Ways to run deliverance • proxy • WSGI middleware using repoze • xdv (using Martin's collective.xdv)
  • 86. Proxy • Deliverance runs on port 5000 and forwards requests on to port 8080 • Two separate Python processes
  • 87. WSGI Middleware • Deliverances runs as WSGI middleware • Only one Python process • Example showing Zope and Zine running in same process
  • 88. Make your blog look like your Plone site
  • 89. Zine - python blogging tool
  • 90. paste.ini [pipeline:zope] [filter:deliverance] pipeline = egg:Paste#cgitb use = egg:deliverance#main egg:Paste#httpexceptions rule_filename = %(here)s/rules.xml egg:repoze.retry#retry egg:repoze.tm#tm [server:main] egg:repoze.vhm#vhm_xheaders use = egg:repoze.zope2#zserver errorlog host = localhost zope2 port = 8080cat [pipeline:blog] [composite:main] pipeline = egg:Paste#cgitb use = egg:Paste#urlmap egg:Paste#httpexceptions /blog = blog errorlog /zope = zope deliverance zine
  • 91. rules.xml <ruleset> <theme href=quot;/zope/Plone/main_templatequot; /> <rule> <prepend theme=quot;//headquot; content=quot;//head/linkquot; nocontent=quot;ignorequot; /> <prepend theme=quot;//headquot; content=quot;//head/stylequot; nocontent=quot;ignorequot; /> <append theme=quot;//headquot; content=quot;//head/scriptquot; nocontent=quot;ignorequot; /> <append theme=quot;//headquot; content=quot;//head/metaquot; nocontent=quot;ignorequot; /> <replace theme=quot;//head/titlequot; content=quot;//head/titlequot; nocontent=quot;ignorequot; /> <!-- we don't need the reddit zine links --> <drop content=quot;//div[@class='reddit']quot;/> <!-- let's drop the breadcrumbs from the plone theme --> <drop theme=quot;#portal-breadcrumbsquot;/> <!-- let's drop the plone login box --> <drop theme=quot;//td[@id='portal-column-one']/div/divquot;/> <!-- put the zine portlets in column one --> <append theme=quot;//td[@id='portal-column-one']/divquot; content=quot;//div[@class='sidebar']/*quot; nocontent=quot;ignorequot;/> <!-- put the body of the zine in the content region --> <append theme=quot;children:#region-contentquot; content=quot;children://div[@class='contents']quot; nocontent=quot;ignorequot; /> <!-- put the administrative links in column two --> <prepend theme=quot;children:#portal-column-twoquot; content=quot;//div[@class='body']/ulquot; nocontent=quot;ignorequot;/> <!-- make sure the login box has a spot when we need it --> <append theme=quot;#viewlet-above-contentquot; content=quot;//div[@class='login-box']quot; nocontent=quot;ignorequot;/> </rule> </ruleset>
  • 92. Zine themed as Plone
  • 93. collective.xdv • tightly integration solution with Plone • applies a transformation to Plone's HTML output, using the XDV compiler • XDV is an implementation of Deliverance, specifically the original Deliverance XML- based syntax • Compiles the theme (an HTML file) and rules (an XML file) into a single XSLT file, which is then applied to Plone's HTML on render.
  • 95. xdv vs. Deliverance 0.3 Pros and Cons
  • 96.
  • 97. Pros for xdv • Deployment is simpler, as pure XSLT • No runtime overhead of another long- running Python process
  • 98. Cons for xdv • Somewhat less natural selectors/rules (i.e. you can't use CSS selectors, at least not directly) • Less momentum • The dv.xdvproxy that lets you use xdv on- the-fly with WSGI has some issues and is not intended for production use.
  • 99. Pros for Deliverance 0.3 • Has a dedicated maintainer • More powerful - can combine multiple themes without requiring Apache magic, for example • CSS selectors
  • 100. Cons for Deliverance 0.3 • More power means people will start doing crazy things • Makes most sense (for Plone) in a WSGI pipeline, but that aspect is not quite as developed yet, and Plone is not WSGI-ified until 4.0. • Requires a long-running process until we're talking about a full WSGI stack or mod_wsgi
  • 105. Thanks to... Paul Everitt Ian Bicking Aaron VanDerlip
  • 106. Your chance to contribute and learn! Deliverance documentation sprint • produce the Definitive Deliverance tutorial • help promote and disseminate information about Deliverance • make Plone theming easier for all!
  • 107. Your chance to contribute and learn! Deliverance documentation sprint • produce the Definitive • learn the easiest way to theme your Plone Deliverance tutorial sites • help promote and • learn hands-on how disseminate information Deliverance works about Deliverance • make Plone theming • get all your Deliverance questions easier for all! answered
  • 108. More info • http://svn.plone.org/svn/collective/deliverancedemo/ • http://www.openplans.org/projects/deliverance/ introduction • http://deliverance.openplans.org/configuration.html • http://plone.tv/media/1884178516/view (Ian's talk) • http://plone.tv/media/1099397680/view (Paul's talk) • http://pypi.python.org/pypi/collective.xdv/ • http://www.sixfeetup.com/blog/2009/4/27/deploying- plone-and-zine-together-with-deliverance-using- repoze

Hinweis der Redaktion

  1. Designers - \"for people who think Photoshop is lickable\" as Paul Everitt says) Integrators (\"People who's job it is to make Plone work for other people\") Customers (who already have and manage a corporate identity) First-timers (who want a quick win without too many new concepts)
  2. Consulting projects (where \"branding\" is already managed by non-developer) Heterogenous environment where the same theme must be shared across multiple applications (wiki, blog, mailman, bug tracker) Designers are not familiar with Plone and you need to iterate rapidly with design
  3. - Performance and flexibility (designers' css, js, images can be served up from disk, rather than plone) - Works with Python (and non-Python) \"we catch the markup on the way out the door and modify it\"
  4. - I'm both the developer and UI person (separation of concerns is overhead)
  5. blog using pyblogsom
  6. roundup for bug tracking
  7. Mailman for mailing lists