PageRenderTime 61ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/docs/freiheit/Pagstract_Markup_Language_23299120.html

https://gitlab.com/php.bjoernbartels.earth/phpagstract
HTML | 421 lines | 402 code | 19 blank | 0 comment | 0 complexity | 7ba835d633fdd75f0302df0ad4b837e1 MD5 | raw file
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <title>Pagstract Markup Language - Shop Dokumentation</title>
  7. <meta name="description" content="">
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=2.0, user-scalable=yes">
  9. <script type="text/javascript" src="assets/js/jquery.min.js"></script>
  10. <script type="text/javascript" src="assets/js/jquery.scrollTo.min.js"></script>
  11. <script type="text/javascript" src="assets/js/scroll-tree.js"></script>
  12. <script type="text/javascript" src="assets/js/theme.main.js"></script>
  13. <link rel="stylesheet" href="assets/css/content-style.css">
  14. <link rel="stylesheet" href="assets/css/theme.main.css">
  15. <link rel="stylesheet" href="assets/css/theme.colors.css">
  16. </head>
  17. <body pageid="23299120">
  18. <div id="ht-loader"></div>
  19. <div>
  20. <header id="ht-headerbar">
  21. <div class="ht-headerbar-left">
  22. <a href="" id="ht-menu-toggle" class="sp-aui-icon-small sp-aui-iconfont-appswitcher"></a>
  23. </div>
  24. <div class="ht-headerbar-right">
  25. </header> <aside id="ht-sidebar">
  26. <div class="ht-sidebar-content">
  27. <div class="ht-sidebar-content-scroll-container">
  28. <header class="ht-sidebar-header">
  29. <h1 class="ht-logo">
  30. <span class="ht-logo-label">shop</span>
  31. </h1>
  32. <a href="Pagstract_Markup_Language_23299120.html" class="ht-space-link">
  33. <h2>Shop Dokumentation</h2>
  34. </a>
  35. </header>
  36. <nav class="ht-pages-nav">
  37. <ul class="ht-pages-nav-top">
  38. </ul>
  39. </nav>
  40. </div>
  41. </div>
  42. </aside></div>
  43. <div id="ht-wrap-container">
  44. <div id="ht-sidebar-dragbar">
  45. <div class="ht-sidebar-drag-handle">
  46. <span class="drag-handle-1"></span>
  47. <span class="drag-handle-2"></span>
  48. <span class="drag-handle-3"></span>
  49. </div>
  50. </div>
  51. <article id="ht-content" class="ht-content">
  52. <header class="ht-content-header">
  53. <div id="ht-breadcrumb">
  54. <ul>
  55. <li><a href="Pagstract_Markup_Language_23299120.html">Shop Dokumentation</a></li>
  56. </ul>
  57. </div> <h1 id="src-23299120"> <span>Pagstract Markup Language</span></h1>
  58. </header>
  59. <div id="main-content" class="wiki-content" data-index-for-search="true">
  60. <p > </p>
  61. <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX3dhc19pc3RfcGFnc3RyYWN0MS5XYXNpc3RQYWdzdHJhY3Q_">1. Was ist Pagstract?</a> </p>
  62. <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_enstehung_dieser_dokumentation1.1.EnstehungdieserDokumentation">1.1. Enstehung dieser Dokumentation</a> </p>
  63. </li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_die_pagstract_sprache2.DiePagstract-Sprache">2. Die Pagstract-Sprache</a> </p>
  64. <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_hello_world2.1.HelloWorld">2.1. Hello World</a> </p>
  65. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_kommentare2.2.Kommentare">2.2. Kommentare</a> </p>
  66. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_zugriff_auf_pagemodel_properties2.3.ZugriffaufPageModel-Properties">2.3. Zugriff auf PageModel-Properties</a> </p>
  67. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_ausgabe_auf_pagemodel_properties2.4.AusgabeaufPageModel-Properties">2.4. Ausgabe auf PageModel-Properties</a> </p>
  68. </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>
  69. <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.5.1NeueHTML-Ausgabe">2.5.1 Neue HTML-Ausgabe</a> </p>
  70. </li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Warnung">Warnung</a> </p>
  71. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_einfache_anfuehrungsstriche_maskieren2.6.EinfacheAnfuehrungsstrichemaskieren">2.6. Einfache Anfuehrungsstriche maskieren</a> </p>
  72. </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>
  73. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_textanrisse2.8.Textanrisse">2.8. Textanrisse</a> </p>
  74. <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjEuWmVpY2hlbmtldHRlZsO8cmRpZUJlaXNwaWVsZWRlcnVudGVyc2NoaWVkbGljaGVuVHJlbm52ZXJoYWx0ZW4">2.8.1. Zeichenkette f&uuml;r die Beispiele der unterschiedlichen Trennverhalten</a> </p>
  75. </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjIuSGFydGVUcmVubnVuZyhzdHJpY3Qp">2.8.2. Harte Trennung (strict)</a> </p>
  76. </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjMuV2VpY2hlVHJlbm51bmdoaW50ZXJkZW1Xb3J0KGFmdGVyKQ">2.8.3. Weiche Trennung hinter dem Wort (after)</a> </p>
  77. </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjQuV2VpY2hlVHJlbm51bmd2b3JkZW1Xb3J0KGJlZm9yZSk">2.8.4. Weiche Trennung vor dem Wort (before)</a> </p>
  78. </li></ul></li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX3BhZ3N0cmFjdF9hbXBfeG1sMi45LlBhZ3N0cmFjdCZYTUw">2.9. Pagstract &amp; XML</a> </p>
  79. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_pagemodel_inspizieren2.10.PageModelinspizieren">2.10. PageModel inspizieren</a> </p>
  80. <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi4xMC4xLkZ1bmt0aW9uIldvYmluaWNoPyI">2.10.1. Funktion &quot;Wo bin ich?&quot;</a> </p>
  81. </li></ul></li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX2JlYW5fa29udGV4dF9uYW1lc3BhY2Vfc2V0emVuMi4xMS5CZWFuLUtvbnRleHQvTmFtZXNwYWNlc2V0emVu">2.11. Bean-Kontext/Namespace setzen</a> </p>
  82. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.12Listen">2.12 Listen</a> </p>
  83. <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_einfache_listen2.12.1EinfacheListen">2.12.1 Einfache Listen</a> </p>
  84. <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>
  85. </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX3VudGVyc2NoZWlkdW5nX2dlcmFkZXJfdW5ncmFkZXJfemVpbGVuX2luX2xpc3RlbjIuMTIuMS4yVW50ZXJzY2hlaWR1bmdnZXJhZGVyL3VuZ3JhZGVyWmVpbGVuaW5MaXN0ZW4">2.12.1.2 Unterscheidung gerader/ungrader Zeilen in Listen</a> </p>
  86. </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX3NvbmRlcmJlaGFuZGx1bmdfdm9uX2Vyc3Rlcl9sZXR6dGVyX3plaWxlX2luX2xpc3RlbjIuMTIuMS4zU29uZGVyYmVoYW5kbHVuZ3ZvbmVyc3Rlci9sZXR6dGVyWmVpbGVpbkxpc3Rlbg">2.12.1.3 Sonderbehandlung von erster/letzter Zeile in Listen</a> </p>
  87. </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>
  88. </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>
  89. </li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.12.2Modulo-Listen">2.12.2 Modulo-Listen</a> </p>
  90. <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.12.2.1Beispiele">2.12.2.1 Beispiele</a> </p>
  91. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.12.2.2FormaleSyntax">2.12.2.2 Formale Syntax</a> </p>
  92. </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi4xMi4yLjNFcmzDpHV0ZXJ1bmdlbg">2.12.2.3 Erl&auml;uterungen</a> </p>
  93. </li></ul></li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi4xMi4zVmlydHVlbGxlUHJvcGVydGllc2bDvHJMaXN0ZW5lbGVtZW50ZQ">2.12.3 Virtuelle Properties f&uuml;r Listenelemente</a> </p>
  94. <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Property_count">Property _count</a> </p>
  95. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Property_index">Property _index</a> </p>
  96. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Property_total">Property _total</a> </p>
  97. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Property_isLast">Property _isLast</a> </p>
  98. </li><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtQmVpc3BpZWxlZsO8cnZpcnR1ZWxsZVByb3BlcnRpZXM">Beispiele f&uuml;r virtuelle Properties</a> </p>
  99. </li></ul></li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_einfache_bedingungen2.13.EinfacheBedingungen">2.13. Einfache Bedingungen</a> </p>
  100. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Anmerkung">Anmerkung</a> </p>
  101. <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.13.1VerkettungvonBedingungen">2.13.1 Verkettung von Bedingungen</a> </p>
  102. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.13.4IF-Bedingung">2.13.4 IF-Bedingung</a> </p>
  103. </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>
  104. <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.14.1Mehrwertigecase-Bedingungen">2.14.1 Mehrwertige case-Bedingungen</a> </p>
  105. </li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Links2.15.Links">2.15. Links</a> </p>
  106. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_links_mit_anchor2.16.LinksmitAnchor">2.16. Links mit Anchor</a> </p>
  107. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_image_maps2.17.ImageMaps">2.17. Image Maps</a> </p>
  108. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Resources2.18.Resourcenverweise">2.18. Resourcenverweise</a> </p>
  109. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_formulare2.19.Formulare">2.19. Formulare</a> </p>
  110. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_formular_literal_input_literal_elemente2.20.Formularinput-Elemente">2.20. Formular input-Elemente</a> </p>
  111. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_formular_literal_select_literal_elemente2.21.Formularselect-Elemente">2.21. Formular select-Elemente</a> </p>
  112. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-tiles2.22.VerschachtelnvonPagstract-Dateien">2.22. Verschachteln von Pagstract-Dateien</a> </p>
  113. <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi4yMi4xRHluYW1pc2NoZVZhcmlhYmxlbmbDvHJUaWxlc2RlZmluaWVyZW4">2.22.1 Dynamische Variablen f&uuml;r Tiles definieren</a> </p>
  114. <ul class="toc-indentation "><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.22.1.1GenerelleAnwendung">2.22.1.1 Generelle Anwendung</a> </p>
  115. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.22.1.2WeiterreichenvonVariablen">2.22.1.2 Weiterreichen von Variablen</a> </p>
  116. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.22.1.3JSON-Syntax">2.22.1.3 JSON-Syntax</a> </p>
  117. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-2.22.1.4JSON-Encoding">2.22.1.4 JSON-Encoding</a> </p>
  118. </li></ul></li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_wiederverwendbare_komponenten2.23.WiederverwendbareKomponenten">2.23. Wiederverwendbare Komponenten</a> </p>
  119. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-Messages2.24.Internationalisierung">2.24. Internationalisierung</a> </p>
  120. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_bilder_aus_text2.25.BilderausText">2.25. Bilder aus Text</a> </p>
  121. </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>
  122. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_barcode_bilder_generieren2.27.Barcode-Bildergenerieren">2.27. Barcode-Bilder generieren</a> </p>
  123. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_fehleranalyse2.28.Fehleranalyse">2.28. Fehleranalyse</a> </p>
  124. </li></ul></li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_mandantenspezifische_dateien3.MandantenspezifischeDateien">3. Mandantenspezifische Dateien</a> </p>
  125. <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>
  126. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-template-resolve3.2.Templates">3.2. Templates</a> </p>
  127. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-message-resolve3.3.Resourcen">3.3. Resourcen</a> </p>
  128. </li><li class=" "> <p ><a href="#src-23299120_PagstractMarkupLanguage-_nachrichten3.4.Nachrichten">3.4. Nachrichten</a> </p>
  129. </li></ul></li></ul> <p > </p>
  130. <div class="section section-1" id="src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX3dhc19pc3RfcGFnc3RyYWN0MS5XYXNpc3RQYWdzdHJhY3Q_">
  131. <h1 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_was_ist_pagstract" class="confluence-anchor-link"></span><span>1. Was ist Pagstract?</span></h1>
  132. <p >Pagstract ist eine einfache Templating-Sprache, die von freiheit.com entwickelt wurde. Dabei wurde bewusst keine vollst&auml;ndige Programmiersprache geschaffen, sondern sich auf einfach Konstrukte, die bei der Anzeige notwendig sind, beschr&auml;nkt. Dadurch bleibt die Gesch&auml;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 &uuml;bergeben, dass diese Daten dann in einem sch&ouml;nen Layout einbettet und aufbereitet. </p>
  133. <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_enstehung_dieser_dokumentation1.1.EnstehungdieserDokumentation">
  134. <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_enstehung_dieser_dokumentation" class="confluence-anchor-link"></span><span>1.1. Enstehung dieser Dokumentation</span></h2>
  135. <p >Dieses Dokument basiert auf einer Kurz&uuml;bersicht von Tina Umlandt. Darauf aufbauend hat Miriam D&ouml;lle Tests und Javadoc-Dokumentation erstellt. Stark erg&auml;nzt und in diese Form gebracht wurde dieses Dokument dann von Peter Kolloch. </p>
  136. </div>
  137. </div>
  138. <div class="section section-1" id="src-23299120_PagstractMarkupLanguage-_die_pagstract_sprache2.DiePagstract-Sprache">
  139. <h1 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_die_pagstract_sprache" class="confluence-anchor-link"></span><span>2. Die Pagstract-Sprache</span></h1>
  140. <p >In diesem Kapitel werden Schritt f&uuml;r Schritt die wichtigsten und auch weniger h&auml;ufig verwendete Pagstract-Konstrukte erl&auml;utert. </p>
  141. <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_hello_world2.1.HelloWorld">
  142. <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_hello_world" class="confluence-anchor-link"></span><span>2.1. Hello World</span></h2>
  143. <p >Die einfachste Pagstract-Datei enth&auml;lt einfach gar keine Pagstract-Befehle, sondern nur den HTML-Markup. Die generierte Seite unterscheidet sich nicht vom Template. </p>
  144. <div class="confbox programlisting">
  145. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
  146. <div class="line"><code class="plain">&lt;html&gt;</code></div>
  147. <div class="line"><code class="plain">&lt;head&gt;</code></div>
  148. <div class="line"><code class="plain">&lt;title&gt;Hello World!&lt;/title&gt;</code></div>
  149. <div class="line"><code class="plain">&lt;/head&gt;</code></div>
  150. <div class="line"><code class="plain">&lt;body&gt;</code></div>
  151. <div class="line"><code class="plain">&lt;h1&gt;Hello World!&lt;/h1&gt;</code></div>
  152. <div class="line"><code class="plain">&lt;/body&gt;</code></div>
  153. <div class="line"><code class="plain">&lt;/html&gt;</code></div>
  154. </div>
  155. </div>
  156. <p > </p>
  157. </div>
  158. <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_kommentare2.2.Kommentare">
  159. <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_kommentare" class="confluence-anchor-link"></span><span>2.2. Kommentare</span></h2>
  160. <p >Kommentare k&ouml;nnen komplizierte Konstrukte verst&auml;ndlich machen. Nat&uuml;rlich sollen sie aber das generierte Markup nicht unn&ouml;tig aufbl&auml;hen. Daf&uuml;r gibt es in Pagstract <tt class=" ">&lt;!---</tt> Kommentare. </p>
  161. <pre class="programlisting "> </pre> <div class="confbox programlisting">
  162. <div class="title">Kommentare</div>
  163. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code" data-title="Kommentare">
  164. <div class="line"><code class="plain">&lt;!-- Dies ist ein Kommentar der bleibt --&gt;</code></div>
  165. <div class="line"><code class="plain">&lt;!--- Dies ist ein Kommentar der nur im Template sichtbar ist. --&gt;</code></div>
  166. <div class="line"><code class="plain">wird zu</code></div>
  167. <div class="line"><code class="plain">&lt;!-- Dies ist ein Kommentar der bleibt --&gt;</code></div>
  168. </div>
  169. </div>
  170. <p > </p>
  171. <p >Der mit <tt class=" ">&lt;!---</tt> begonnene Kommentar taucht also in der Ausgabe einfach nicht mehr auf. </p>
  172. </div>
  173. <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_zugriff_auf_pagemodel_properties2.3.ZugriffaufPageModel-Properties">
  174. <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>
  175. <p >Das PageModel ist die Basis f&uuml;r das Templating. Es ist die Verbindung zwischen dem Anwendungscode und dem HTML-Code. In der Anwendung wird dieses PageModel mit Werten gef&uuml;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>
  176. <div class="confbox admonition admonition-info">
  177. <span class="admonition-icon confluence-information-macro-icon"></span>
  178. <div class="admonition-body">
  179. <p ><strong class=" ">Hinweis f&uuml;r Anwendungsentwickler</strong><br/>Die TemplateFactory versucht normalerweise das Template &uuml;ber den Klassennamen des PageModel s zu finden. So wird das Template f&uuml;r de.freiheit.mein.java.pkg.TestPage PageModel unter TestPage.html gesucht. Im Umkehrschluss kann man so erraten, wie die PageModel-Klasse f&uuml;r ein gegebenes Template hei&szlig;t. </p>
  180. </div>
  181. </div>
  182. <p > </p>
  183. <p >Die Properties des PageModels k&ouml;nnen elementare Werte enthalten wie Zeichenketten und Zahlen. Sie k&ouml;nnen aber auch wiederum komplexere Unterdatenstrukturen enthalten, wie Listen oder auch wiederum Objekte, die beliebige Unterdatenstrukturen enthalten k&ouml;nnen. </p>
  184. <p >Um an die Werte der Properties zu kommen, wird mit Hilfe der Punktnotation auf die Werte zugegriffen. </p>
  185. <p >Beispiel: </p>
  186. <pre class="screen "> .meineProperty<br/> .meineProperty.weitererWert</pre> <p class="title"> </p>
  187. <div class="confbox admonition admonition-info">
  188. <span class="admonition-icon confluence-information-macro-icon"></span>
  189. <div class="admonition-body">
  190. <p class="title"><strong class=" ">Vergleich zu Java-Beans-Pfaden</strong> </p>
  191. <p >Der Syntax ist &auml;hnlich zu den Bean-Pfaden der Java-Beans-Spezifikation ohne Index-Property-Syntax. Eine Besonderheit ist der f&uuml;hrende Punkt der besagt, dass der Bean-Pfad nicht absolut zum PageModel, sondern relativ zum aktuellen Namespace (also m&ouml;glicherweise einer Untendatenstruktur) zu sehen ist. Konstrukte, die den Namespace beeinflussen, werden sp&auml;ter erl&auml;utert. </p>
  192. </div>
  193. </div>
  194. <p > </p>
  195. </div>
  196. <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_ausgabe_auf_pagemodel_properties2.4.AusgabeaufPageModel-Properties">
  197. <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>
  198. <p >Welche Daten konkret verf&uuml;gbar sind, h&auml;ngt nat&uuml;rlich von der konkreten Seite ab. </p>
  199. <p > </p>
  200. <p >Als konkretes Beispiel, in dem auf Werte im PageModel zugegriffen werden, sieht das dann so aus: </p>
  201. <p > </p>
  202. <div class="confbox programlisting">
  203. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
  204. <div class="line"><code class="plain">&lt;</code><code class="keyword">h1</code><code class="plain">&gt;Hello ${.name} &lt;/</code><code class="keyword">h1</code><code class="plain">&gt;</code></div>
  205. <div class="line"><code class="plain">&lt;</code><code class="keyword">h1</code><code class="plain">&gt;Hello &lt;</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">/&gt; &lt;/</code><code class="keyword">h1</code><code class="plain">&gt;</code></div>
  206. <div class="line"><code class="plain">&lt;</code><code class="keyword">h1</code><code class="plain">&gt;Hello &lt;</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">/&gt; &lt;/</code><code class="keyword">h1</code><code class="plain">&gt;</code></div>
  207. <div class="line"><code class="plain">&lt;</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">/&gt;</code></div>
  208. <div class="line"><code class="plain"> </code></div>
  209. <div class="line"><code class="plain">&lt;!-- Ausgabe mit .name = "Peter" --&gt;</code></div>
  210. <div class="line"><code class="plain">&lt;</code><code class="keyword">h1</code><code class="plain">&gt;Hello Peter&lt;/</code><code class="keyword">h1</code><code class="plain">&gt;</code></div>
  211. <div class="line"><code class="plain">&lt;</code><code class="keyword">h1</code><code class="plain">&gt;Hello Peter &lt;/</code><code class="keyword">h1</code><code class="plain">&gt;</code></div>
  212. <div class="line"><code class="plain">&lt;</code><code class="keyword">h1</code><code class="plain">&gt;Hello Peter &lt;/</code><code class="keyword">h1</code><code class="plain">&gt;</code></div>
  213. <div class="line"><code class="plain">&lt;</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">/&gt;</code></div>
  214. </div>
  215. </div>
  216. <p > </p>
  217. <p >Selbstverst&auml;ndlich kann hier auch auf tiefer geschachtelte Werte anhand der oben erw&auml;hnten Punktnotation zugegriffen werden. </p>
  218. <p >Die &quot;${&hellip;}&quot;-Notation kann hierbei als Abk&uuml;rzung f&uuml;r die explizitere pma:value-Notation (mit pma:type=&quot;plain&quot;) angesehen werden. In beiden F&auml;llen werden normalerweise Zeichen, die eine besondere Bedeutung f&uuml;r HTML haben nicht einfach in den Text kopiert, sondern maskiert. Aus &quot;&lt;&quot; wird somit z.B. &quot;&amp;lt;&quot;. Im Web-Browser erscheint somit wieder das urspr&uuml;ngliche &quot;&lt;&quot;. </p>
  219. <p >Um zu sehen, dass alle gef&auml;hrlichen Zeichen maskiert werden, verwenden wir in den folgenden Beispielen einen etwas komplizierteren &quot;.markup&quot;-Wert. Dieser wird auch bei den anderen Maskierungsarten immer wieder als Referenz herhalten: </p>
  220. <pre class="programlisting ">&lt;script type=&quot;text/javascript&quot;&gt;alert('hallo');&lt;/script&gt; T&amp;uml;r</pre> <p >Wird dieser Wert nun in folgendem Template eingebunden </p>
  221. <pre class="programlisting ">&lt;p&gt;&lt;pma:value pma:name=&quot;.markup&quot;/&gt;&lt;/p&gt;<br/><br/>&lt;input type=&quot;text&quot; value=&quot;${.markup}&quot;/&gt;</pre> <p >so werden die Zeichen so umgewandelt, dass sie problemlos sowohl als Text innerhalb eines Tags als auch als Attributwert eingebunden werden k&ouml;nnen: </p>
  222. <pre class="programlisting ">&lt;p&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;alert('hallo');&amp;lt;/script&amp;gt; T&amp;amp;uml;r&lt;/p&gt;<br/><br/>&lt;input type=&quot;text&quot; value=&quot;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;alert('hallo');&amp;lt;/script&amp;gt; T&amp;amp;uml;r&quot;/&gt;</pre> <p >Der Benutzer sieht im Browser den urspr&uuml;nglichen Wert, da der Browser die Umwandlung umkehrt. </p>
  223. </div>
  224. <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_ausgabe_von_html_in_properties2.5.AusgabevonHTMLinProperties">
  225. <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>
  226. <p > </p>
  227. <div class="confbox admonition admonition-info">
  228. <span class="admonition-icon confluence-information-macro-icon"></span>
  229. <div class="admonition-body">
  230. <p >Der Typ <tt class=" ">pma:type=&quot;raw&quot;</tt> und die alte Schreibweise <tt class=" ">type=&quot;raw&quot;</tt> werden nicht mehr unterst&uuml;tzt. In beiden F&auml;llen greift Pagstract auf den Typ <tt class=" ">pma:type=&quot;escaped&quot;</tt> zur&uuml;ck. </p>
  231. </div>
  232. </div>
  233. <p >Wenn eine Property HTML enth&auml;lt, welches auch als solches ausgegeben werden soll, muss dieses &uuml;ber das <tt class="literal ">pma:raw</tt>-Attribut oder als alternative Schreibweise &uuml;ber das <tt class="literal ">pma:type</tt>-Attribut angegeben werden. </p>
  234. <div class="confbox programlisting">
  235. <div class="title">Veraltet</div>
  236. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code" data-title="Veraltet">
  237. <div class="line"><code class="plain">&lt;</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">/&gt;</code></div>
  238. <div class="line"><code class="plain">oder die alte Schreibweise</code></div>
  239. <div class="line"><code class="plain">&lt;</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">/&gt;</code></div>
  240. <div class="line"><code class="plain"> </code></div>
  241. <div class="line"><code class="plain">&lt;!-- Ausgabe --&gt;</code></div>
  242. <div class="line"><code class="plain">&lt;</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">&gt;alert('hallo');&lt;/</code><code class="keyword">script</code><code class="plain">&gt; T&amp;uml;r</code></div>
  243. <div class="line"><code class="plain">oder die alte Schreibweise</code></div>
  244. <div class="line"><code class="plain">&lt;</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">&gt;alert('hallo');&lt;/</code><code class="keyword">script</code><code class="plain">&gt; T&amp;uml;r</code></div>
  245. </div>
  246. </div>
  247. <p ><strong class=" "><br/></strong> </p>
  248. <div class="section section-3" id="src-23299120_PagstractMarkupLanguage-2.5.1NeueHTML-Ausgabe">
  249. <h3 class="heading "><span>2.5.1 Neue HTML-Ausgabe</span></h3>
  250. <p >Um weiterhin HTML ausgeben zu k&ouml;nnen, wurde die neue Ausgabe <tt class=" ">pma:type=&quot;trustedhtml&quot;</tt> eingef&uuml;hrt. </p>
  251. <p >Attribute von HTML-Tags werden nichts escaped! </p>
  252. <div class="confbox programlisting">
  253. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
  254. <div class="line"><code class="plain">Text: Dies ist ein Text, der übrigens auch noch &lt;</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">&gt;einen Link beinhaltet &amp; zu allem Überfluss&lt;/</code><code class="keyword">a</code><code class="plain">&gt; noch Sonderzeichen; weil 3 &lt; </code><code class="keyword">5</code></div>
  255. <div class="line"> </div>
  256. <div class="line"><code class="plain">Ausgabe mit: &lt;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">/&gt;</code></div>
  257. <div class="line"> </div>
  258. <div class="line"><code class="plain">Erzeugte Ausgabe:</code></div>
  259. <div class="line"><code class="plain">Dies ist ein Text, der &amp;#252;brigens auch noch &lt;</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">&gt;einen Link beinhaltet &amp;amp; zu allem &amp;#220;berfluss&lt;/</code><code class="keyword">a</code><code class="plain">&gt; noch Sonderzeichen; weil 3 &amp;lt; 5</code></div>
  260. </div>
  261. </div>
  262. <div class="confbox admonition admonition-note">
  263. <span class="admonition-icon confluence-information-macro-icon"></span>
  264. <div class="admonition-body">
  265. <h4 id="src-23299120_PagstractMarkupLanguage-Warnung" class="heading "><span>Warnung</span></h4>
  266. <p >Das sollte niemals f&uuml;r Properties geschehen, die ungefilterte Benutzereingaben enthalten. Dadurch k&ouml;nnen Sicherheitsl&uuml;cken entstehen! </p>
  267. </div>
  268. </div>
  269. <p > </p>
  270. </div>
  271. </div>
  272. <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_einfache_anfuehrungsstriche_maskieren2.6.EinfacheAnfuehrungsstrichemaskieren">
  273. <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_einfache_anfuehrungsstriche_maskieren" class="confluence-anchor-link"></span><span>2.6. Einfache Anfuehrungsstriche maskieren</span></h2>
  274. <p >F&uuml;r das Maskieren von Sonderzeichen gibt es noch weitere Optionen. </p>
  275. <p >So kann auch das Maskieren von einfachen Anf&uuml;hrungsstrichen erzwungen werden, z.B. um eine Property innerhalb von JavaScript-Zeichenketten zu expandieren. </p>
  276. <div class="confbox programlisting">
  277. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
  278. <div class="line"><code class="plain">&lt;!-- .stringWithSingleQuotes = "'hallo'" --&gt;</code></div>
  279. <div class="line"><code class="plain">&lt;!-- Eingabe mit einfachen Anführungszeichen --&gt;</code></div>
  280. <div class="line"><code class="plain">&lt;</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">/&gt;</code></div>
  281. <div class="line"><code class="plain"> </code></div>
  282. <div class="line"><code class="plain">&lt;!-- Ausgabe --&gt;</code></div>
  283. <div class="line"><code class="plain">\'hallo\'</code></div>
  284. </div>
  285. </div>
  286. <p >Selbstverst&auml;ndlich werden die anderen Zeichen mit Sonderbedeutung weiterhin so umgesetzt, dass der Benutzer den Originalstring zu sehen bekommt. </p>
  287. <div class="confbox programlisting">
  288. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
  289. <div class="line"><code class="plain">&lt;!-- .markup = &lt;</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">&gt;alert('hallo');&lt;/</code><code class="keyword">script</code><code class="plain">&gt; T&amp;uml;r --&gt;</code></div>
  290. <div class="line"><code class="plain">&lt;!-- escaped quotes --&gt;</code></div>
  291. <div class="line"><code class="plain">&lt;</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">/&gt;</code></div>
  292. <div class="line"><code class="plain"> </code></div>
  293. <div class="line"><code class="plain">&lt;!-- Ausgabe --&gt;</code></div>
  294. <div class="line"><code class="plain">&amp;lt;</code><code class="keyword">script</code><code class="plain"> type=&amp;quot;text/javascript&amp;quot;&amp;gt;alert(\'hallo\');&amp;lt;/</code><code class="keyword">script</code><code class="plain">&amp;gt; T&amp;amp;uml;r</code></div>
  295. <div class="line"><code class="plain"> </code></div>
  296. <div class="line"><code class="plain">&lt;!-- ALTE Variante --&gt;</code></div>
  297. <div class="line"><code class="plain">&lt;</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">/&gt;</code></div>
  298. </div>
  299. </div>
  300. <p > </p>
  301. </div>
  302. <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_html_tags_aus_property_werten_entfernen2.7.HTML-TagsausProperty-Wertenentfernen">
  303. <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>
  304. <p >Ebenso gibt es die Alternative, HTML-Tags zu entfernen, anstatt sie einfach zu maskieren, so dass Markup-Code f&uuml;r den Benutzer direkt sichtbar wird. Das kann besonders f&uuml;r Benutzereingaben sinnvoll sein. </p>
  305. <div class="confbox programlisting">
  306. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
  307. <div class="line"><code class="plain">&lt;!-- .markup = &lt;</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">&gt;alert('hallo');&lt;/</code><code class="keyword">script</code><code class="plain">&gt; T&amp;uml;r --&gt;</code></div>
  308. <div class="line"><code class="plain">&lt;!-- Plain --&gt;</code></div>
  309. <div class="line"><code class="plain">&lt;</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">/&gt;</code></div>
  310. <div class="line"><code class="plain"> </code></div>
  311. <div class="line"><code class="plain">&lt;!-- Plain HTML --&gt;</code></div>
  312. <div class="line"><code class="plain">&lt;</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">/&gt;</code></div>
  313. <div class="line"><code class="plain"> </code></div>
  314. <div class="line"><code class="plain">&lt;!-- Ausgabe --&gt;</code></div>
  315. <div class="line"><code class="plain">&lt;!-- Plain --&gt;</code></div>
  316. <div class="line"><code class="plain">alert('hallo'); T¨r</code></div>
  317. <div class="line"><code class="plain"> </code></div>
  318. <div class="line"><code class="plain">&lt;!-- Plain HTML --&gt;</code></div>
  319. <div class="line"><code class="plain">alert('hallo'); T&amp;#168;r</code></div>
  320. </div>
  321. </div>
  322. <p > </p>
  323. </div>
  324. <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_textanrisse2.8.Textanrisse">
  325. <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_textanrisse" class="confluence-anchor-link"></span><span>2.8. Textanrisse</span></h2>
  326. <p >H&auml;ufig ist f&uuml;r den gesamten Text nicht immer genug Platz. Stattdessen m&ouml;chte man aber einen Textanriss pr&auml;sentieren. Die Maximall&auml;nge kann mit <strong class=" "><tt class="literal ">pma:maxlength</tt></strong> angegeben werden. Es werden drei verschiedene Logiken bei Trennung unterst&uuml;tzt, die &uuml;ber <strong class=" "><tt class=" ">pma:abbrevMode</tt></strong> ausgew&auml;hlt werden k&ouml;nnen. Wird kein oder ein nicht definierter Abk&uuml;rzungsmodus gew&auml;hlt, wird <tt class=" ">after</tt> als Voreinstellung verwendet. </p>
  327. <ul class=" "><li class=" "> <p ><tt class=" ">strict</tt> f&uuml;r eine harte Trennung nach genau n Zeichen </p>
  328. </li><li class=" "> <p ><tt class=" ">after</tt> f&uuml;r eine weiche Trennung nach dem Wort nach mindestens n Zeichen </p>
  329. </li><li class=" "> <p ><tt class=" ">before</tt> f&uuml;r eine weiche Trennung vor dem Wort nach maximal n Zeichen </p>
  330. </li></ul> <p >&Uuml;ber <strong class=" "><tt class=" ">pma:more</tt></strong> kann dem Benutzer ein Hinweis auf den weggek&uuml;rzten Text gegeben werden, z.B. </p>
  331. <div class="confbox programlisting">
  332. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
  333. <div class="line"><code class="plain">&lt;</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">/&gt;</code></div>
  334. </div>
  335. </div>
  336. <p >ergibt </p>
  337. <pre class="programlisting ">Lorem ipsum dolor sit...</pre> <div class="section section-3" id="src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjEuWmVpY2hlbmtldHRlZsO8cmRpZUJlaXNwaWVsZWRlcnVudGVyc2NoaWVkbGljaGVuVHJlbm52ZXJoYWx0ZW4">
  338. <h3 class="heading "><span>2.8.1. Zeichenkette f&uuml;r die Beispiele der unterschiedlichen Trennverhalten</span></h3>
  339. <p ><tt class=" ">.loremIpsum = &quot;Lorem ipsum dolor sit amet&quot;</tt> </p>
  340. </div>
  341. <div class="section section-3" id="src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjIuSGFydGVUcmVubnVuZyhzdHJpY3Qp">
  342. <h3 class="heading "><span>2.8.2. Harte Trennung (strict)</span></h3>
  343. <div class="confbox programlisting">
  344. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
  345. <div class="line"><code class="plain">&lt;</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">/&gt;</code></div>
  346. </div>
  347. </div>
  348. <p >ergibt </p>
  349. <pre class=" ">Lorem ips...</pre> </div>
  350. <div class="section section-3" id="src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjMuV2VpY2hlVHJlbm51bmdoaW50ZXJkZW1Xb3J0KGFmdGVyKQ">
  351. <h3 class="heading "><span>2.8.3. Weiche Trennung hinter dem Wort (after)</span></h3>
  352. <div class="confbox programlisting">
  353. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
  354. <div class="line"><code class="plain">&lt;</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">/&gt; </code></div>
  355. <div class="line"><code class="plain">&lt;!-- bzw. default --&gt;</code></div>
  356. <div class="line"><code class="plain">&lt;</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">/&gt;</code></div>
  357. </div>
  358. </div>
  359. <p >ergibt </p>
  360. <pre class=" ">Lorem ipsum...</pre> </div>
  361. <div class="section section-3" id="src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtMi44LjQuV2VpY2hlVHJlbm51bmd2b3JkZW1Xb3J0KGJlZm9yZSk">
  362. <h3 class="heading "><span>2.8.4. Weiche Trennung vor dem Wort (before)</span></h3>
  363. <div class="confbox programlisting">
  364. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
  365. <div class="line"><code class="plain">&lt;</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">/&gt;</code></div>
  366. </div>
  367. </div>
  368. <p >ergibt </p>
  369. <pre class=" ">Lorem... </pre> </div>
  370. </div>
  371. <div class="section section-2" id="src-23299120_safe-id-UGFnc3RyYWN0TWFya3VwTGFuZ3VhZ2UtX3BhZ3N0cmFjdF9hbXBfeG1sMi45LlBhZ3N0cmFjdCZYTUw">
  372. <h2 class="heading "><span id="src-23299120_PagstractMarkupLanguage-_pagstract_amp_xml" class="confluence-anchor-link"></span><span>2.9. Pagstract &amp; XML</span></h2>
  373. <p >Pagstract orientiert sich gr&ouml;&szlig;tenteils an XML in seinem Syntax. Die meisten Pagstract-Befehle sind dem &quot;pma:&quot;-Prefix bei Elementen und Attributen zu erkennen. Anders als bei XML sind aber hierf&uuml;r keine expliziten Namespace-Deklarationen notwendig. Einmal ge&ouml;ffnete Pagstract-Befehle m&uuml;ssen auch wieder geschlossen werden. </p>
  374. <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&uuml;r das Generieren nicht-XML textbasierten Formaten. </p>
  375. <p >Wenngleich das zu verwirrenden Templates f&uuml;hren kann, m&uuml;ssen sich die Pagstract-Befehle aber nicht um saubere XHTML-Fragmente klammern. Z.B. (die Befehle werden sp&auml;ter erkl&auml;rt): </p>
  376. <div class="confbox programlisting">
  377. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
  378. <div class="line"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;</code></div>
  379. <div class="line"><code class="plain"> Lorem ipsum. Lorem ipsum.</code></div>
  380. <div class="line"><code class="plain"> &lt;</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">&gt;</code></div>
  381. <div class="line"><code class="plain"> &lt;/</code><code class="keyword">p</code><code class="plain">&gt;&lt;</code><code class="keyword">hr</code><code class="plain">/&gt;&lt;</code><code class="keyword">p</code><code class="plain">&gt;</code></div>
  382. <div class="line"><code class="plain"> &lt;/</code><code class="keyword">pma</code><code class="plain">:if-visible&gt;</code></div>
  383. <div class="line"><code class="plain"> Lorem ipsum. Lorem ipsum. Lorem</code></div>
  384. <div class="line"><code class="plain">&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div>
  385. </div>
  386. </div>
  387. <p >Wenn man dies mit unterbrechMich = true rendert, kommt folgendes heraus: </p>
  388. <div class="confbox programlisting">
  389. <div xmlns="http://www.w3.org/1999/xhtml" class="defaultnew syntaxhighlighter scroll-html-formatted-code">
  390. <div class="line"><code class="plain">&lt;</code><code class="keyword">p</code><code class="plain">&gt;</code></div>
  391. <div class="line"><code class="plain"> Lorem ipsum. Lorem ipsum.</code></div>
  392. <div class="line"> </div>
  393. <div class="line"><code class="plain"> &lt;/</code><code class="keyword">p</code><code class="plain">&gt;&lt;</code><code class="keyword">hr</code><code class="plain">/&gt;&lt;</code><code class="keyword">p</code><code class="plain">&gt;</code></div>
  394. <div class="line"> </div>
  395. <div class="line"><code class="plain"> Lorem ipsum. Lorem ipsum. Lorem</code></div>
  396. <div class="line"><code class="plain">&lt;/</code><code class="keyword">p</code><code class="plain">&gt;</code></div>
  397. </div>
  398. </div>
  399. <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>
  400. </div>
  401. <div class="section section-2" id="src-23299120_PagstractMarkupLanguage-_pagemodel_inspizieren2.10.PageModelinspizieren">
  402. <h2