/docs/freiheit/Pagstract_Markup_Language_23299120.html
HTML | 421 lines | 402 code | 19 blank | 0 comment | 0 complexity | 7ba835d633fdd75f0302df0ad4b837e1 MD5 | raw file
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <title>Pagstract Markup Language - Shop Dokumentation</title>
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=2.0, user-scalable=yes">
- <script type="text/javascript" src="assets/js/jquery.min.js"></script>
- <script type="text/javascript" src="assets/js/jquery.scrollTo.min.js"></script>
- <script type="text/javascript" src="assets/js/scroll-tree.js"></script>
- <script type="text/javascript" src="assets/js/theme.main.js"></script>
- <link rel="stylesheet" href="assets/css/content-style.css">
- <link rel="stylesheet" href="assets/css/theme.main.css">
- <link rel="stylesheet" href="assets/css/theme.colors.css">
- </head>
- <body pageid="23299120">
- <div id="ht-loader"></div>
- <div>
- <header id="ht-headerbar">
- <div class="ht-headerbar-left">
- <a href="" id="ht-menu-toggle" class="sp-aui-icon-small sp-aui-iconfont-appswitcher"></a>
- </div>
- <div class="ht-headerbar-right">
- </header> <aside id="ht-sidebar">
- <div class="ht-sidebar-content">
- <div class="ht-sidebar-content-scroll-container">
- <header class="ht-sidebar-header">
- <h1 class="ht-logo">
- <span class="ht-logo-label">shop</span>
-
- </h1>
- <a href="Pagstract_Markup_Language_23299120.html" class="ht-space-link">
- <h2>Shop Dokumentation</h2>
- </a>
- </header>
- <nav class="ht-pages-nav">
- <ul class="ht-pages-nav-top">
- </ul>
- </nav>
- </div>
- </div>
- </aside></div>
- <div id="ht-wrap-container">
-
- <div id="ht-sidebar-dragbar">
- <div class="ht-sidebar-drag-handle">
- <span class="drag-handle-1"></span>
- <span class="drag-handle-2"></span>
- <span class="drag-handle-3"></span>
- </div>
- </div>
- <article id="ht-content" class="ht-content">
- <header class="ht-content-header">
- <div id="ht-breadcrumb">
- <ul>
- <li><a href="Pagstract_Markup_Language_23299120.html">Shop Dokumentation</a></li>
- </ul>
- </div> <h1 id="src-23299120"> <span>Pagstract Markup Language</span></h1>
- </header>
- <div id="main-content" class="wiki-content" data-index-for-search="true">
- <p > </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX3dhc19pc3RfcGFnc3RyYWN0MS5XYXNpc3RQYWdzdHJhY3Q_">1. Was ist Pagstract?</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_enstehung_dieser_dokumentation1.1.EnstehungdieserDokumentation">1.1. Enstehung dieser Dokumentation</a> </p>
- </li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_die_pagstract_sprache2.DiePagstract-Sprache">2. Die Pagstract-Sprache</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_hello_world2.1.HelloWorld">2.1. Hello World</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_kommentare2.2.Kommentare">2.2. Kommentare</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_zugriff_auf_pagemodel_properties2.3.ZugriffaufPageModel-Properties">2.3. Zugriff auf PageModel-Properties</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_ausgabe_auf_pagemodel_properties2.4.AusgabeaufPageModel-Properties">2.4. Ausgabe auf PageModel-Properties</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_ausgabe_von_html_in_properties2.5.AusgabevonHTMLinProperties">2.5. Ausgabe von HTML in Properties</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.5.1NeueHTML-Ausgabe">2.5.1 Neue HTML-Ausgabe</a> </p>
- </li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Warnung">Warnung</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_einfache_anfuehrungsstriche_maskieren2.6.EinfacheAnfuehrungsstrichemaskieren">2.6. Einfache Anfuehrungsstriche maskieren</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_html_tags_aus_property_werten_entfernen2.7.HTML-TagsausProperty-Wertenentfernen">2.7. HTML-Tags aus Property-Werten entfernen</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_textanrisse2.8.Textanrisse">2.8. Textanrisse</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjEuWmVpY2hlbmtldHRlZsO8cmRpZUJlaXNwaWVsZWRlcnVudGVyc2NoaWVkbGljaGVuVHJlbm52ZXJoYWx0ZW4">2.8.1. Zeichenkette für die Beispiele der unterschiedlichen Trennverhalten</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjIuSGFydGVUcmVubnVuZyhzdHJpY3Qp">2.8.2. Harte Trennung (strict)</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjMuV2VpY2hlVHJlbm51bmdoaW50ZXJkZW1Xb3J0KGFmdGVyKQ">2.8.3. Weiche Trennung hinter dem Wort (after)</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjQuV2VpY2hlVHJlbm51bmd2b3JkZW1Xb3J0KGJlZm9yZSk">2.8.4. Weiche Trennung vor dem Wort (before)</a> </p>
- </li></ul></li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX3BhZ3N0cmFjdF9hbXBfeG1sMi45LlBhZ3N0cmFjdCZYTUw">2.9. Pagstract & XML</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_pagemodel_inspizieren2.10.PageModelinspizieren">2.10. PageModel inspizieren</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi4xMC4xLkZ1bmt0aW9uIldvYmluaWNoPyI">2.10.1. Funktion "Wo bin ich?"</a> </p>
- </li></ul></li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX2JlYW5fa29udGV4dF9uYW1lc3BhY2Vfc2V0emVuMi4xMS5CZWFuLUtvbnRleHQvTmFtZXNwYWNlc2V0emVu">2.11. Bean-Kontext/Namespace setzen</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.12Listen">2.12 Listen</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_einfache_listen2.12.1EinfacheListen">2.12.1 Einfache Listen</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_sonderbehandlung_leerer_listen2.12.1.1SonderbehandlungleererListen">2.12.1.1 Sonderbehandlung leerer Listen</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX3VudGVyc2NoZWlkdW5nX2dlcmFkZXJfdW5ncmFkZXJfemVpbGVuX2luX2xpc3RlbjIuMTIuMS4yVW50ZXJzY2hlaWR1bmdnZXJhZGVyL3VuZ3JhZGVyWmVpbGVuaW5MaXN0ZW4">2.12.1.2 Unterscheidung gerader/ungrader Zeilen in Listen</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX3NvbmRlcmJlaGFuZGx1bmdfdm9uX2Vyc3Rlcl9sZXR6dGVyX3plaWxlX2luX2xpc3RlbjIuMTIuMS4zU29uZGVyYmVoYW5kbHVuZ3ZvbmVyc3Rlci9sZXR6dGVyWmVpbGVpbkxpc3Rlbg">2.12.1.3 Sonderbehandlung von erster/letzter Zeile in Listen</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_markup_zwischen_den_zeilen_einer_liste2.12.1.4MarkupzwischendenZeileneinerListe">2.12.1.4 Markup zwischen den Zeilen einer Liste</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.12.15DirekterZugriff.2.12.1.5DirekterZugriffaufaktuellesElement">2.12.1.5 Direkter Zugriff auf aktuelles Element</a> </p>
- </li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.12.2Modulo-Listen">2.12.2 Modulo-Listen</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.12.2.1Beispiele">2.12.2.1 Beispiele</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.12.2.2FormaleSyntax">2.12.2.2 Formale Syntax</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi4xMi4yLjNFcmzDpHV0ZXJ1bmdlbg">2.12.2.3 Erläuterungen</a> </p>
- </li></ul></li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi4xMi4zVmlydHVlbGxlUHJvcGVydGllc2bDvHJMaXN0ZW5lbGVtZW50ZQ">2.12.3 Virtuelle Properties für Listenelemente</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Property_count">Property _count</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Property_index">Property _index</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Property_total">Property _total</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Property_isLast">Property _isLast</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtQmVpc3BpZWxlZsO8cnZpcnR1ZWxsZVByb3BlcnRpZXM">Beispiele für virtuelle Properties</a> </p>
- </li></ul></li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_einfache_bedingungen2.13.EinfacheBedingungen">2.13. Einfache Bedingungen</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Anmerkung">Anmerkung</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.13.1VerkettungvonBedingungen">2.13.1 Verkettung von Bedingungen</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.13.4IF-Bedingung">2.13.4 IF-Bedingung</a> </p>
- </li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_fallunterscheidung_anhand_von_werten2.14.FallunterscheidunganhandvonWerten">2.14. Fallunterscheidung anhand von Werten</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.14.1Mehrwertigecase-Bedingungen">2.14.1 Mehrwertige case-Bedingungen</a> </p>
- </li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Links2.15.Links">2.15. Links</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_links_mit_anchor2.16.LinksmitAnchor">2.16. Links mit Anchor</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_image_maps2.17.ImageMaps">2.17. Image Maps</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Resources2.18.Resourcenverweise">2.18. Resourcenverweise</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_formulare2.19.Formulare">2.19. Formulare</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_formular_literal_input_literal_elemente2.20.Formularinput-Elemente">2.20. Formular input-Elemente</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_formular_literal_select_literal_elemente2.21.Formularselect-Elemente">2.21. Formular select-Elemente</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-tiles2.22.VerschachtelnvonPagstract-Dateien">2.22. Verschachteln von Pagstract-Dateien</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi4yMi4xRHluYW1pc2NoZVZhcmlhYmxlbmbDvHJUaWxlc2RlZmluaWVyZW4">2.22.1 Dynamische Variablen für Tiles definieren</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.22.1.1GenerelleAnwendung">2.22.1.1 Generelle Anwendung</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.22.1.2WeiterreichenvonVariablen">2.22.1.2 Weiterreichen von Variablen</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.22.1.3JSON-Syntax">2.22.1.3 JSON-Syntax</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.22.1.4JSON-Encoding">2.22.1.4 JSON-Encoding</a> </p>
- </li></ul></li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_wiederverwendbare_komponenten2.23.WiederverwendbareKomponenten">2.23. Wiederverwendbare Komponenten</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Messages2.24.Internationalisierung">2.24. Internationalisierung</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_bilder_aus_text2.25.BilderausText">2.25. Bilder aus Text</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_links_mit_text_als_bild2.26.LinksmitTextalsBild">2.26. Links mit Text als Bild</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_barcode_bilder_generieren2.27.Barcode-Bildergenerieren">2.27. Barcode-Bilder generieren</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_fehleranalyse2.28.Fehleranalyse">2.28. Fehleranalyse</a> </p>
- </li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_mandantenspezifische_dateien3.MandantenspezifischeDateien">3. Mandantenspezifische Dateien</a> </p>
- <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_aufloesen_von_mandantenspezifischen_resourcen3.1.AufloesenvonmandantenspezifischenResourcen">3.1. Aufloesen von mandantenspezifischen Resourcen</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-template-resolve3.2.Templates">3.2. Templates</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-message-resolve3.3.Resourcen">3.3. Resourcen</a> </p>
- </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_nachrichten3.4.Nachrichten">3.4. Nachrichten</a> </p>
- </li></ul></li></ul> <p > </p>
- <div class="section section-1" id="src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX3dhc19pc3RfcGFnc3RyYWN0MS5XYXNpc3RQYWdzdHJhY3Q_">
- <h1 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_was_ist_pagstract" class="confluence-anchor-link"></span><span>1. Was ist Pagstract?</span></h1>
- <p >Pagstract ist eine einfache Templating-Sprache, die von freiheit.com entwickelt wurde. Dabei wurde bewusst keine vollständige Programmiersprache geschaffen, sondern sich auf einfach Konstrukte, die bei der Anzeige notwendig sind, beschränkt. Dadurch bleibt die Geschäftslogik von der reinen Anzeigelogik getrennt.<br/>In einem typischen Anwednungsfall, stellt die Anwendung die notwendigen Daten als PageModel bereit. Diese werden an ein Pagstract-Template übergeben, dass diese Daten dann in einem schönen Layout einbettet und aufbereitet. </p>
- <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_enstehung_dieser_dokumentation1.1.EnstehungdieserDokumentation">
- <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_enstehung_dieser_dokumentation" class="confluence-anchor-link"></span><span>1.1. Enstehung dieser Dokumentation</span></h2>
- <p >Dieses Dokument basiert auf einer Kurzübersicht von Tina Umlandt. Darauf aufbauend hat Miriam Dölle Tests und Javadoc-Dokumentation erstellt. Stark ergänzt und in diese Form gebracht wurde dieses Dokument dann von Peter Kolloch. </p>
- </div>
- </div>
- <div class="section section-1" id="src-23299120_PagstractMarkupLanguage-_die_pagstract_sprache2.DiePagstract-Sprache">
- <h1 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_die_pagstract_sprache" class="confluence-anchor-link"></span><span>2. Die Pagstract-Sprache</span></h1>
- <p >In diesem Kapitel werden Schritt für Schritt die wichtigsten und auch weniger häufig verwendete Pagstract-Konstrukte erläutert. </p>
- <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_hello_world2.1.HelloWorld">
- <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_hello_world" class="confluence-anchor-link"></span><span>2.1. Hello World</span></h2>
- <p >Die einfachste Pagstract-Datei enthält einfach gar keine Pagstract-Befehle, sondern nur den HTML-Markup. Die generierte Seite unterscheidet sich nicht vom Template. </p>
- <div class="confbox programlisting">
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
- <div class="line"><code class="plain"><html></code></div>
- <div class="line"><code class="plain"><head></code></div>
- <div class="line"><code class="plain"><title>Hello World!</title></code></div>
- <div class="line"><code class="plain"></head></code></div>
- <div class="line"><code class="plain"><body></code></div>
- <div class="line"><code class="plain"><h1>Hello World!</h1></code></div>
- <div class="line"><code class="plain"></body></code></div>
- <div class="line"><code class="plain"></html></code></div>
- </div>
- </div>
- <p > </p>
- </div>
- <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_kommentare2.2.Kommentare">
- <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_kommentare" class="confluence-anchor-link"></span><span>2.2. Kommentare</span></h2>
- <p >Kommentare können komplizierte Konstrukte verständlich machen. Natürlich sollen sie aber das generierte Markup nicht unnötig aufblähen. Dafür gibt es in Pagstract <tt class=" "><!---</tt> Kommentare. </p>
- <pre class="programlisting "> </pre> <div class="confbox programlisting">
- <div class="title">Kommentare</div>
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code" data-title="Kommentare">
- <div class="line"><code class="plain"><!-- Dies ist ein Kommentar der bleibt --></code></div>
- <div class="line"><code class="plain"><!--- Dies ist ein Kommentar der nur im Template sichtbar ist. --></code></div>
- <div class="line"><code class="plain">wird zu</code></div>
- <div class="line"><code class="plain"><!-- Dies ist ein Kommentar der bleibt --></code></div>
- </div>
- </div>
- <p > </p>
- <p >Der mit <tt class=" "><!---</tt> begonnene Kommentar taucht also in der Ausgabe einfach nicht mehr auf. </p>
- </div>
- <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_zugriff_auf_pagemodel_properties2.3.ZugriffaufPageModel-Properties">
- <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_zugriff_auf_pagemodel_properties" class="confluence-anchor-link"></span><span>2.3. Zugriff auf PageModel-Properties</span></h2>
- <p >Das PageModel ist die Basis für das Templating. Es ist die Verbindung zwischen dem Anwendungscode und dem HTML-Code. In der Anwendung wird dieses PageModel mit Werten gefüllt, auf die mithilfe von Property-Pfaden zugegriffen werden kann. Die Anwendung entscheidet, welches Template mit welchem PageModel aufgerufen wird. Das Template entscheidet, wie oder ob es diese Werte aufbereitet. </p>
- <div class="confbox admonition admonition-info">
- <span class="admonition-icon confluence-information-macro-icon"></span>
- <div class="admonition-body">
- <p ><strong class=" ">Hinweis für Anwendungsentwickler</strong><br/>Die TemplateFactory versucht normalerweise das Template über den Klassennamen des PageModel s zu finden. So wird das Template für de.freiheit.mein.java.pkg.TestPage PageModel unter TestPage.html gesucht. Im Umkehrschluss kann man so erraten, wie die PageModel-Klasse für ein gegebenes Template heißt. </p>
- </div>
- </div>
- <p > </p>
- <p >Die Properties des PageModels können elementare Werte enthalten wie Zeichenketten und Zahlen. Sie können aber auch wiederum komplexere Unterdatenstrukturen enthalten, wie Listen oder auch wiederum Objekte, die beliebige Unterdatenstrukturen enthalten können. </p>
- <p >Um an die Werte der Properties zu kommen, wird mit Hilfe der Punktnotation auf die Werte zugegriffen. </p>
- <p >Beispiel: </p>
- <pre class="screen "> .meineProperty<br/> .meineProperty.weitererWert</pre> <p class="title"> </p>
- <div class="confbox admonition admonition-info">
- <span class="admonition-icon confluence-information-macro-icon"></span>
- <div class="admonition-body">
- <p class="title"><strong class=" ">Vergleich zu Java-Beans-Pfaden</strong> </p>
- <p >Der Syntax ist ähnlich zu den Bean-Pfaden der Java-Beans-Spezifikation ohne Index-Property-Syntax. Eine Besonderheit ist der führende Punkt der besagt, dass der Bean-Pfad nicht absolut zum PageModel, sondern relativ zum aktuellen Namespace (also möglicherweise einer Untendatenstruktur) zu sehen ist. Konstrukte, die den Namespace beeinflussen, werden später erläutert. </p>
- </div>
- </div>
- <p > </p>
- </div>
- <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_ausgabe_auf_pagemodel_properties2.4.AusgabeaufPageModel-Properties">
- <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_ausgabe_auf_pagemodel_properties" class="confluence-anchor-link"></span><span>2.4. Ausgabe auf PageModel-Properties</span></h2>
- <p >Welche Daten konkret verfügbar sind, hängt natürlich von der konkreten Seite ab. </p>
- <p > </p>
- <p >Als konkretes Beispiel, in dem auf Werte im PageModel zugegriffen werden, sieht das dann so aus: </p>
- <p > </p>
- <div class="confbox programlisting">
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
- <div class="line"><code class="plain"><</code><code class="keyword">h1</code><code class="plain">>Hello ${.name} </</code><code class="keyword">h1</code><code class="plain">></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">h1</code><code class="plain">>Hello <</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".name"</code><code class="plain">/> </</code><code class="keyword">h1</code><code class="plain">></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">h1</code><code class="plain">>Hello <</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">'.name'</code><code class="plain">/> </</code><code class="keyword">h1</code><code class="plain">></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">input</code><code class="plain"> </code><code class="color1">name</code><code class="plain">=</code><code class="string">"name"</code><code class="plain"> </code><code class="color1">value</code><code class="plain">=</code><code class="string">"${.name}"</code><code class="plain">/></code></div>
- <div class="line"><code class="plain"> </code></div>
- <div class="line"><code class="plain"><!-- Ausgabe mit .name = "Peter" --></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">h1</code><code class="plain">>Hello Peter</</code><code class="keyword">h1</code><code class="plain">></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">h1</code><code class="plain">>Hello Peter </</code><code class="keyword">h1</code><code class="plain">></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">h1</code><code class="plain">>Hello Peter </</code><code class="keyword">h1</code><code class="plain">></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">input</code><code class="plain"> </code><code class="color1">name</code><code class="plain">=</code><code class="string">"name"</code><code class="plain"> </code><code class="color1">value</code><code class="plain">=</code><code class="string">"Peter"</code><code class="plain">/></code></div>
- </div>
- </div>
- <p > </p>
- <p >Selbstverständlich kann hier auch auf tiefer geschachtelte Werte anhand der oben erwähnten Punktnotation zugegriffen werden. </p>
- <p >Die "${…}"-Notation kann hierbei als Abkürzung für die explizitere pma:value-Notation (mit pma:type="plain") angesehen werden. In beiden Fällen werden normalerweise Zeichen, die eine besondere Bedeutung für HTML haben nicht einfach in den Text kopiert, sondern maskiert. Aus "<" wird somit z.B. "&lt;". Im Web-Browser erscheint somit wieder das ursprüngliche "<". </p>
- <p >Um zu sehen, dass alle gefährlichen Zeichen maskiert werden, verwenden wir in den folgenden Beispielen einen etwas komplizierteren ".markup"-Wert. Dieser wird auch bei den anderen Maskierungsarten immer wieder als Referenz herhalten: </p>
- <pre class="programlisting "><script type="text/javascript">alert('hallo');</script> T&uml;r</pre> <p >Wird dieser Wert nun in folgendem Template eingebunden </p>
- <pre class="programlisting "><p><pma:value pma:name=".markup"/></p><br/><br/><input type="text" value="${.markup}"/></pre> <p >so werden die Zeichen so umgewandelt, dass sie problemlos sowohl als Text innerhalb eines Tags als auch als Attributwert eingebunden werden können: </p>
- <pre class="programlisting "><p>&lt;script type=&quot;text/javascript&quot;&gt;alert('hallo');&lt;/script&gt; T&amp;uml;r</p><br/><br/><input type="text" value="&lt;script type=&quot;text/javascript&quot;&gt;alert('hallo');&lt;/script&gt; T&amp;uml;r"/></pre> <p >Der Benutzer sieht im Browser den ursprünglichen Wert, da der Browser die Umwandlung umkehrt. </p>
- </div>
- <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_ausgabe_von_html_in_properties2.5.AusgabevonHTMLinProperties">
- <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_ausgabe_von_html_in_properties" class="confluence-anchor-link"></span><span>2.5. Ausgabe von HTML in Properties</span></h2>
- <p > </p>
- <div class="confbox admonition admonition-info">
- <span class="admonition-icon confluence-information-macro-icon"></span>
- <div class="admonition-body">
- <p >Der Typ <tt class=" ">pma:type="raw"</tt> und die alte Schreibweise <tt class=" ">type="raw"</tt> werden nicht mehr unterstützt. In beiden Fällen greift Pagstract auf den Typ <tt class=" ">pma:type="escaped"</tt> zurück. </p>
- </div>
- </div>
- <p >Wenn eine Property HTML enthält, welches auch als solches ausgegeben werden soll, muss dieses über das <tt class="literal ">pma:raw</tt>-Attribut oder als alternative Schreibweise über das <tt class="literal ">pma:type</tt>-Attribut angegeben werden. </p>
- <div class="confbox programlisting">
- <div class="title">Veraltet</div>
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code" data-title="Veraltet">
- <div class="line"><code class="plain"><</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".markup"</code><code class="plain"> </code><code class="color1">pma:type</code><code class="plain">=</code><code class="string">"raw"</code><code class="plain">/></code></div>
- <div class="line"><code class="plain">oder die alte Schreibweise</code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".markup"</code><code class="plain"> </code><code class="color1">raw</code><code class="plain">=</code><code class="string">"true"</code><code class="plain">/></code></div>
- <div class="line"><code class="plain"> </code></div>
- <div class="line"><code class="plain"><!-- Ausgabe --></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">script</code><code class="plain"> </code><code class="color1">type</code><code class="plain">=</code><code class="string">"text/javascript"</code><code class="plain">>alert('hallo');</</code><code class="keyword">script</code><code class="plain">> T&uml;r</code></div>
- <div class="line"><code class="plain">oder die alte Schreibweise</code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">script</code><code class="plain"> </code><code class="color1">type</code><code class="plain">=</code><code class="string">"text/javascript"</code><code class="plain">>alert('hallo');</</code><code class="keyword">script</code><code class="plain">> T&uml;r</code></div>
- </div>
- </div>
- <p ><strong class=" "><br/></strong> </p>
- <div class="section section-3" id="src-23299120_PagstractMarkupLanguage-2.5.1NeueHTML-Ausgabe">
- <h3 class="heading "><span>2.5.1 Neue HTML-Ausgabe</span></h3>
- <p >Um weiterhin HTML ausgeben zu können, wurde die neue Ausgabe <tt class=" ">pma:type="trustedhtml"</tt> eingeführt. </p>
- <p >Attribute von HTML-Tags werden nichts escaped! </p>
- <div class="confbox programlisting">
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
- <div class="line"><code class="plain">Text: Dies ist ein Text, der übrigens auch noch <</code><code class="keyword">a</code><code class="plain"> </code><code class="color1">href</code><code class="plain">=</code><code class="string">"http://example.com"</code><code class="plain"> </code><code class="color1">title</code><code class="plain">=</code><code class="string">"Übernachtung in Blåvand"</code><code class="plain">>einen Link beinhaltet & zu allem Überfluss</</code><code class="keyword">a</code><code class="plain">> noch Sonderzeichen; weil 3 < </code><code class="keyword">5</code></div>
- <div class="line"> </div>
- <div class="line"><code class="plain">Ausgabe mit: <pma:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".text"</code><code class="plain"> </code><code class="color1">pma:type</code><code class="plain">=</code><code class="string">"trustedhtml"</code><code class="plain">/></code></div>
- <div class="line"> </div>
- <div class="line"><code class="plain">Erzeugte Ausgabe:</code></div>
- <div class="line"><code class="plain">Dies ist ein Text, der &#252;brigens auch noch <</code><code class="keyword">a</code><code class="plain"> </code><code class="color1">href</code><code class="plain">=</code><code class="string">"http://example.com"</code><code class="plain"> </code><code class="color1">title</code><code class="plain">=</code><code class="string">"Übernachtung in Blåvand"</code><code class="plain">>einen Link beinhaltet &amp; zu allem &#220;berfluss</</code><code class="keyword">a</code><code class="plain">> noch Sonderzeichen; weil 3 &lt; 5</code></div>
- </div>
- </div>
- <div class="confbox admonition admonition-note">
- <span class="admonition-icon confluence-information-macro-icon"></span>
- <div class="admonition-body">
- <h4 id="src-23299120_PagstractMarkupLanguage-Warnung" class="heading "><span>Warnung</span></h4>
- <p >Das sollte niemals für Properties geschehen, die ungefilterte Benutzereingaben enthalten. Dadurch können Sicherheitslücken entstehen! </p>
- </div>
- </div>
- <p > </p>
- </div>
- </div>
- <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_einfache_anfuehrungsstriche_maskieren2.6.EinfacheAnfuehrungsstrichemaskieren">
- <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_einfache_anfuehrungsstriche_maskieren" class="confluence-anchor-link"></span><span>2.6. Einfache Anfuehrungsstriche maskieren</span></h2>
- <p >Für das Maskieren von Sonderzeichen gibt es noch weitere Optionen. </p>
- <p >So kann auch das Maskieren von einfachen Anführungsstrichen erzwungen werden, z.B. um eine Property innerhalb von JavaScript-Zeichenketten zu expandieren. </p>
- <div class="confbox programlisting">
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
- <div class="line"><code class="plain"><!-- .stringWithSingleQuotes = "'hallo'" --></code></div>
- <div class="line"><code class="plain"><!-- Eingabe mit einfachen Anführungszeichen --></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".stringWithSingleQuotes"</code><code class="plain"> </code><code class="color1">pma:type</code><code class="plain">=</code><code class="string">"escapedquotes"</code><code class="plain">/></code></div>
- <div class="line"><code class="plain"> </code></div>
- <div class="line"><code class="plain"><!-- Ausgabe --></code></div>
- <div class="line"><code class="plain">\'hallo\'</code></div>
- </div>
- </div>
- <p >Selbstverständlich werden die anderen Zeichen mit Sonderbedeutung weiterhin so umgesetzt, dass der Benutzer den Originalstring zu sehen bekommt. </p>
- <div class="confbox programlisting">
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
- <div class="line"><code class="plain"><!-- .markup = <</code><code class="keyword">script</code><code class="plain"> </code><code class="color1">type</code><code class="plain">=</code><code class="string">"text/javascript"</code><code class="plain">>alert('hallo');</</code><code class="keyword">script</code><code class="plain">> T&uml;r --></code></div>
- <div class="line"><code class="plain"><!-- escaped quotes --></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".markup"</code><code class="plain"> </code><code class="color1">pma:type</code><code class="plain">=</code><code class="string">"escapedquotes"</code><code class="plain">/></code></div>
- <div class="line"><code class="plain"> </code></div>
- <div class="line"><code class="plain"><!-- Ausgabe --></code></div>
- <div class="line"><code class="plain">&lt;</code><code class="keyword">script</code><code class="plain"> type=&quot;text/javascript&quot;&gt;alert(\'hallo\');&lt;/</code><code class="keyword">script</code><code class="plain">&gt; T&amp;uml;r</code></div>
- <div class="line"><code class="plain"> </code></div>
- <div class="line"><code class="plain"><!-- ALTE Variante --></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".markup"</code><code class="plain"> </code><code class="color1">pma:escapeQuotes</code><code class="plain">=</code><code class="string">"true"</code><code class="plain">/></code></div>
- </div>
- </div>
- <p > </p>
- </div>
- <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_html_tags_aus_property_werten_entfernen2.7.HTML-TagsausProperty-Wertenentfernen">
- <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_html_tags_aus_property_werten_entfernen" class="confluence-anchor-link"></span><span>2.7. HTML-Tags aus Property-Werten entfernen</span></h2>
- <p >Ebenso gibt es die Alternative, HTML-Tags zu entfernen, anstatt sie einfach zu maskieren, so dass Markup-Code für den Benutzer direkt sichtbar wird. Das kann besonders für Benutzereingaben sinnvoll sein. </p>
- <div class="confbox programlisting">
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
- <div class="line"><code class="plain"><!-- .markup = <</code><code class="keyword">script</code><code class="plain"> </code><code class="color1">type</code><code class="plain">=</code><code class="string">"text/javascript"</code><code class="plain">>alert('hallo');</</code><code class="keyword">script</code><code class="plain">> T&uml;r --></code></div>
- <div class="line"><code class="plain"><!-- Plain --></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".markup"</code><code class="plain"> </code><code class="color1">pma:type</code><code class="plain">=</code><code class="string">"plain"</code><code class="plain">/></code></div>
- <div class="line"><code class="plain"> </code></div>
- <div class="line"><code class="plain"><!-- Plain HTML --></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".markup"</code><code class="plain"> </code><code class="color1">pma:type</code><code class="plain">=</code><code class="string">"plainhtml"</code><code class="plain">/></code></div>
- <div class="line"><code class="plain"> </code></div>
- <div class="line"><code class="plain"><!-- Ausgabe --></code></div>
- <div class="line"><code class="plain"><!-- Plain --></code></div>
- <div class="line"><code class="plain">alert('hallo'); T¨r</code></div>
- <div class="line"><code class="plain"> </code></div>
- <div class="line"><code class="plain"><!-- Plain HTML --></code></div>
- <div class="line"><code class="plain">alert('hallo'); T&#168;r</code></div>
- </div>
- </div>
- <p > </p>
- </div>
- <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_textanrisse2.8.Textanrisse">
- <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_textanrisse" class="confluence-anchor-link"></span><span>2.8. Textanrisse</span></h2>
- <p >Häufig ist für den gesamten Text nicht immer genug Platz. Stattdessen möchte man aber einen Textanriss präsentieren. Die Maximallänge kann mit <strong class=" "><tt class="literal ">pma:maxlength</tt></strong> angegeben werden. Es werden drei verschiedene Logiken bei Trennung unterstützt, die über <strong class=" "><tt class=" ">pma:abbrevMode</tt></strong> ausgewählt werden können. Wird kein oder ein nicht definierter Abkürzungsmodus gewählt, wird <tt class=" ">after</tt> als Voreinstellung verwendet. </p>
- <ul class=" "><li class=" "> <p ><tt class=" ">strict</tt> für eine harte Trennung nach genau n Zeichen </p>
- </li><li class=" "> <p ><tt class=" ">after</tt> für eine weiche Trennung nach dem Wort nach mindestens n Zeichen </p>
- </li><li class=" "> <p ><tt class=" ">before</tt> für eine weiche Trennung vor dem Wort nach maximal n Zeichen </p>
- </li></ul> <p >Über <strong class=" "><tt class=" ">pma:more</tt></strong> kann dem Benutzer ein Hinweis auf den weggekürzten Text gegeben werden, z.B. </p>
- <div class="confbox programlisting">
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
- <div class="line"><code class="plain"><</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".loremIpsum"</code><code class="plain"> </code><code class="color1">pma:maxlength</code><code class="plain">=</code><code class="string">"20"</code><code class="plain"> </code><code class="color1">pma:more</code><code class="plain">=</code><code class="string">"..."</code><code class="plain">/></code></div>
- </div>
- </div>
- <p >ergibt </p>
- <pre class="programlisting ">Lorem ipsum dolor sit...</pre> <div class="section section-3" id="src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjEuWmVpY2hlbmtldHRlZsO8cmRpZUJlaXNwaWVsZWRlcnVudGVyc2NoaWVkbGljaGVuVHJlbm52ZXJoYWx0ZW4">
- <h3 class="heading "><span>2.8.1. Zeichenkette für die Beispiele der unterschiedlichen Trennverhalten</span></h3>
- <p ><tt class=" ">.loremIpsum = "Lorem ipsum dolor sit amet"</tt> </p>
- </div>
- <div class="section section-3" id="src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjIuSGFydGVUcmVubnVuZyhzdHJpY3Qp">
- <h3 class="heading "><span>2.8.2. Harte Trennung (strict)</span></h3>
- <div class="confbox programlisting">
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
- <div class="line"><code class="plain"><</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".loremIpsum"</code><code class="plain"> </code><code class="color1">pma:maxlength</code><code class="plain">=</code><code class="string">"9"</code><code class="plain"> </code><code class="color1">pma:abbrevMode</code><code class="plain">=</code><code class="string">"strict"</code><code class="plain"> </code><code class="color1">pma:more</code><code class="plain">=</code><code class="string">"..."</code><code class="plain">/></code></div>
- </div>
- </div>
- <p >ergibt </p>
- <pre class=" ">Lorem ips...</pre> </div>
- <div class="section section-3" id="src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjMuV2VpY2hlVHJlbm51bmdoaW50ZXJkZW1Xb3J0KGFmdGVyKQ">
- <h3 class="heading "><span>2.8.3. Weiche Trennung hinter dem Wort (after)</span></h3>
- <div class="confbox programlisting">
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
- <div class="line"><code class="plain"><</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".loremIpsum"</code><code class="plain"> </code><code class="color1">pma:maxlength</code><code class="plain">=</code><code class="string">"9"</code><code class="plain"> </code><code class="color1">pma:abbrevMode</code><code class="plain">=</code><code class="string">"after"</code><code class="plain"> </code><code class="color1">pma:more</code><code class="plain">=</code><code class="string">"..."</code><code class="plain">/> </code></div>
- <div class="line"><code class="plain"><!-- bzw. default --></code></div>
- <div class="line"><code class="plain"><</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".loremIpsum"</code><code class="plain"> </code><code class="color1">pma:maxlength</code><code class="plain">=</code><code class="string">"9"</code><code class="plain"> </code><code class="color1">pma:more</code><code class="plain">=</code><code class="string">"..."</code><code class="plain">/></code></div>
- </div>
- </div>
- <p >ergibt </p>
- <pre class=" ">Lorem ipsum...</pre> </div>
- <div class="section section-3" id="src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjQuV2VpY2hlVHJlbm51bmd2b3JkZW1Xb3J0KGJlZm9yZSk">
- <h3 class="heading "><span>2.8.4. Weiche Trennung vor dem Wort (before)</span></h3>
- <div class="confbox programlisting">
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
- <div class="line"><code class="plain"><</code><code class="keyword">pma</code><code class="plain">:value </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">".loremIpsum"</code><code class="plain"> </code><code class="color1">pma:maxlength</code><code class="plain">=</code><code class="string">"9"</code><code class="plain"> </code><code class="color1">pma:abbrevMode</code><code class="plain">=</code><code class="string">"before"</code><code class="plain"> </code><code class="color1">pma:more</code><code class="plain">=</code><code class="string">"..."</code><code class="plain">/></code></div>
- </div>
- </div>
- <p >ergibt </p>
- <pre class=" ">Lorem... </pre> </div>
- </div>
- <div class="section section-2" id="src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX3BhZ3N0cmFjdF9hbXBfeG1sMi45LlBhZ3N0cmFjdCZYTUw">
- <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_pagstract_amp_xml" class="confluence-anchor-link"></span><span>2.9. Pagstract & XML</span></h2>
- <p >Pagstract orientiert sich größtenteils an XML in seinem Syntax. Die meisten Pagstract-Befehle sind dem "pma:"-Prefix bei Elementen und Attributen zu erkennen. Anders als bei XML sind aber hierfür keine expliziten Namespace-Deklarationen notwendig. Einmal geöffnete Pagstract-Befehle müssen auch wieder geschlossen werden. </p>
- <p >Pagstract selber versucht aber nur seine eigenen Tags zu interpretieren. Der Text zwischen den Anweisungen oder in den Anweisungen wird ansonsten nicht ausgewertet. Dadurch eignet es sich auch für das Generieren nicht-XML textbasierten Formaten. </p>
- <p >Wenngleich das zu verwirrenden Templates führen kann, müssen sich die Pagstract-Befehle aber nicht um saubere XHTML-Fragmente klammern. Z.B. (die Befehle werden später erklärt): </p>
- <div class="confbox programlisting">
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
- <div class="line"><code class="plain"><</code><code class="keyword">p</code><code class="plain">></code></div>
- <div class="line"><code class="plain"> Lorem ipsum. Lorem ipsum.</code></div>
- <div class="line"><code class="plain"> <</code><code class="keyword">pma</code><code class="plain">:if-visible </code><code class="color1">pma:name</code><code class="plain">=</code><code class="string">"unterbrechMich"</code><code class="plain"> </code><code class="color1">pma:condition</code><code class="plain">=</code><code class="string">"true"</code><code class="plain">></code></div>
- <div class="line"><code class="plain"> </</code><code class="keyword">p</code><code class="plain">><</code><code class="keyword">hr</code><code class="plain">/><</code><code class="keyword">p</code><code class="plain">></code></div>
- <div class="line"><code class="plain"> </</code><code class="keyword">pma</code><code class="plain">:if-visible></code></div>
- <div class="line"><code class="plain"> Lorem ipsum. Lorem ipsum. Lorem</code></div>
- <div class="line"><code class="plain"></</code><code class="keyword">p</code><code class="plain">></code></div>
- </div>
- </div>
- <p >Wenn man dies mit unterbrechMich = true rendert, kommt folgendes heraus: </p>
- <div class="confbox programlisting">
- <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
- <div class="line"><code class="plain"><</code><code class="keyword">p</code><code class="plain">></code></div>
- <div class="line"><code class="plain"> Lorem ipsum. Lorem ipsum.</code></div>
- <div class="line"> </div>
- <div class="line"><code class="plain"> </</code><code class="keyword">p</code><code class="plain">><</code><code class="keyword">hr</code><code class="plain">/><</code><code class="keyword">p</code><code class="plain">></code></div>
- <div class="line"> </div>
- <div class="line"><code class="plain"> Lorem ipsum. Lorem ipsum. Lorem</code></div>
- <div class="line"><code class="plain"></</code><code class="keyword">p</code><code class="plain">></code></div>
- </div>
- </div>
- <p >Meistens ist es aber sinnvoll, Pagstract-Befehle um symetrische XHTML-Fragmente, deren Top-Level-Elemente alle wieder geschlossen wurden, zu klammern, da man so einfacher sicher stellen kann, dass der generierte Markup fehlerfrei ist. </p>
- </div>
- <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_pagemodel_inspizieren2.10.PageModelinspizieren">
- <h2