SlideShare uma empresa Scribd logo
1 de 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 signicant disadvantage if
      the designers and HTML/CSS
      coders are not familiar with Plone,
      but it's incredibly difcult to nd 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/conguration.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 elds
• We can use Firebug to tell us the XPath
  expression for these elements.
children:#parent-eldname-title
children:div#leftbar h2
Rule to replace heading


<replace content=quot;children:#parent-eldname-titlequot;
theme=quot;children:div#leftbar h2quot; />
p.documentDescription
No class or id for this
Use XPath to get the
 element identier
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 rst
       paragraph with the
      document description
<replace content=quot;p.documentDescriptionquot; theme=quot;//*[@id=quot;leftbarquot;]/pquot; />
children:#parent-eldname-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-eldname-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,
  specically the original Deliverance XML-
  based syntax
• Compiles the theme (an HTML file) and
  rules (an XML le) into a single XSLT le,
  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-ied 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/

Mais conteĂşdo relacionado

Mais procurados

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
 
WordPress and Ajax
WordPress and AjaxWordPress and Ajax
WordPress and AjaxRonald Huereca
 
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
 
Seven Reasons for Code Bloat
Seven Reasons for Code BloatSeven Reasons for Code Bloat
Seven Reasons for Code BloatChristian Heilmann
 
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
 

Mais procurados (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
 

Semelhante a 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
 
Please dont touch-3.6-jsday
Please dont touch-3.6-jsdayPlease dont touch-3.6-jsday
Please dont touch-3.6-jsdayFrancesco Fullone
 
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
 
SearchMonkey
SearchMonkeySearchMonkey
SearchMonkeyPaul Tarjan
 
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
 

Semelhante a 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
 

Mais de 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.
 
Plone+Salesforce
Plone+SalesforcePlone+Salesforce
Plone+SalesforceJazkarta, 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.
 

Mais de 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
 

Último

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
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
 
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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
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
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 

Último (20)

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
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
 
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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
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
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
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...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 

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 congure.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 signicant disadvantage if the designers and HTML/CSS coders are not familiar with Plone, but it's incredibly difcult to nd 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 le 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/conguration.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 identiers for the description and body text elds • 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-eldname-titlequot; theme=quot;children:div#leftbar h2quot; />
  • 66.
  • 68. No class or id for this
  • 69. Use XPath to get the element identier
  • 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 rst 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-eldname-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 le • 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, specically the original Deliverance XML- based syntax • Compiles the theme (an HTML le) and rules (an XML le) into a single XSLT le, 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-ied 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 Denitive 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 Denitive • 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/conguration.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

Notas do Editor

  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