Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Diazo - XSLT basiertes Website Theming
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Maik Derstappen
August 25, 2012
Programming
2
74
Diazo - XSLT basiertes Website Theming
Flexibel, schnell und einfach für Plone und den Rest der Welt
Maik Derstappen
August 25, 2012
Tweet
Share
More Decks by Maik Derstappen
See All by Maik Derstappen
Diazo - XSLT basiertes Website Theming
mrtango
0
110
Other Decks in Programming
See All in Programming
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.3k
CSC307 Lecture 02
javiergs
PRO
1
780
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
270
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
190
Fluid Templating in TYPO3 14
s2b
0
130
ぼくの開発環境2026
yuzneri
0
190
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
180
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
Smart Handoff/Pickup ガイド - Claude Code セッション管理
yukiigarashi
0
130
CSC307 Lecture 05
javiergs
PRO
0
500
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
110
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
4
320
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
110
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
820
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
49k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
1
49
ラッコキーワード サービス紹介資料
rakko
1
2.3M
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Abbi's Birthday
coloredviolet
1
4.7k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Transcript
Diazo XSLT basiertes Website Theming Maik Derstappen – Inqbus GmbH
& Co. KG –
[email protected]
Flexibel, schnell und einfach für Plone und den Rest der
Welt
Was wir haben
None
Wie es aussehen soll
None
None
None
None
Diazo + plone.app.theming
None
<replace css:content='#portal-globalnav li' css:theme-children='#global-navigation' /> Die Hauptnavigationspunkte übernehmen
<replace css:content="#content" css:theme="#content" /> Den Seiteninhalt übernehmen
<after css:content='.portlet.portletNews' css:theme-children='#portal-column-two' /> Das Nachrichten-Portlet übernehmen
<after css:content-children='#portal-column-two' css:theme-children='#portal-column-two' /> Alle Portlets der rechten Spalte übernehmen
<after css:content='#portal-column-two .portlet:not(.portletNavigationTree)' css:theme-children='#portal-column-two' /> Alle Portlets bis auf Navigation
übernehmen
#portal-column-two .portlet:not(.portletNavigationTree) Alle Portlets bis auf Navigation übernehmen
Diazo rules.xml Grundgerüst
<?xml version="1.0" encoding="UTF-8"?> <rules xmlns="http://namespaces.plone.org/diazo" xmlns:css="http://namespaces.plone.org/diazo/css" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> ... </rules>
Diazo rules.xml Definition
<rules css:if-content="#visual-portal-wrapper"> <after content="/html/head/script" theme-children="/html/head" /> <replace css:content='#portal-globalnav li' css:theme-children='#portal-globalnav'
/> <replace css:content-children="#content" css:theme-children="#content" /> <after css:content='.portlet.portletNews' css:theme-children='#portal-column-two' /> </rules>
statische Template-Datei definieren
<rules css:if-content="#visual-portal-wrapper"> <theme href="index.html" css:if-content="body.section-front-page" /> <theme href="index.html" css:if-content="body.portaltype-plone-site" />
<theme href="article.html" /> <notheme css:if-content="body.rawpage" /> </rules>
Diazo – Regeln (Rules)
XPath oder CSS3? Diazo unterstützt sowohl XPath- als auch CSS3-Selektoren
in Regeln.
XPath <after content="//div[@id='portal-column-one'] //*[contains(@class, 'portlet')]" theme=“//div[@id='portal-column-one']“ />
CSS3 <after css:content="#portal-column-one .portlet" css:theme=“#portal-column-one“ />
XPath- und CSS3-Selektoren führen zu identischen Ergebnissen, da die CSS3-Selektoren
in XPath umgewandelt werden
theme-children / content-children Wird die children-Variante verwendet, so betrifft die
Anweisung, die im gefundenen Element enthaltenen Kind-Elemente, nicht das Element selbst
- theme - notheme - replace - before / after
- drop - strip - merge - copy
<theme />
theme gibt die Template-Datei für das Theme an <theme href="index.html"
css:if-content="body.section-front-page" /> <theme href="article.html" />
<notheme />
notheme deaktiviert das Theming, dies kann zusammen mit Bedingungen eingesetzt
werden <notheme css:if-content="body.rawpage" />
<replace />
replace ersetzt ein Element im Theme mit einem Element aus
dem content <replace css:content="#edit-bar" css:theme="#edit-bar" /> <replace css:content-children="#content" css:theme-children="#content" />
<after /> & <before />
after & before fügen ein Element aus dem Content vor
/ nach einem Element im Theme ein <before css:content='.portlet.portletNavigationTree' css:theme-children='#portal-column-two' /> <after content-children="#portal-column-two" theme-children="#portal-column-two" />
<copy />
copy kopiert Attribute aus dem Content ins Theme <copy attributes="id
dir" css:content="body" css:theme="body" />
<merge />
merge vereint Attribute aus dem Content mit vorhandenen Attributen im
Theme <merge attributes="class" css:content="body" css:theme="body" />
<drop />
drop entfernt Elemente / Attribute aus dem Theme oder Content
<drop css:theme=".portletNavigationTree" attributes="class id" /> <drop css:content="#portal-searchbox .searchSection" />
<strip />
strip entfernt ein Element aus dem Theme oder Content, erhält
aber den Inhalt des Elementes <strip css:content=".portletWrapper" />
Feste Ausführreihenfolge von Diazo Regeln!
1. before - Regeln für (theme) 2. drop - Regeln
3. replace - Regeln (theme) 4. strip - Regeln 5. Regeln die Attribute verändern 6. before, replace, after - Regeln (theme-children) 7. after – Regeln (theme) Ausführreihenfolge von Diazo-Regeln
Dank plone.app.theming können Diazo-Themes per ZIP-Datei und ohne Neustart in
Plone installiert werden. Diazo-Theme als ZIP-Datei
Einfaches Verzeichnis mit statischen Dateien + rules.xml + manifest.cfg [wpd]
├── article.html ├── images │ ├── icon-home.gif │ ├── icon-mail.gif │ ├── input-bg.gif │ ├── link1-bg.gif │ ├── logo.jpg │ ├── main-bg.jpg ├── index.html ├── manifest.cfg ├── rules.xml └── style.css
[theme] title="Plone Theme: PloneKonf 2012" description = "Plone Theme for
the first german Plone conference." manifest.cfg – mit Metadaten
None
Es ist möglich Inhalte weiterer Quellen einzubinden
<after css:theme-content="#content" css:content="#content" href="@@custom_view" /> Einbinden weiterer Quellen
Dies funktioniert auch für externe Websites und Web-Anwendungen!
<replace css:content-children="#content-core .panes" css:theme-children=".col-1 .section" href="http://konferenz.plone.de/programm" /> Einbinden externer Systeme
Dies eröffnet umfangreiche Möglichkeiten, verschiedene Systeme nahtlos und barrierefrei in
Plone zu integrieren. Einbinden externer Systeme
None
<replace css:content-children="#spTeaserColumn" css:theme-children="#press_table .left" href="http://www.spiegel.de" if-path="presse/" /> <replace css:content=".teaserlist" css:theme-children="#press_table
.right" href="http://www.zeit.de/" if-path="presse/" /> Einbinden von nicht Plone-Systemen
None
Snippets
<replace content="//dl[contains(@class,'portlet- collection-links')]//a" method="raw"> <xsl:attribute name="target">_blank</xsl:attribute> </replace> Snippets Link in
Kollektions-Portlets mit target=“_blank“
Vielen Dank Fragen ? plone.app.theming: PyPi Diazo: http://diazo.org Development &
Consulting: http://inqbus.de Hosting: http://plone-hosting.de