doppelt geschweifte klammern – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self doppelt geschweifte klammern Wed, 16 Nov 16 09:07:32 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680247#m1680247 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680247#m1680247 <p>moin community,</p> <p>eine allgemeine Frage. Was sind das <strong>{{</strong> <em>...</em> <strong>}}</strong> für platzhalter, doppelt geschweifte klammern??? Ich habe sie bei ziehmlich vielen sprachen gesehen unteranderem in <strong>php</strong> und <strong>javascript</strong>. Ist das ein selbst definierter platzhalter oder vordefiniert???</p> <p>vlg MB</p> doppelt geschweifte klammern Wed, 16 Nov 16 09:08:10 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680248#m1680248 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680248#m1680248 <p>wo denn in PHP?</p> doppelt geschweifte klammern Wed, 16 Nov 16 09:18:22 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680250#m1680250 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680250#m1680250 <p>Tach!</p> <blockquote> <p>eine allgemeine Frage. Was sind das <strong>{{</strong> <em>...</em> <strong>}}</strong> für platzhalter, doppelt geschweifte klammern??? Ich habe sie bei ziehmlich vielen sprachen gesehen unteranderem in <strong>php</strong> und <strong>javascript</strong>.</p> </blockquote> <p>Das sind weder Syntaxelemente von PHP noch von Javascript, noch kenne ich sie von anderen Programmiersprachen. Du müsstest deren Bedeutung in den Anleitungen der jeweiligen Anwendungen oder Bibliotheken nachschlagen.</p> <p>dedlfix.</p> doppelt geschweifte klammern Wed, 16 Nov 16 09:21:28 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680251#m1680251 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680251#m1680251 <p>Hallo,</p> <blockquote> <p>eine allgemeine Frage. Was sind das <strong>{{</strong> <em>...</em> <strong>}}</strong> für platzhalter, doppelt geschweifte klammern??? Ich habe sie bei ziehmlich vielen sprachen gesehen unteranderem in <strong>php</strong> und <strong>javascript</strong>. Ist das ein selbst definierter platzhalter oder vordefiniert???</p> </blockquote> <p>wie schon erwähnt wurde, ist das nichts, was in der Programmiersprache selbst eine spezielle Bedeutung hat. Vermutlich hast du das nicht im Programmcode an sich gesehen, sondern in Textfragmenten, über die eine Template Engine herfallen soll, um Platzhalter zu ersetzen.</p> <p>So long,<br>  Martin</p> <div class="signature">-- <br> Es gibt eine Theorie, die besagt, dass das Universum augenblicklich durch etwas noch Komplizierteres und Verrücktes ersetzt wird, sobald jemand herausfindet, wie es wirklich funktioniert. Es gibt eine weitere Theorie, derzufolge das bereits geschehen ist.<br> - (frei übersetzt nach Douglas Adams) </div> doppelt geschweifte klammern Wed, 16 Nov 16 09:25:57 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680253#m1680253 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680253#m1680253 <p>(Edit: Parallel zu Dedlfix und Martin gepostet :) )</p> <p>Google hat mir verraten, was es in Java bedeutet:</p> <p>x = new HashMap(){{put("id", "1234");}}</p> <p>Die äußeren Klammern erzeugen eine anonyme Subklasse von HashMap, die inneren zeigen einen anonymen Instanz-Initializer an. Das gilt in Java als Antipattern. Grund ist, dass hier pro Aufruf eine neuer Typ erzeugt wird, und das frisst natürlich Speicher. Abgesehen von dem merkwürdigen Aussehen dieses Konstrukts...</p> <p>Allerdings wäre mir nicht bekannt, dass {{...}} in JavaScript oder PHP eine solche Semantik hätte. Es gibt aber Template-Engines bzw. Frameworks, die double braces oder triple braces nutzen, z.B. Angular oder Laravel. Das ist dann aber on top von PHP oder JS, nicht Teil davon.</p> <p><em>Rolf</em></p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 10:12:24 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680269#m1680269 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680269#m1680269 <blockquote> <p>eine allgemeine Frage. Was sind das <strong>{{</strong> <em>...</em> <strong>}}</strong> für platzhalter,</p> </blockquote> <p>Du meinst sicher sowas:</p> <p>Template:</p> <pre><code class="block">Kleine {{FARBE}} Männchen stammen vom {{PLANET}}. </code></pre> <p>Platzhalter sind immer irgendwie "selbst definiert". Es sind einfach Zeichenfolgen von denen der Verwender <strong>hofft</strong>, dass diese in den Templates</p> <ul> <li>eindeutig sind</li> <li>im Text, der die Platzhalter ersetzt, nicht vorkommen.</li> </ul> <p>Deshalb wohl die von Dir irgendwo gesehene Verwendung von <code>{{</code> und <code>}}</code> als Begrenzer von Platzhaltern.</p> <p><strong>Im Übrigen ist speziell in PHP diese Vorgehensweise nicht wirklich eine gute Idee. PHP ist selbst Templatesprache genug.</strong></p> <p>Obiges Beispiel müsste man ETWA so bearbeiten:</p> <pre><code class="block language-text"><!-- template: file template.txt //--> Kleine {{FARBE}} Männchen stammen vom {{PLANET}}. </code></pre> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token comment">/** * Desciption: Das ist Mist! **/</span> <span class="token comment">## Daten:</span> <span class="token variable">$tpl</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'FARBE'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'grüne'</span><span class="token punctuation">;</span> <span class="token variable">$tpl</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'PLANET'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'Mars'</span><span class="token punctuation">;</span> <span class="token comment">## "Minimale Template-Engine"</span> <span class="token variable">$template</span> <span class="token operator">=</span> <span class="token function">file_get_contents</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'template.txt'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">foreach</span> <span class="token punctuation">(</span> <span class="token function">array_keys</span><span class="token punctuation">(</span><span class="token variable">$tpl</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token variable">$str</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$search</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'{{'</span> <span class="token operator">.</span> <span class="token variable">$str</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'}}'</span><span class="token punctuation">;</span> <span class="token variable">$replace</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token operator">=</span> <span class="token variable">$tpl</span><span class="token punctuation">[</span><span class="token variable">$str</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">echo</span> <span class="token function">str_replace</span><span class="token punctuation">(</span> <span class="token variable">$search</span><span class="token punctuation">,</span> <span class="token variable">$replace</span><span class="token punctuation">,</span> <span class="token variable">$template</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </span></code></pre> <p>Das Ergebnis:</p> <pre><code class="block language-html"><span class="token comment"><!-- template: file template.txt //--></span> Kleine grüne Männchen stammen vom Mars. </code></pre> <p><strong>Sieht zwar gut aus, ist aber, weil PHP bereits eine Templatesprache ist, UNSINN.</strong></p> <p>weil mit:</p> <pre><code class="block language-php"><span class="token comment"><!-- template: file template.php //--></span> Kleine <span class="token php language-php"><span class="token delimiter important"><?=</span><span class="token variable">$tpl</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'FARBE'</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token delimiter important">?></span></span> Männchen stammen vom <span class="token php language-php"><span class="token delimiter important"><?=</span><span class="token variable">$tpl</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'PLANET'</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token delimiter important">?></span></span>. </code></pre> <p>und</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token comment">## Daten:</span> <span class="token variable">$tpl</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'FARBE'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'grüne'</span><span class="token punctuation">;</span> <span class="token variable">$tpl</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'PLANET'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'Mars'</span><span class="token punctuation">;</span> <span class="token comment">##</span> <span class="token keyword">require</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'template.php'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </span></code></pre> <p>Ergebnis:</p> <pre><code class="block language-html"><span class="token comment"><!-- template: file template.php //--></span> Kleine grüne Männchen stammen vom Mars. </code></pre> <p>das ganze viel eleganter zu bewerkstelligen ist. <strong>Es ist schneller, es gibt praktikable Fehlermeldungen (Notizen), Editoren zeigen das nativ in PHP geschriebene Template "schön bunt" an - und kürzer ist es auch noch</strong>....</p> doppelt geschweifte klammern Wed, 16 Nov 16 11:22:57 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680276#m1680276 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680276#m1680276 <blockquote> <p>eine allgemeine Frage. Was sind das <strong>{{</strong> <em>...</em> <strong>}}</strong> für platzhalter, doppelt geschweifte klammern???</p> </blockquote> <p>Die Klammern sind charakteristisch für <a href="https://mustache.github.io/" rel="nofollow noopener noreferrer">mustache</a> – eine rein deklarative und logikfreie Templating-Sprache mit Implementierungen in zahlriechen Programmiersprachen.</p> doppelt geschweifte klammern Sat, 19 Nov 16 11:18:49 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680584#m1680584 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680584#m1680584 <p>moinmoin, Die Verwendung von Klammern "(),{}" in Programmierung in C, JavaScript, SPS, etc:</p> <pre><code class="block language-html">function(Bedingung) { wenn erfüllt dann mache diese Anweisung; und diese nächste Anweisung; und noch eine Anweisung; } </code></pre> <p>Es lassen sich beliebig viele Funktionen - x-te Funktion in einer Anweisung - ineinander verschachteln, sodass viele geschweifte Klammern (meistens) am FunktionsENDE abgeschlossen müssen:</p> <pre><code class="block language-html">function(Bedingung1) { if(Bedingung2) { wenn "Bedingung1 UND 2" erfüllt dann mache diese Anweisung; } else { wenn "Bedingung1" UND NICHT "Bedingung2" erfüllt dann mache jenes; und das hier; und noch dieses; } } </code></pre> <p>vlg KoJoTe / KTElektronik</p> doppelt geschweifte klammern Wed, 16 Nov 16 09:27:11 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680254#m1680254 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680254#m1680254 <blockquote> <p>wo denn in PHP?</p> </blockquote> <p>na als platzhalter auf htmlseiten z.B. <strong>{{</strong><em>title</em><strong>}}</strong> oder <strong>{{</strong><em>content</em><strong>}}</strong> in <strong>html</strong> und dann, nehme ich an, mit <strong>php</strong> integriert, oder <strong>abngularjs</strong> da gibts das auch, aber mehr weis ich wirklich nicht. Ich wollte einfach wissen, ob das n selbstdefinierter platzhalter is und wenn ja für was?</p> <p>vlg MB</p> doppelt geschweifte klammern Wed, 16 Nov 16 09:33:10 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680256#m1680256 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680256#m1680256 <p>hi dedlfix</p> <blockquote> <blockquote> <p>eine allgemeine Frage. Was sind das <strong>{{</strong> <em>...</em> <strong>}}</strong> für platzhalter, doppelt geschweifte klammern??? Ich habe sie bei ziehmlich vielen sprachen gesehen unteranderem in <strong>php</strong> und <strong>javascript</strong>.</p> </blockquote> <p>Das sind weder Syntaxelemente von PHP noch von Javascript, noch kenne ich sie von anderen Programmiersprachen. Du müsstest deren Bedeutung in den Anleitungen der jeweiligen Anwendungen oder Bibliotheken nachschlagen.</p> </blockquote> <p>ok dankle für den hinweis! Bis jetzt habe ich nichts dergleichen gefunden :/. deswegen meine Frage hier im Forum.</p> <p>vlg MB</p> doppelt geschweifte klammern Wed, 16 Nov 16 09:31:29 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680255#m1680255 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680255#m1680255 <p>moin martin,</p> <blockquote> <blockquote> <p>eine allgemeine Frage. Was sind das <strong>{{</strong> <em>...</em> <strong>}}</strong> für platzhalter, doppelt geschweifte klammern??? Ich habe sie bei ziehmlich vielen sprachen gesehen unteranderem in <strong>php</strong> und <strong>javascript</strong>. Ist das ein selbst definierter platzhalter oder vordefiniert???</p> </blockquote> <p>wie schon erwähnt wurde, ist das nichts, was in der Programmiersprache selbst eine spezielle Bedeutung hat. Vermutlich hast du das nicht im Programmcode an sich gesehen, sondern in Textfragmenten, über die eine Template Engine herfallen soll, um Platzhalter zu ersetzen.</p> </blockquote> <p>ja so wollte ich das ausdrücken. Welchen speziellen speziellen nutzen hat das??? Warum geht man nicht einfach hin und macht sowas:</p> <pre><code class="block language-php"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token variable">$title</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> </code></pre> <p>warum so</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>{{title}}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> </code></pre> doppelt geschweifte klammern Wed, 16 Nov 16 09:37:46 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680259#m1680259 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680259#m1680259 <p>Hallo,</p> <blockquote> <p>Die äußeren Klammern, die inneren</p> </blockquote> <p>D.h. sie haben nicht als doppelte Klammern eine Bedeutung, sondern jedes Klammerpaar für sich und das auch noch unterschiedlich!? wtf, Java?</p> <p>Gruß<br> Kalk</p> doppelt geschweifte klammern Wed, 16 Nov 16 09:38:01 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680260#m1680260 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680260#m1680260 <p>hi rolf,</p> <blockquote> <p>Allerdings wäre mir nicht bekannt, dass {{...}} in JavaScript oder PHP eine solche Semantik hätte.</p> </blockquote> <p>das meine ich nicht. sry wenns so intepretiert wurde.</p> <blockquote> <blockquote> <p>Es gibt aber Template-Engines bzw. Frameworks, die double braces oder triple braces nutzen, z.B. Angular oder Laravel.</p> </blockquote> </blockquote> <p>genau. Wie funktioniert die <em>Template-Engine</em>? warum nicht eine definierte syntax von der jeweiligen programmiersprache?</p> <p>vlg MB</p> doppelt geschweifte klammern Wed, 16 Nov 16 09:47:10 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680265#m1680265 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680265#m1680265 <p>Hallo</p> <blockquote> <blockquote> <p>wo denn in PHP?</p> </blockquote> <p>na als platzhalter auf htmlseiten z.B. <strong>{{</strong><em>title</em><strong>}}</strong> oder <strong>{{</strong><em>content</em><strong>}}</strong> in <strong>html</strong></p> </blockquote> <p>Das ist, was es ist.</p> <blockquote> <p>und dann, nehme ich an, mit <strong>php</strong> integriert</p> </blockquote> <p>Nein.</p> <blockquote> <p>Ich wollte einfach wissen, ob das n selbstdefinierter platzhalter is und wenn ja für was?</p> </blockquote> <p>Ja, es ist ein Platzhalter, der gegen realen Inhalt ausgetauscht werden wird. Das geschieht natürlich mit Programmiersprachen, deeshalb gehört die Platzhaltersyntax aber nicht zu den Sprachen selbst. Es gäbe auch noch andere Versionen <code>{Platzhalter}</code> oder <code><%Platzhalter%></code> oder noch ganz andere Systeme, die ein Programmierer oder ein Team für sich ausgewählt haben könnte.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Wo wir Mängel selbst aufdecken, kann sich kein Gegner einnisten.<br> Wolfgang Schneidewind <strong>*prust*</strong> </div> doppelt geschweifte klammern Wed, 16 Nov 16 09:54:43 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680266#m1680266 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680266#m1680266 <p>Tach!</p> <blockquote> <p>na als platzhalter auf htmlseiten z.B. <strong>{{</strong><em>title</em><strong>}}</strong> oder <strong>{{</strong><em>content</em><strong>}}</strong> in <strong>html</strong> und dann, nehme ich an, mit <strong>php</strong> integriert, oder <strong>abngularjs</strong> da gibts das auch, aber mehr weis ich wirklich nicht.</p> </blockquote> <p>PHP hat sowas nicht integriert. Deine Annahme ist deshalb nicht richtig. Mit PHP kann man aber Programme schreiben, die eine beliebige Zeichenfolge lesen und auf irgendeine individuelle Art und Weise interpretieren. Ohne dass PHP selbst eine solche Syntax kennen müsste.</p> <p>HTML hat solch ein Syntaxelement ebenfalls nicht. Angular verwendet es jedoch. Auch dann steht es qausi nicht in HTML, sondern Angular filtert das raus, bevor es der Browser zu Gesicht bekommt. (Jedenfalls theoretisch. Praktisch sieht es der Browser in manchen Situationen doch, bevor Angular zu arbeiten anfangen kann, aber dann hat das keine Auswirkungen, weil es ganz normale Zeichen für ihn sind.)</p> <p>Angular nimmt es, um zu kennzeichnen, dass da der Inhalt ein zu berechnender Ausdruck ist. Manche Template-Systeme kennzeichnen damit vielleicht einen Platzhalter, vielleicht aber auch was anders.</p> <blockquote> <p>Ich wollte einfach wissen, ob das n selbstdefinierter platzhalter is und wenn ja für was?</p> </blockquote> <p>Darauf gibt es keine allgemeine Antwort. Für die einen ist es Duplo, für die anderen die längste Praline der Welt.</p> <p>Du könntest auch fragen, wofür <code>=</code> steht. Nun, auch darauf kann man keine allgemeingültige Antwort geben. Einige Sprachen verwenden das als Zuweisung, andere als Vergleichsoperator, wieder andere um eine Überschrift zu kennzeichnen, manchmal ist es aber auch einfach nur ein Zeichen. Je nach Kontext hat das also eine andere Bedeutung. Als Programmierer musst du in der Lage sein, diese Kontexte auseinanderzuhalten, dann kannst du sowohl verstehen, was bestimmer Code macht, als auch Code so formulieren, dass die beteiligten Systeme das machen, was du möchtest.</p> <p>dedlfix.</p> doppelt geschweifte klammern Wed, 16 Nov 16 09:36:11 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680258#m1680258 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680258#m1680258 <p>Hallo,</p> <blockquote> <blockquote> <p>wie schon erwähnt wurde, ist das nichts, was in der Programmiersprache selbst eine spezielle Bedeutung hat. Vermutlich hast du das nicht im Programmcode an sich gesehen, sondern in Textfragmenten, über die eine Template Engine herfallen soll, um Platzhalter zu ersetzen.</p> </blockquote> <p>ja so wollte ich das ausdrücken. Welchen speziellen speziellen nutzen hat das???</p> </blockquote> <p>hauptsächlich den, dass man nicht Programmcode und Nutzinhalt mischen muss.</p> <blockquote> <p>Warum geht man nicht einfach hin und macht sowas:</p> <pre><code class="block language-php"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">echo</span> <span class="token variable">$title</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> </code></pre> <p>warum so</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>{{title}}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> </code></pre> </blockquote> <p>Im zweiten Fall muss derjenige, der das Template erstellt, kein Programmierer sein, er muss die verwendete Scriptsprache (hier im Beispiel PHP) nicht kennen, und er kann auch nichts wirklich grob kaputtmachen.</p> <p>Auch das spätere Ändern der Inhalte ist einfacher; man braucht bloß <strong>{{title}}</strong> innerhalb des Textes an eine andere Stelle zu setzen und muss nicht wieder in die Programmlogik eingreifen.</p> <p>So long,<br>  Martin</p> <div class="signature">-- <br> Es gibt eine Theorie, die besagt, dass das Universum augenblicklich durch etwas noch Komplizierteres und Verrücktes ersetzt wird, sobald jemand herausfindet, wie es wirklich funktioniert. Es gibt eine weitere Theorie, derzufolge das bereits geschehen ist.<br> - (frei übersetzt nach Douglas Adams) </div> doppelt geschweifte klammern Wed, 16 Nov 16 09:41:25 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680262#m1680262 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680262#m1680262 <blockquote> <blockquote> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>{{title}}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span> </code></pre> </blockquote> <p>Im zweiten Fall muss derjenige, der das Template erstellt, kein Programmierer sein, er muss die verwendete Scriptsprache (hier im Beispiel PHP) nicht kennen, und er kann auch nichts wirklich grob kaputtmachen.</p> </blockquote> <p>klingt einleuchtend.</p> <blockquote> <p>Auch das spätere Ändern der Inhalte ist einfacher; man braucht bloß <strong>{{title}}</strong> innerhalb des Textes an eine andere Stelle zu setzen und muss nicht wieder in die Programmlogik eingreifen.</p> </blockquote> <p>gibst du mir n kleines Anwenungsbeispiel?</p> <p>vlg MB</p> doppelt geschweifte klammern Wed, 16 Nov 16 10:06:06 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680267#m1680267 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680267#m1680267 <p>Tach!</p> <blockquote> <blockquote> <p>Die äußeren Klammern, die inneren</p> </blockquote> <p>D.h. sie haben nicht als doppelte Klammern eine Bedeutung, sondern jedes Klammerpaar für sich und das auch noch unterschiedlich!? wtf, Java?</p> </blockquote> <p>Nun, auch in anderen Sprachen kann man beliebigen Code in {} einrahmen und den auch wieder {}-klammern. In C# beispielsweise erzeugt das {}-Paar einen eigenen Scope, in PHP nicht. Andererseits gibt es in C# auch Konstrukte, da haben die {}-Klammern nicht die Bedeutung eines Blocks, sondern arbeiten als Objekt-Initialisierer oder auch als Element der Template-String-Syntax. Kontextabhängig unterschiedliche Bedeutungen für dieselben Zeichen.</p> <p>dedlfix.</p> doppelt geschweifte klammern Wed, 16 Nov 16 10:09:01 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680268#m1680268 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680268#m1680268 <blockquote> <p>Mit PHP kann man aber Programme schreiben, die eine beliebige Zeichenfolge lesen und auf irgendeine individuelle Art und Weise interpretieren. Ohne dass PHP selbst eine solche Syntax kennen müsste.</p> </blockquote> <p>das habe ich vermutet aber eben nur vermutet.</p> <blockquote> <blockquote> <p>Ich wollte einfach wissen, ob das n selbstdefinierter platzhalter is und wenn ja für was?</p> </blockquote> <p>Darauf gibt es keine allgemeine Antwort. Für die einen ist es Duplo, für die anderen die längste Praline der Welt.</p> </blockquote> <p>sehr schöne analogy :D.</p> <blockquote> <p>Als Programmierer musst du in der Lage sein, diese Kontexte auseinanderzuhalten, dann kannst du sowohl verstehen, was bestimmer Code macht, als auch Code so formulieren, dass die beteiligten Systeme das machen, was du möchtest.</p> </blockquote> <p>ok, ich hab jetzt von meinen vermutungen gewissheit. Kannst du mir n anwendungsbeispiel geben wie ich martin auch bat? muss nicht groß sein es sei den dieses braucht diese dimensonen.</p> <p>vlg MB</p> doppelt geschweifte klammern Wed, 16 Nov 16 10:27:42 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680271#m1680271 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680271#m1680271 <p>Tach!</p> <blockquote> <p>ok, ich hab jetzt von meinen vermutungen gewissheit. Kannst du mir n anwendungsbeispiel geben wie ich martin auch bat? muss nicht groß sein es sei den dieses braucht diese dimensonen.</p> </blockquote> <p>Anwendungsbeispiele findest du in den Dokumentationen der jeweiligen Systeme. Da es keine universelle systemübergreifende Verwendung sondern stets eine individuelle ist, kann man da prinzipbedingt kein allgemeines Beispiel geben. Um die Frage wenigstens teilweise beantworten zu können, müsste ich mich auf ein konkretes System beziehen, und dann hast du immer noch keine Antwort für den Rest oder dein eigentliches Problem, das dich vielleicht veranlasst hat, die Frage zu formulieren. Angular wurde ja schon genannt. In jedem Einsteiger-Tutorial wirst du Beispiele für <em>die dortige</em> Verwendung der {{}}-Syntax finden. Um nur mal ein System herauszugreifen.</p> <p>Übrigens passiert es auch Leuten, die sich einbilden eine gehörige Portion Erfahrung zu haben, dass sie unbekannte Syntax vorfinden - oder Syntaxzusammenstellungen, deren Sinn sie (noch) nicht kennen. Zum Beispiel lief mir irgendwann in Javascript das Konstrukt <code>!!variable</code> über den Weg. Ist <code>!!</code> ein Syntaxelement irgeneiner neueren Javascript-Version, das ich noch nicht kenne? Nein, stellte sich nach Recherche heraus, das ist ein ganz normaler Negator <code>!</code> zweimal hintereinandergeschrieben. Sieht ziemlich sinnlos aus, wenn man einen Wert negiert und ihn gleich wieder negiert. Sieht aber nur so aus, denn was eigentlich passiert ist eine implizierte Typkonvertierung nach Boolean. Das Konstrukt <code>!!</code> erzeugt also aus einem Wert, der truthy oder falsy aussieht, ein echtes boolesches true oder false.</p> <p>dedlfix.</p> doppelt geschweifte klammern Wed, 16 Nov 16 14:01:48 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680298#m1680298 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680298#m1680298 <p>Moin,</p> <blockquote> <p>Kannst du mir n anwendungsbeispiel geben?</p> </blockquote> <p>Um in meinem Veranstaltungskalender eine individuelle Webseite zu erzeugen mit den angeforderten Daten, trenne ich Programm und HTML in zwei Dateien.</p> <p>Das PHP-Programm holt die angeforderten Daten aus der MySQL Datenbank und stellt sie in ein PHP-Array. Dieses Array wird an ein PHP-Unterprogramm weitergereicht, das die HTML-Datei mit den Platzhaltern liest, diese ersetzt und das Ergebnis an den Browser ausliefert.</p> <p>Hier das Ergebnis: <a href="http://remso.eu/?TYP=21" rel="nofollow noopener noreferrer">remso.eu/?TYP=21</a> (Zirkus)</p> <p>Hier der (gekürzte) PHP-Programmteil, der eine Position für die Liste zusammenstellt:</p> <pre><code class="block language-php"><span class="token variable">$display</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token operator">...</span> <span class="token variable">$display</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'segment'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'position'</span> <span class="token punctuation">,</span><span class="token string single-quoted-string">'[ort_plz]'</span> <span class="token operator">=></span> <span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'ort_plz'</span><span class="token punctuation">]</span><span class="token operator">.</span><span class="token string single-quoted-string">''</span> <span class="token punctuation">,</span><span class="token string single-quoted-string">'[ort_name]'</span> <span class="token operator">=></span> <span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'ort_name'</span><span class="token punctuation">]</span> <span class="token punctuation">,</span><span class="token string single-quoted-string">'[tt]'</span> <span class="token operator">=></span> <span class="token function">substr</span><span class="token punctuation">(</span><span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'tag'</span><span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token number">8</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token string single-quoted-string">''</span> <span class="token punctuation">,</span><span class="token string single-quoted-string">'[mm]'</span> <span class="token operator">=></span> <span class="token function">substr</span><span class="token punctuation">(</span><span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'tag'</span><span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token operator">.</span><span class="token string single-quoted-string">''</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Und hier die Original-Platzhalterdatei, in die die Daten des Arrays gefüllt werden: <a href="remso.eu/500/p591_de.htm" rel="noopener noreferrer">remso.eu/500/p591_de.htm</a>, Die solltest du dir als Quelltext anzeigen lassen.</p> <p>Du siehst "Segmente" wie</p> <pre><code class="block language-text"><!-- [position] --> ... [tt].[mm]. ... <!-- [/position] --> </code></pre> <p>Die Platzhalter werden durch die Daten des Arrays ersetzt und so oft ausgegeben, wie es die Liste erfordert, hier als 25 mal.</p> <p>Ich kann statt "[tt]" genausogut "{{starttag}}", "StArTtAg" oder "<%datum%>" nehmen, es muss nur zweimal dieselbe Zeichenfolge sein. Und zwar eine Zeichenfolge, die sonst in diesem Segment der Platzhalter-Datei nicht vorkommt. Ich empfand [tt] im Textfluss als gut lesbar.</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 10:40:27 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680273#m1680273 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680273#m1680273 <p>Tach!</p> <blockquote> <p>das ganze viel eleganter zu bewerkstelligen ist. <strong>Es ist schneller, es gibt praktikable Fehlermeldungen (Notizen), Editoren zeigen das nativ in PHP geschriebene Template "schön bunt" an - und kürzer ist es auch noch</strong>....</p> </blockquote> <p>Und in beiden Fällen ist der Kontextwechsel unbeachtet geblieben. Gut, im vorliegenden Fall mit den beiden Stringliteralen, die in die Variablen geschrieben werden, ist das überschaubar ungefährlich, aber in der Realität kommen die Daten sonstwoher und können sonstwas enthalten, inklusive Zeichen, die im Ausgabekontext eine besondere Bedeutung haben. Deshalb, liebe Kinder, wenn ihr das (nicht nur) zu Hause nachmacht, achtet immer auf das korrekte Escaping. Ich kann in diesem Fall nicht sagen, dass die Anwendung von htmlspecialchars() richtig wäre, denn aus dem Beispiel geht nicht hervor, dass es sich um HTML handelt. Es könnte auch reiner Text ohne irgendwelche Syntax sein, dann wäre das sogar ohne weiteres richtig. Also kurz: gegebenenfalls Kontextwechsel passend zur Ausgabe beachten!</p> <p>dedlfix.</p> Noch ein "Geimtipp" Wed, 16 Nov 16 10:45:01 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680274#m1680274 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680274#m1680274 <blockquote> <pre><code class="block language-php"><span class="token comment"><!-- template: file template.php //--></span> Kleine <span class="token php language-php"><span class="token delimiter important"><?=</span><span class="token variable">$tpl</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'FARBE'</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token delimiter important">?></span></span> Männchen stammen vom <span class="token php language-php"><span class="token delimiter important"><?=</span><span class="token variable">$tpl</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'PLANET'</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token delimiter important">?></span></span>. </code></pre> <p>und</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token comment">## Daten:</span> <span class="token variable">$tpl</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'FARBE'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'grüne'</span><span class="token punctuation">;</span> <span class="token variable">$tpl</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'PLANET'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'Mars'</span><span class="token punctuation">;</span> <span class="token comment">##</span> <span class="token keyword">require</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'template.php'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </span></code></pre> <p>Ergebnis:</p> <pre><code class="block language-html"><span class="token comment"><!-- template: file template.php //--></span> Kleine grüne Männchen stammen vom Mars. </code></pre> <p>das ganze viel eleganter zu bewerkstelligen ist. <strong>Es ist schneller, es gibt praktikable Fehlermeldungen (Notizen), Editoren zeigen das nativ in PHP geschriebene Template "schön bunt" an - und kürzer ist es auch noch</strong>...</p> </blockquote> <p><strong>GEHEIMTIPP:</strong></p> <p>Wenn man die Ausgaben im Speicher (einer Variablen) braucht, dann bietet sich Outputbuffering an:</p> <pre><code class="block language-php"><span class="token function">ob_start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">require</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'template.php'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$text</span> <span class="token operator">=</span> <span class="token function">ob_get_contents</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">ob_end_clean</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'<p>'</span><span class="token punctuation">,</span> <span class="token function">preg_replace</span><span class="token punctuation">(</span> <span class="token string single-quoted-string">'#<!--.*//-->\n#'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">,</span> <span class="token variable">$text</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'</p>'</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"\n"</span><span class="token punctuation">;</span> </code></pre> <p>Ergebnis:</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>p</span><span class="token punctuation">></span></span>Kleine grüne Männchen stammen vom Mars.<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>p</span><span class="token punctuation">></span></span> </code></pre> <p>... würde hier nachträglich den HTML-Kommentar entfernen und den Text in den <p>-Tag "einrahmen". Ist ein schlechtes Beispiel - ich will aber bei dem angefangenen bleiben.</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 10:45:09 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680275#m1680275 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680275#m1680275 <p>Hallo,</p> <blockquote> <p><strong>Sieht zwar gut aus, ist aber, weil PHP bereits eine Templatesprache ist, UNSINN.</strong></p> </blockquote> <p>Wenn die Person, die die Seite mit PHP programmiert, dieselbe ist, die dann die Inhalte einstellt, dann hast du recht. Wenn jedoch jemand Inhalte auf Webseiten einstellen soll, der keine Ahnung von PHP hat, dann kann die Lösung mit den geschweiften Klammerpaaren den Lernaufwand effizient senken.</p> <p>Gruß<br> Kalk</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 13:22:02 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680291#m1680291 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680291#m1680291 <p>Wenn eine Templating-Engine einmal verfügbar ist, setze ich die auch konsequent ein und bin überzeugt davon dass beispielsweise sowas</p> <pre><code class="block language-javascript"><span class="token function">$</span><span class="token punctuation">(</span>descr<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">text</span><span class="token punctuation">(</span><span class="token function">xr</span><span class="token punctuation">(</span><span class="token string">'Zugriffe am @dat@: @cnt@, sql: @sql@'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> <span class="token literal-property property">dat</span><span class="token operator">:</span> dat<span class="token punctuation">,</span> <span class="token literal-property property">cnt</span><span class="token operator">:</span> jobj<span class="token punctuation">.</span>cnt<span class="token punctuation">,</span> <span class="token literal-property property">sql</span><span class="token operator">:</span> jobj<span class="token punctuation">.</span>sql <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>besser lesbar ist als Stringverkettungen die in PHP wie JS besonders ekelhaft sind ;)</p> <p>PS: Einmal Template immer Template.</p> <pre><code class="block language-perl"> <span class="token comment"># am Server gleich die richtige Datenstruktur geholt</span> <span class="token keyword">my</span> <span class="token variable">$slice</span> <span class="token operator">=</span> <span class="token variable">$dbh</span><span class="token operator">-></span>selectall_arrayref<span class="token punctuation">(</span><span class="token string">"select * from log where date(dat) = date(now()) order by dat desc"</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>Slice <span class="token operator">=></span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$self</span><span class="token operator">-></span><span class="token punctuation">{</span>CONTENT<span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token variable">$json</span><span class="token operator">-></span>encode<span class="token punctuation">(</span><span class="token punctuation">{</span> tbody <span class="token operator">=></span> <span class="token variable">$slice</span><span class="token punctuation">,</span> cnt <span class="token operator">=></span> scalar<span class="token punctuation">(</span><span class="token variable">@$slice</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <pre><code class="block language-javascript"><span class="token comment">// befüllt in JS ne ganze Tabelle</span> <span class="token keyword">var</span> tt <span class="token operator">=</span> <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#tbodytt'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">html</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> jobj <span class="token operator">=</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'#tbody'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">html</span><span class="token punctuation">(</span> <span class="token function">xr</span><span class="token punctuation">(</span>tt<span class="token punctuation">,</span> jobj<span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 13:57:58 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680297#m1680297 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680297#m1680297 <p>Lieber Jörg,</p> <blockquote> <pre><code class="block language-php"><span class="token comment"><!-- template: file template.php //--></span> Kleine <span class="token php language-php"><span class="token delimiter important"><?=</span><span class="token variable">$tpl</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'FARBE'</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token delimiter important">?></span></span> Männchen stammen vom <span class="token php language-php"><span class="token delimiter important"><?=</span><span class="token variable">$tpl</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'PLANET'</span><span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token delimiter important">?></span></span>. </code></pre> </blockquote> <p>dieser Code setzt voraus, dass er von PHP geparst wird. Schreibt ein Autor (lies: Inhalte-Hineinschreiber, NICHT Programmierer!) syntaktisch falsch, entstehen Syntaxfehler, die die Ausführung des gesamten Prozesses ins Nirvana schicken kann, was zu einer dauerhaften Unverwendbarkeit der betroffenen Seite führt.</p> <p>Will man das <em>immer</em>?</p> <p>Auch in meinen Projekten notiere ich <code>{#irgendein-text}</code> und <code>{$irgendein-wert}</code>, obwohl ich selbst derjenige bin, der beides betreut. Wozu riskieren, dass meine Anwendung an dieser Stelle wegen nichtiger Syntaxprobleme stecken bleibt? Und warum sollte ich die Ausgabedaten von PHP parsen lassen? Die sind doch (in aller Regel) CSS/HTML/JS und nicht (schon wieder) PHP!</p> <p>Liebe Grüße,</p> <p>Felix Riesterer.</p> Noch ein "Geimtipp" Fri, 18 Nov 16 07:37:19 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680459#m1680459 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680459#m1680459 <p>Templategefummel ist eine praktische Angelegenheit. Perl's Problem viele Jahre war das Fehlen einer TE (Templating Engine) und so hab ich mir das Teil selbst gebaut wie viele andere Perlkollegen. Nebenher machte ich Erfahrungen mit sehr umfangreichen TE's wie z.B. Perl's Template::Toolkit (TT) und kam immer wieder zu dem Schluss, dass in der Praxis solch Umfang wie das TT bietet, unsinnig ist. In Fakt kochte da jeder Designer sein eigenes Süppchen und exportierte Stück für Stück die Programmlogik ins Template -- Ein Horror für den CTO (Onion Pattern).</p> <p>Die Praxis besteht darin, umfangreiche Seiten <a href="http://rolfrost.de/tvspielfim.de" rel="nofollow noopener noreferrer">Beispiel</a> über einfache Templates abzuwickeln, d.h., Loops sollte eine TE schon können:</p> <pre><code class="block language-perl"><span class="token comment"># AJAX Response erzeugen</span> <span class="token variable">$self</span><span class="token operator">-></span><span class="token punctuation">{</span>CONTENT<span class="token punctuation">}</span> <span class="token operator">=</span> XR<span class="token punctuation">:</span><span class="token punctuation">:</span>xr<span class="token punctuation">(</span> <span class="token string">q( <h2>%title%</h2> <dl> %loop_slice% <dt><strong> %title% </strong></dt> <dd> %descr% </dd> %endloop% </dl> )</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> title <span class="token operator">=></span> <span class="token variable">$hmap</span><span class="token operator">-></span><span class="token punctuation">{</span><span class="token variable">$url</span><span class="token punctuation">}</span><span class="token punctuation">,</span> slice <span class="token operator">=></span> <span class="token variable">$slice</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token operator">//</span> Response ins DOM pflanzen <span class="token operator"><</span>div id<span class="token operator">=</span><span class="token string">"pro"</span><span class="token operator">></span><span class="token filehandle symbol"></div></span> <span class="token filehandle symbol"><script></span> function pro<span class="token punctuation">(</span>url<span class="token punctuation">)</span><span class="token punctuation">{</span> throbber<span class="token punctuation">(</span>true<span class="token punctuation">)</span><span class="token punctuation">;</span> var xhr <span class="token operator">=</span> new XMLHttpRequest<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> xhr<span class="token operator">.</span>open<span class="token punctuation">(</span><span class="token string">'GET'</span><span class="token punctuation">,</span><span class="token string">'%url%?url='</span><span class="token operator">+</span>url<span class="token punctuation">)</span><span class="token punctuation">;</span> xhr<span class="token operator">.</span>onload <span class="token operator">=</span> function<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> throbber<span class="token punctuation">(</span>false<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span>this<span class="token operator">.</span>status <span class="token operator">!=</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token keyword">return</span> pretext<span class="token punctuation">(</span>this<span class="token operator">.</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$(</span><span class="token string">'#pro'</span><span class="token punctuation">)</span><span class="token operator">.</span>html<span class="token punctuation">(</span>this<span class="token operator">.</span>response<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> xhr<span class="token operator">.</span>send<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Wobei es eigentlich völlig Wurst ist, ob die Einzeldaten serverseitig ins Template gerendert oder als JSON gesendet werden, wenn <strong>Templates für Perl wie JS identisch aufgebaut</strong> sind. Mehr dazu auf meinen FW-Seiten und ja, den CODE für die TE hab ich da auch veröffentlicht -- Jahrelang bewährt ;)</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 12:07:03 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680278#m1680278 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680278#m1680278 <blockquote> <p>dann kann die Lösung mit den geschweiften Klammerpaaren den Lernaufwand effizient senken.</p> </blockquote> <p>Dann kann das folgende ganz einfach und effizient den Aufwand für den Programmierer und das Programm senken:</p> <pre><code class="block"><!-- template: file template.txt //--> Kleine {{FARBE}} Männchen stammen vom {{PLANET}}. </code></pre> <p>Dann hilft sowas:</p> <pre><code class="block language-bash"><span class="token shebang important">#! /usr/bin/bash</span> <span class="token comment">### file myTemplateToPHP.sh</span> <span class="token comment">## replace simple Placeholders with php-Syntax</span> <span class="token comment">## {{ with <?=$tpl['</span> <span class="token comment">## }} with '];?></span> <span class="token assign-left variable">placeHolderLeft</span><span class="token operator">=</span><span class="token string">'{{'</span><span class="token punctuation">;</span> <span class="token assign-left variable">placeHolderRight</span><span class="token operator">=</span><span class="token string">'}}'</span><span class="token punctuation">;</span> <span class="token assign-left variable">replacementLeft</span><span class="token operator">=</span><span class="token string">"<?=\<span class="token variable">$tpl</span>['"</span><span class="token punctuation">;</span> <span class="token assign-left variable">replacementrRight</span><span class="token operator">=</span><span class="token string">"'];?>"</span><span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token punctuation">[</span> <span class="token variable">$1</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">do</span> <span class="token assign-left variable">fileIn</span><span class="token operator">=</span><span class="token variable">$1</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token parameter variable">-w</span> <span class="token variable">$fileIn</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span> <span class="token comment">#txt=`cat ${fileIn} | tr "\n" '\n'`;</span> <span class="token assign-left variable">txt</span><span class="token operator">=</span><span class="token string">''</span><span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token builtin class-name">read</span> row <span class="token punctuation">;</span> <span class="token keyword">do</span> <span class="token assign-left variable">row</span><span class="token operator">=</span><span class="token variable"><span class="token variable">$(</span><span class="token builtin class-name">echo</span> $<span class="token punctuation">{</span>row<span class="token punctuation">}</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token string">"s#<span class="token variable">${placeHolderLeft}</span>#<span class="token variable">${replacementLeft}</span>#g"</span><span class="token variable">)</span></span><span class="token punctuation">;</span> <span class="token assign-left variable">row</span><span class="token operator">=</span><span class="token variable"><span class="token variable">$(</span><span class="token builtin class-name">echo</span> $<span class="token punctuation">{</span>row<span class="token punctuation">}</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token parameter variable">-s</span> <span class="token string">"s#<span class="token variable">${placeHolderRight}</span>#<span class="token variable">${replacementrRight}</span>#g"</span><span class="token punctuation">;</span><span class="token variable">)</span></span><span class="token punctuation">;</span> <span class="token assign-left variable">txt</span><span class="token operator">=</span><span class="token string">"<span class="token variable">${txt}</span><span class="token entity" title="\n">\n</span><span class="token variable">${row}</span>"</span><span class="token punctuation">;</span> <span class="token keyword">done</span> <span class="token operator"><</span> <span class="token variable">${fileIn}</span><span class="token punctuation">;</span> <span class="token assign-left variable">fileOut</span><span class="token operator">=</span><span class="token variable"><span class="token variable">$(</span><span class="token builtin class-name">echo</span> $<span class="token punctuation">{</span>fileIn<span class="token punctuation">}</span> <span class="token operator">|</span> <span class="token function">sed</span> <span class="token parameter variable">-s</span> <span class="token string">'s#\.txt$#.php#i'</span><span class="token variable">)</span></span><span class="token punctuation">;</span> <span class="token builtin class-name">echo</span> <span class="token variable">${txt}</span> <span class="token operator">></span> <span class="token variable">${fileOut}</span><span class="token punctuation">;</span> <span class="token assign-left variable">err</span><span class="token operator">=</span><span class="token variable">$?</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token string">"0"</span><span class="token operator">==</span><span class="token string">"<span class="token variable">${err}</span>"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">then</span> <span class="token builtin class-name">echo</span> <span class="token string">"Datei '<span class="token variable">${fileOut}</span>' aus '<span class="token variable">${fileIn}</span>' erzeugt."</span><span class="token punctuation">;</span> <span class="token keyword">else</span> <span class="token builtin class-name">echo</span> <span class="token string">"Beim Schreiben der Datei '<span class="token variable">${fileOut}</span>' (aus '<span class="token variable">${fileIn}</span>') trat ein Fehler auf."</span><span class="token punctuation">;</span> <span class="token keyword">fi</span> <span class="token keyword">else</span> <span class="token builtin class-name">echo</span> <span class="token string">"Die Datei '<span class="token variable">${fileIn}</span>' gibt es nicht."</span><span class="token punctuation">;</span> <span class="token keyword">fi</span> <span class="token builtin class-name">shift</span><span class="token punctuation">;</span> <span class="token keyword">done</span><span class="token punctuation">;</span> </code></pre> <p>RUN:</p> <pre><code class="block">myTemplateToPHP.sh *.txt </code></pre> <p>Ergebnis:</p> <pre><code class="block">Datei 'template.php' aus 'template.txt' erzeugt. cat template.php <!-- template: file template.txt //--> Kleine <?=$tpl['FARBE'];?> Männchen stammen vom <?=$tpl['PLANET'];?> </code></pre> doppelt geschweifte klammern Thu, 17 Nov 16 21:12:31 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680449#m1680449 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680449#m1680449 <p>@.MB, @1unitedpower</p> <blockquote> <blockquote> <p>eine allgemeine Frage. Was sind das <strong>{{</strong> <em>...</em> <strong>}}</strong> für platzhalter, doppelt geschweifte klammern???</p> </blockquote> <p>Die Klammern sind charakteristisch für <a href="https://mustache.github.io/" rel="nofollow noopener noreferrer">mustache</a> – eine rein deklarative und logikfreie Templating-Sprache mit Implementierungen in zahlriechen Programmiersprachen.</p> </blockquote> <p>Im PHP-Bereich kennt man es von zumindest <a href="http://twig.sensiolabs.org/" rel="nofollow noopener noreferrer">Twig</a>. Die Begrenzer sind aber oftmals frei definierbar, was eine konkrete Zuordnung ohne weiteren Kontext noch mehr unmöglich macht als ohnehin schon. :)</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 12:22:14 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680280#m1680280 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680280#m1680280 <p>Ja guuuut - kann man machen, muss man aber nicht (wobei das Minus nicht von mir ist...)</p> <p>In solchen Fällen würde ich Smarty vorschlagen wollen, der compiliert Templates automatisch in PHP.</p> <p><em>Rolf</em></p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 12:40:35 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680282#m1680282 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680282#m1680282 <blockquote> <p>(wobei das Minus nicht von mir ist...)</p> </blockquote> <p>Nicht jeder ist so ein ... [Man darf hier die angebrachten Worte nicht verwenden. Wer weiß wer sich dann ... fühlt.]</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 13:21:30 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680290#m1680290 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680290#m1680290 <blockquote> <p>In solchen Fällen würde ich Smarty vorschlagen wollen, der compiliert Templates automatisch in PHP.</p> </blockquote> <p>Ja, Smarty ist für manches eine Lösung, insbesondere im Hinblick auf den <a href="https://code.fastix.org/Projekte/PHP%3ACaching%20f%C3%BCr%20Webprojekte/" rel="nofollow noopener noreferrer">Cache</a>. Dann ist aber der von manchem gewünschte Effekt, <a href="https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680275#m1680275" rel="noopener noreferrer">dass es für die Template-Ersteller im Hinblick auf den Lernaufwand einfach sein soll</a>, schnell wieder "perdu".</p> <p>Bei einfachen Templates werde ich wohl <a href="https://code.fastix.org/Projekte/PHP%2CBash%3ATemplate-%C3%9Cbersetzer/" rel="nofollow noopener noreferrer">an meiner Lösung mit dem Übersetzer, der Templates nach PHP kompiliert</a> fest halten und im Hinblick auf so manche Widrigkeit im Verhalten einzelner Personen hierorts meinen Nutzen optimieren und also meine Lösungen <a href="https://code.fastix.org/" rel="nofollow noopener noreferrer">entweder hier</a> oder, falls ich ein allgemeines Interesse nicht sehe, an einer anderen Stelle präsentieren.</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 12:46:01 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680283#m1680283 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680283#m1680283 <p>@@Google weiß alles</p> <blockquote> <p>Nicht jeder ist so ein ...</p> </blockquote> <p>Beleidigte Leberwurst?</p> <blockquote> <p>[Man darf hier die angebrachten Worte nicht verwenden.</p> </blockquote> <p>Nicht?</p> <blockquote> <p>Wer weiß wer sich dann ... fühlt.]</p> </blockquote> <p>Eingeschnappt?</p> <p>LLAP </p> <div class="signature">-- <br> <em>“I love to go to JS conferences to speak about how to avoid using JavaScript. Please learn CSS & HTML to reduce your JS code bloat.”</em> —Estelle Weyl </div> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 12:49:14 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680285#m1680285 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680285#m1680285 <p>Ich mach hier zu. Das führt ja wieder zu nichts.</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 13:44:34 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680293#m1680293 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680293#m1680293 <p>Hallo,</p> <blockquote> <p>Dann ist aber der von manchem gewünschte Effekt, <a href="https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680275#m1680275" rel="noopener noreferrer">dass es für die Template-Ersteller im Hinblick auf den Lernaufwand einfach sein soll</a>, schnell wieder "perdu".</p> </blockquote> <p>Wie kommst du auf die Idee, dass jemand der Inhalte einstellen soll/will, identisch mit dem sei, der die Templates erstellt?</p> <p>Gruß<br> Kalk</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Thu, 17 Nov 16 19:58:56 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680442#m1680442 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680442#m1680442 <p>@Rolf b, @Google weiß alles</p> <blockquote> <blockquote> <p>In solchen Fällen würde ich Smarty vorschlagen wollen, der compiliert Templates automatisch in PHP.</p> </blockquote> <p>Ja, Smarty ist für manches eine Lösung, insbesondere im Hinblick auf den <a href="https://code.fastix.org/Projekte/PHP%3ACaching%20f%C3%BCr%20Webprojekte/" rel="nofollow noopener noreferrer">Cache</a>. Dann ist aber der von manchem gewünschte Effekt, <a href="https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680275#m1680275" rel="noopener noreferrer">dass es für die Template-Ersteller im Hinblick auf den Lernaufwand einfach sein soll</a>, schnell wieder "perdu".</p> </blockquote> <p>Na ja, da würde ich so nicht zustimmen. So was…</p> <pre><code class="block">Kleine {{FARBE}} Männchen stammen vom {{PLANET}}. </code></pre> <p>…sähe in <a href="http://www.smarty.net/" rel="nofollow noopener noreferrer">Smarty</a> beispielsweise so aus:</p> <pre><code class="block">Kleine {$FARBE} Männchen stammen vom {$PLANET}. </code></pre> <p>Das Ausgangsbeispiel mit <code>{{...}}</code> ist zudem tatsächlich etwa korrekte <a href="http://twig.sensiolabs.org/" rel="nofollow noopener noreferrer">Twig</a>-Syntax.</p> <p>Ich sehe da keine nennenswerten Unterschiede, was den Lernaufwand angeht.</p> <blockquote> <p>Bei einfachen Templates werde ich wohl <a href="https://code.fastix.org/Projekte/PHP%2CBash%3ATemplate-%C3%9Cbersetzer/" rel="nofollow noopener noreferrer">an meiner Lösung mit dem Übersetzer, der Templates nach PHP kompiliert</a> fest halten […].</p> </blockquote> <p>Das kann man machen, aber im Grunde kann man dann, wenn man schon mit Kompilieren und derlei Dingen anfängt, auch gleich Twig oder Smarty nutzen. Die können im Zweifel dann eben schon noch zwei, drei Sachen mehr, die ganz praktisch sind. Ein Beispiel wären Syntax für Schleifen und Bedingungen. Zudem sind derlei Projekte infrastrukturell natürlich besser aufgestellt, was Doku oder andere Hilfestellungen angeht.</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 13:56:55 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680296#m1680296 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680296#m1680296 <blockquote> <blockquote> <p>Dann ist aber der von manchem gewünschte Effekt, <a href="https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680275#m1680275" rel="noopener noreferrer">dass es für die Template-Ersteller im Hinblick auf den Lernaufwand einfach sein soll</a>, schnell wieder "perdu". Wie kommst du auf die Idee, dass jemand der Inhalte einstellen soll/will, identisch mit dem sei, der die Templates erstellt?</p> </blockquote> </blockquote> <p>Wie kommst Du auf die Idee, dass ich auf die Idee komme? Ich sage mit meinem Satz dazu bewusst nichts aus, <a href="https://code.fastix.org/Projekte/PHP%2CBash%3ATemplate-%C3%9Cbersetzer/" rel="nofollow noopener noreferrer">weil ich weiß, dass es Fälle gibt, in denen Frontender und Backender derselbe ist UND eben solche, wo der Job zwischen Spezialisten geteilt wird</a>.</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 14:51:13 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680301#m1680301 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680301#m1680301 <p>Hallo,</p> <blockquote> <p>Wie kommst Du auf die Idee, dass ich auf die Idee komme?</p> </blockquote> <p>Inception!</p> <p>Gruß<br> Kalk</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Wed, 16 Nov 16 15:26:47 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680305#m1680305 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680305#m1680305 <blockquote> <p>Will man das <em>immer</em>?</p> </blockquote> <p>Ich habe die Vorteile dieser Vorgehensweise beschrieben. Nicht behauptet, dass man das <em>immer</em> will. Manchmal macht halt Unsinn im Sinne eines Kompromisses.</p> <blockquote> <p>Und warum sollte ich die Ausgabedaten von PHP parsen lassen?</p> </blockquote> <p>Ich wiederhole:</p> <blockquote> <p>Es ist schneller, es gibt praktikable Fehlermeldungen (Notizen), Editoren zeigen das nativ in PHP geschriebene Template "schön bunt" an ...</p> </blockquote> <p><a href="https://code.fastix.org/Projekte/PHP,Bash:Template-%C3%9Cbersetzer/" rel="nofollow noopener noreferrer">Aktuelle Version des Template-Übersetzers.</a></p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Thu, 17 Nov 16 20:06:08 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680444#m1680444 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680444#m1680444 <blockquote> <p>Das kann man machen, aber im Grunde kann man dann, wenn man schon mit Kompilieren und derlei Dingen anfängt, auch gleich Twig oder Smarty nutzen. Die können im Zweifel dann eben schon noch zwei, drei Sachen mehr, die ganz praktisch sind. Ein Beispiel wären Syntax für Schleifen und Bedingungen. Zudem sind derlei Projekte infrastrukturell natürlich besser aufgestellt, was Doku oder andere Hilfestellungen angeht.</p> </blockquote> <p>Dös is ja grad des. <a href="https://forum.selfhtml.org/meta/2016/nov/15/code-bloecke-in-markdown-mit-rotem-hintergrund/1680440#m1680440" rel="noopener noreferrer">Kaum geht was will man es auch benutzen</a>.</p> <p>Und schon ist es <a href="http://www.bayrisches-dialekt-woerterbuch.com/bayerisch_bayrisch_batzig_3762_wort.html" rel="nofollow noopener noreferrer">batzig</a> mit dem "geringen Lernaufwand"...</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Fri, 18 Nov 16 02:24:30 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680453#m1680453 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680453#m1680453 <p>@Google weiß alles</p> <blockquote> <blockquote> <p>Das kann man machen, aber im Grunde kann man dann, wenn man schon mit Kompilieren und derlei Dingen anfängt, auch gleich Twig oder Smarty nutzen. Die können im Zweifel dann eben schon noch zwei, drei Sachen mehr, die ganz praktisch sind. Ein Beispiel wären Syntax für Schleifen und Bedingungen. Zudem sind derlei Projekte infrastrukturell natürlich besser aufgestellt, was Doku oder andere Hilfestellungen angeht.</p> </blockquote> <p>Dös is ja grad des. <a href="https://forum.selfhtml.org/meta/2016/nov/15/code-bloecke-in-markdown-mit-rotem-hintergrund/1680440#m1680440" rel="noopener noreferrer">Kaum geht was will man es auch benutzen</a>.</p> <p>Und schon ist es <a href="http://www.bayrisches-dialekt-woerterbuch.com/bayerisch_bayrisch_batzig_3762_wort.html" rel="nofollow noopener noreferrer">batzig</a> mit dem "geringen Lernaufwand"...</p> </blockquote> <p>Sorry, ich kann dir glaube ich nicht folgen oder weiß nicht, was du mir mitteilen möchtest. Du möchtest deine Eigenentwicklung nutzen, weil du in der Lage bist, sie zu programmieren? Und du („es“, das bayrische ich?) wirst patzig, wenn man auf die potenziellen Vorteile bestehender Standardlösungen hinweist oder nicht deiner Meinung ist, was Aspekte wie Lernaufwand angeht?</p> <p>Damit weiß ich nichts anzufangen.</p> <p>Freilich kannst du deine Variante natürlich gern nutzen, ich halte es aber nicht für eine sinnvolle Empfehlung für andere Leute. Das ist nicht abwertend gemeint oder so. Ich weiß nicht, wie ich es anders ausdrücken soll.</p> <p>Erfahrungsgemäß landet man am Ende nicht selten bei den Standardlösungen, weil man feststellt, dass die Anforderungen doch größer sind, als man anfangs angenommen hatte, und weil man irgendwann keinen Sinn mehr darin sieht, das Rad neu zu erfinden. Etwas stumpf formuliert: Je mehr eigenen Code man produziert, desto mehr eigenen Code muss man auch pflegen. Deshalb sollte man meines Erachtens nach Möglichkeit immer erst die bestehenden Lösungen ausprobieren und nur dann selbst etwas entwickeln, wenn man begründen kann, warum man das für notwendig hält. In diesem Fall sehe ich bespielsweise das Argument „geringerer Lernaufwand“ nicht, weil bestehende Lösungen syntaktisch sogar <em>identisch</em> zur Eigenentwicklung sind.</p> <p>PS: Ich habe es mir jetzt nicht angesehen, aber ich halte es für nicht unwahrscheinlich, dass man beispielsweise eine Eingabe für deinen Compiler erzeugen kann, die zu einer PHP-Datei führt, die syntaktisch fehlerhaft ist und damit zum Programmabbruch führt. Auch so was ist sicherlich ein Aspekt.</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Fri, 18 Nov 16 04:16:59 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680454#m1680454 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680454#m1680454 <p>@Google weiß alles</p> <p>Sorry, Edit-Zeitraum ist abgelaufen. Ich habe jetzt glaube ich verstanden, wie du es meintest. Tut mir leid, da war ich etwas auf dem falschen Dampfer. :( Ich hätte es noch umformuliert, aber ich denke, dass der größte Teil meiner Antwort dennoch allgemein nicht verkehrt ist.</p> <p>Ich versuche mal, die These zu paraphrasieren: „Sobald das Templating komplexere Möglichkeiten unterstützt, möchte ein Anwender diese auch nutzen, was den Lernaufwand steigert.“</p> <p>Zwei Punkte dazu:</p> <ol> <li> <p>Da ist erst mal die Frage, worüber wir hier eigentlich reden. Deshalb habe ich deine Antwort auch erst falsch verstanden. Ich hatte nicht auf dem Schirm, dass es sozusagen das Ziel ist, dem Anwender per Design nur ganz einfache String-Ersetzungen zur Verfügung zu stellen. Das ist natürlich in Ordnung und dafür gibt es definitiv auch Anwendungen. Ich würde auch nicht behaupten, dass es gar keinen (geschwindigkeitsbezogenen) Sinn ergibt, derlei Vorlagen nach PHP zu kompilieren. (So was ist immer ein potenzieller Risikofaktor.) Das deckt aber definitiv nicht ansatzweise alle Anwendungen für Templating ab. Ich denke, dass das in Form von deiner Umsetzung mit dem Kompilieren eher in Richtung Spezialfall geht und dass man bei simplen Ersetzungen ansonsten mit <a href="http://php.net/manual/en/function.preg-replace-callback.php" rel="noopener noreferrer"><code>preg_replace_callback</code></a> oder <a href="http://php.net/manual/en/function.strtr.php" rel="noopener noreferrer"><code>strtr</code></a> (womöglich begleitet von Caching der fertigen Ausgabe) in Sachen Performance auch gut genug dabei ist und dass man in komplexeren Fällen dem Anwender ruhig Smarty oder Twig oder dergleichen zumuten darf, weil es <em>bei Bedarf</em> eben auch erweiterte Funktionalität bereitstellt. Es hängt natürlich davon ab, was man entwickelt und wie technisch versiert die Anwender sind.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></p> </li> <li> <p>Ich glaube nicht, dass Nutzer so erpicht darauf sind, alle Feinheiten des genutzten Systems zu lernen. Der „normale Anwender“™ erarbeitet und notiert sich seine drei oder vier Workflows und ist im Grunde glücklich und zufrieden. Da kann man aber auch anmerken, dass es eher selten der normale Anwender ist, der sich überhaupt mit dem Editieren von Templates beschäftigt. Ich glaube, die Leute, die sich an so was rantrauen, sind eher Leute vom Fach oder zumindest Leute, von denen man als Entwickler im Normalfall eine gewisse Kompetenz erwarten kann. Die erwarten dann umgekehrt in vielen Fällen auch durchaus Funktionalität, die über das simple Verschieben von Textblöcken hinausgeht. (Die Ausnahme dazu ist, wenn die Besucher/Nutzer der Seite Templates editieren können. Etwa bei einem Blog-Anbieter. Aber das ist ein Spezialfall, denke ich. Und selbst dort kann simple Logikprogrammierung durchaus erwünscht sein.)</p> <p>Was den Hinweis auf kramdown angeht: Markup-Sprachen sind schon noch mal eine andere Geschichte als Templating. Obwohl die eher vernünftige (ich hoffe? ;)) Nutzung von kramdown hier im Forum schon mein Argument stützt, dass sich die meisten Nutzer nicht mit dem Potenzial aufhalten, das eine solche Funktionalität bietet. Die Verbindung oder eine Abgrenzung von Markup-Sprache und Templating scheint mir aber ein ganz interessantes Thema zu sein. Nur fällt mir gerade nicht viel dazu ein.</p> </li> </ol> <p>Als Fazit formuliert: Ich denke nicht, dass man in normalen Fällen kompilierte Templates benötigt, wenn sich die Funktionalität darauf beschränkt, Platzhalter zu verschieben.</p> <p>Noch mal meine Entschuldigung, deinen Beitrag erst falsch verstanden zu haben.</p> <hr class="footnotes-sep"> <section class="footnotes"> <ol class="footnotes-list"> <li id="fn1" class="footnote-item"><p>Das ist ein durchaus interessantes Thema. Meine Erfahrung dazu ist, dass es so oder so eher trübe aussieht, derlei Funktionalität für „Programmierlaien“™ bedienbar zu machen (auch wenn ich Leute da für lernfähig halte, aber lernen müssen sie auch „einfachste“ Systeme). Ich erkenne aber an, dass es gewünscht sein kann, Dinge zumindest so zu gestalten, dass sie nichts kaputt machen können (etwa durch das <a href="http://twig.sensiolabs.org/doc/filters/raw.html" rel="nofollow noopener noreferrer">Ermöglichen von XSS</a>). Wobei sich Template-Engines in Sachen Funktionsumfang wahrscheinlich auch konfigurieren lassen. Das weiß ich ohne Recherche nicht. <a href="#fnref1" class="footnote-backref">↩︎</a></p> </li> </ol> </section> Platzhalter sind in PHP "nicht wirklich sinnvoll" Fri, 18 Nov 16 11:57:16 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680518#m1680518 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680518#m1680518 <p><strong>Vorab:</strong> <a href="https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680275#m1680275" rel="noopener noreferrer">Die Prämisse(!) "geringer Lernaufwand" hatte Tabellenkalk in die Diskussion eingeführt</a>.</p> <blockquote> <blockquote> <p>Und schon ist es <a href="http://www.bayrisches-dialekt-woerterbuch.com/bayerisch_bayrisch_batzig_3762_wort.html" rel="nofollow noopener noreferrer">batzig</a> mit dem "geringen Lernaufwand"...</p> </blockquote> <p>Und du („es“, das bayrische ich?) wirst patzig, wenn man auf die potenziellen Vorteile bestehender Standardlösungen hinweist oder nicht deiner Meinung ist, was Aspekte wie Lernaufwand angeht?</p> </blockquote> <p>Nein.</p> <ul> <li>Erstens hatte ich "batzig" extra verlinkt damit das schöne Wort nicht mit "patzig" verwechselt wird. Selbst ein Leser der es nicht kennt sollte doch dem Link zu der Erläuterung folgen, statt derart wilde und im Ergebnis grob-falsche Vermutungen anzustellen. Ich habe nicht grundlos den Eindruck, dass hier manche manches von mir erstmal per se Scheiße finden wollen und auch negativ bewerten ohne sich - wie in diesem Fall - überhaupt auch nur die geringste Mühe gegeben zu haben, das von mir geschriebene zu verstehen. Deine Ausführungen zeigen mir mal wieder das sowas vorkommt - mir wird immer wieder etwas unterstellt, was ich nie geäußert habe. <strong>Das sowas dann noch jemand "gut" findet zeigt mir, dass es hier mehr als einen gibt, der eine derart eklatante Leseschwäche hat.</strong></li> <li>Zweitens stand die Frage im Raum, wie man es jetzt anstellt, dass ein "gestalterisch begabter aber technisch nicht besonders fähiger" die Templates erstellen oder daran fummeln kann. Ohne Lernaufwand eben. Und da ist es bei den "bestehenden Standardlösungen" Twig oder Smarty eben so, dass die viel mehr können als unbedingt erforderlich. In der Folge wird der Templateschreiber entweder selbst versuchen diese "potenziellen Vorteile" auszunutzen oder es wird von ihm verlangt. Dann ist es "batzig" mit dem "geringen Lernaufwand".</li> <li>Drittens ist es so, dass, wenn man das nicht tut (gemeint: die "potenziellen Vorteile" von Twig oder Smarty nutzen), es so ist als stelle man jemanden einen Rennwagen hin, regelt den bei 20Km/h ab und nimmt in Kauf, dass Anschaffungspreis und laufende Kosten weiterhin denen des Rennwagens entsprechen. Oder meinetwegen einen superteuren Computer auf dem dann als einziges Programm nur ein einfacher Taschenrechner startbar ist, der +-*/ und nichts anderes kann.</li> </ul> Platzhalter sind in PHP "nicht wirklich sinnvoll" Fri, 18 Nov 16 12:34:52 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680519#m1680519 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680519#m1680519 <blockquote> <p>@Google weiß alles</p> <p>Sorry, Edit-Zeitraum ist abgelaufen. Ich habe jetzt glaube ich verstanden, wie du es meintest. Tut mir leid, da war ich etwas auf dem falschen Dampfer. :(</p> </blockquote> <p>Ok. Angenommen.</p> <blockquote> <p>Wobei sich Template-Engines in Sachen Funktionsumfang wahrscheinlich auch konfigurieren lassen. Das weiß ich ohne Recherche nicht.</p> </blockquote> <p>Tja. Irgendwie geht mit freier und quelloffener Software "alles". Wenn man hinsieht, <a href="https://code.fastix.org/showFile.php?file=Projekte/PHP%2CBash%3ATemplate-%C3%9Cbersetzer/myTemplateToPHP.sh" rel="nofollow noopener noreferrer">dann ist sogar das bash-Skript (inzwischen) konfigurierbar</a>.</p> <blockquote> <p>Etwas stumpf formuliert: Je mehr eigenen Code man produziert, desto mehr eigenen Code muss man auch pflegen.</p> </blockquote> <p>Der Widerspruch ebenso "stumpf" formuliert: (Annahme:) Ich benutze eine dieser wunderschönen Standardlösungen. Deren Code (der viel mehr ist als ich brauche - weil der ja viel mehr können muss) wird jetzt von Dritten gepflegt und, ach, auch dauernd erweitert. Jetzt kommt irgendwann mal die Situation, dass, nehmen wir ein bekanntes Beispiel (MySQL, OpenOffice) Oracle die Firma kauft und die Entwickler wild mit dem Armen rudernd und nicht zitierfähiges fluchend wegrennen oder aus anderen Gründen das Interesse verlieren oder eben auch richtig batzige Ideen haben wodurch ich dann mein gesamtes Projekt umschreiben muss (PHP-mysql(), python 2 zu 3, ...).</p> <p>Oder die Entwicker der "Kann-alles-am-besten-Libary" fummeln unbemerkt von der Community eine Sicherheitslücke rein (Joomla, Wordpress, Typo, ...) und irgendwann sind die Daten aller Mitarbeiter meiner Firma im Darknet für "zweifuffzich" zu haben - allerdings veraltet, denn ich bin keiner mehr.</p> <p>Ich vertrete hier den festen und begründeten Standpunkt, dass in vielen, <strong>besonders aber den einfachen Fällen</strong> die Nutzung eigener, minimalistischer Lösungen der billigere, performantere und risokofreiere Weg ist. Und da man ja in PHP - weil es eine Skriptsprache ist - weit überwiegend nur "kleinere" Dinge erledigt (<a href="https://code.fastix.org/Projekte/PHP%3AlibGetBreadcrumb/" rel="nofollow noopener noreferrer">aus ein paar Daten Webseiten zusammenkrümelt</a>) denke ich, dass diese "einfache Fälle" irgendwie die weit überwiegende Mehrheit der Fälle darstellen.</p> Noch ein "Geimtipp" Fri, 18 Nov 16 08:28:25 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680473#m1680473 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680473#m1680473 <blockquote> <p>Nebenher machte ich Erfahrungen mit sehr umfangreichen TE's wie z.B. Perl's Template::Toolkit (TT) und kam immer wieder zu dem Schluss, dass in der Praxis solch Umfang wie das TT bietet, unsinnig ist.</p> </blockquote> <p>HTML::Template sollte Dir da deutlich besser gefallen.</p> <blockquote> <p>In Fakt kochte da jeder Designer sein eigenes Süppchen und exportierte Stück für Stück die Programmlogik ins Template -- Ein Horror für den CTO (Onion Pattern).</p> </blockquote> <p>Ja, das möchte man nicht.</p> <blockquote> <p>Die Praxis besteht darin, umfangreiche Seiten <a href="http://rolfrost.de/tvspielfim.de" rel="nofollow noopener noreferrer">Beispiel</a> über einfache Templates abzuwickeln, d.h., Loops sollte eine TE schon können:</p> </blockquote> <p>Loops, aber auch Fallunterscheidungen, Escaping-Funktionalität, Includes.</p> <blockquote> <p>Wobei es eigentlich völlig Wurst ist, ob die Einzeldaten serverseitig ins Template gerendert oder als JSON gesendet werden, wenn <strong>Templates für Perl wie JS identisch aufgebaut</strong> sind.</p> </blockquote> <p>Der Template-Engine sollte das egal sein, stimmt. Insgesamt völlig Wurst ist es aber bestimmt nicht.</p> Noch ein "Geimtipp" Fri, 18 Nov 16 08:36:06 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680478#m1680478 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680478#m1680478 <blockquote> <blockquote> <p>Nebenher machte ich Erfahrungen mit sehr umfangreichen TE's wie z.B. Perl's Template::Toolkit (TT) und kam immer wieder zu dem Schluss, dass in der Praxis solch Umfang wie das TT bietet, unsinnig ist.</p> </blockquote> <p>HTML::Template sollte Dir da deutlich besser gefallen.</p> </blockquote> <p>Meine Eigenentwicklung ist deutlich performanter. Meine Templates sind jedoch kompatibel zu HTML::Template was die %-String-Begrenzer betrifft.</p> <blockquote> <blockquote> <p>In Fakt kochte da jeder Designer sein eigenes Süppchen und exportierte Stück für Stück die Programmlogik ins Template -- Ein Horror für den CTO (Onion Pattern).</p> </blockquote> <p>Ja, das möchte man nicht.</p> <blockquote> <p>Die Praxis besteht darin, umfangreiche Seiten <a href="http://rolfrost.de/tvspielfim.de" rel="nofollow noopener noreferrer">Beispiel</a> über einfache Templates abzuwickeln, d.h., Loops sollte eine TE schon können:</p> </blockquote> <p>Loops, aber auch Fallunterscheidungen, Escaping-Funktionalität, Includes.</p> </blockquote> <p>Einfache if/else/endif ja, damit kann man ja auch das Template umschalten. Was Includes ggf. überflüssig macht ;)</p> <blockquote> <blockquote> <p>Wobei es eigentlich völlig Wurst ist, ob die Einzeldaten serverseitig ins Template gerendert oder als JSON gesendet werden, wenn <strong>Templates für Perl wie JS identisch aufgebaut</strong> sind.</p> </blockquote> <p>Der Template-Engine sollte das egal sein, stimmt. Insgesamt völlig Wurst ist es aber bestimmt nicht.</p> </blockquote> <p>Die Oberbegriffe für das was ich damit meine sind Portabilität, Transparenz und Abstraktion.</p> Noch ein "Geimtipp" Fri, 18 Nov 16 09:23:29 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680493#m1680493 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680493#m1680493 <blockquote> <blockquote> <p>HTML::Template sollte Dir da deutlich besser gefallen.</p> </blockquote> <p>Meine Eigenentwicklung ist deutlich performanter.</p> </blockquote> <p><a href="http://search.cpan.org/~tinita/HTML-Template-Compiled-1.003/lib/HTML/Template/Compiled.pm" rel="nofollow noopener noreferrer">HTML::Template::Compiled</a></p> Noch ein "Geimtipp" Fri, 18 Nov 16 12:45:24 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680521#m1680521 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680521#m1680521 <blockquote> <blockquote> <p>HTML::Template sollte Dir da deutlich besser gefallen.</p> </blockquote> <p>Meine Eigenentwicklung ist deutlich performanter.</p> </blockquote> <p>Natürlich.</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Fri, 18 Nov 16 12:38:52 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680520#m1680520 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680520#m1680520 <blockquote> <p>Der Widerspruch ebenso "stumpf" formuliert: (Annahme:) Ich benutze eine dieser wunderschönen Standardlösungen. Deren Code (der viel mehr ist als ich brauche - weil der ja viel mehr können muss) wird jetzt von Dritten gepflegt und, ach, auch dauernd erweitert. Jetzt kommt irgendwann mal die Situation, dass, nehmen wir ein bekanntes Beispiel (MySQL, OpenOffice) Oracle die Firma kauft [..]</p> </blockquote> <p>MySQL ist ein schwieriges Beispiel, Du wirst wohl kaum ein DBMS selbst schreiben wollen. Außerdem: <a href="https://mariadb.org/" rel="nofollow noopener noreferrer">MariaDB</a>.</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Sat, 19 Nov 16 04:53:15 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680571#m1680571 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680571#m1680571 <p>@Google weiß alles</p> <p>Okay, mal so als Denkanstoß:</p> <p>Hier eine Liste der von mir bemerkten Tippfehler in <a href="https://code.fastix.org/showFile.php?file=Projekte/PHP%2CBash%3ATemplate-%C3%9Cbersetzer/myTemplateToPHP.sh" rel="nofollow noopener noreferrer"><code>myTemplateToPHP.sh</code></a>, Version 1.1.2:</p> <ul> <li>Zeile 13: <code>replacementrRight</code></li> <li>Zeile 16: <code>replacementrRight</code></li> <li>Zeile 26: <code>replacementrRight</code></li> <li>Zeile 49: <code>Yoy</code>, <code>sedile</code></li> </ul> <p>Eine Liste der bemerkten Logikfehler oder inhaltlichen Fehler:</p> <ul> <li>Zeile 15: XSS-Angriff möglich. <code>htmlspecialchars</code> benötigt den Parameter <code>ENT_QUOTES</code> (für Platzhalter in HTML-Attributen) und eigentlich auch noch eine <code>encoding</code>-Angabe (<a href="http://php.net/manual/en/function.htmlspecialchars.php#refsect1-function.htmlspecialchars-changelog" rel="noopener noreferrer">Hintergrund</a>).</li> <li>Zeile 30: Überschreibt nachfolgend vermutlich die Eingabedatei, falls diese nicht auf <code>.txt</code> endet.</li> <li>Zeile 36: <code>hasErrors</code> könnte durch eine vorherige Eingabedatei den Wert 1 haben, wird hier aber auf 0 zurückgesetzt. Fehler werden dadurch potenziell verdeckt.</li> <li>Zeile 48: <code>hasErrors</code> könnte nicht initialisiert sein.</li> </ul> <p>Bonus:</p> <p>In die Ausgabe kann beliebiger PHP-Code injiziert werden.</p> <ul> <li> <p>Für <code>htmlSafeMode="yes"</code>:</p> <ul> <li> <p>Eingabe:</p> <pre><code class="block">foo {{ '])?> <?php var_dump(filemtime(__FILE__)); ?> <?=($tpl[' }} bar </code></pre> </li> <li> <p>Ausgabe:</p> <pre><code class="block">foo <?=htmlspecialchars( $tpl[' '])?> <?php var_dump(filemtime(__FILE__)); ?> <?=($tpl[' '] );?> bar </code></pre> </li> </ul> </li> <li> <p>Für <code>htmlSafeMode="no"</code>:</p> <ul> <li> <p>Eingabe:</p> <pre><code class="block">foo {{ ']?> <?php var_dump(filemtime(__FILE__)); ?> <?=$tpl[' }} bar </code></pre> </li> <li> <p>Ausgabe:</p> <pre><code class="block">foo <?=$tpl[' ']?> <?php var_dump(filemtime(__FILE__)); ?> <?=$tpl[' '];?> bar </code></pre> </li> </ul> </li> </ul> <p>Statt <code>var_dump(filemtime(__FILE__));</code> kann dort natürlich beliebiger Code stehen.</p> <p>Das war jetzt ein Code Review mit den offensichtlichen Problemen in 52 Zeilen Code (inklusive Leerzeilen und Kommentare). Das dauerte länger als 3 Sekunden, war aber dafür vermutlich auch ergiebiger.</p> <hr> <blockquote> <blockquote> <p>Wobei sich Template-Engines in Sachen Funktionsumfang wahrscheinlich auch konfigurieren lassen. Das weiß ich ohne Recherche nicht.</p> </blockquote> <p>Tja. Irgendwie geht mit freier und quelloffener Software "alles". Wenn man hinsieht, <a href="https://code.fastix.org/showFile.php?file=Projekte/PHP%2CBash%3ATemplate-%C3%9Cbersetzer/myTemplateToPHP.sh" rel="nofollow noopener noreferrer">dann ist sogar das bash-Skript (inzwischen) konfigurierbar</a>.</p> </blockquote> <p>Ja, wenn man bloß mal hinsehen würde, würde man sicher so einige Fehler entdecken. :)</p> <p>(Nur am Rande und ohne Frotzelei, weil ich es richtig finde, das zu erwähnen: Auch dein Lizenztext enthält so einige grammatikalische Fehler. Den solltest du dir noch mal genau ansehen. Ich stimme ansonsten zu, dass die Lizenz eine Nutzung deines Codes leider quasi unmöglich macht, wenn man das Thema Lizenzen halbwegs ernst nimmt. Die Unwägbarkeiten sind nicht praktikabel und manche Aspekte sind unverständlich.)</p> <blockquote> <blockquote> <p>Etwas stumpf formuliert: Je mehr eigenen Code man produziert, desto mehr eigenen Code muss man auch pflegen.</p> </blockquote> <p>Der Widerspruch ebenso "stumpf" formuliert: (Annahme:) Ich benutze eine dieser wunderschönen Standardlösungen. Deren Code (der viel mehr ist als ich brauche - weil der ja viel mehr können muss) wird jetzt von Dritten gepflegt und, ach, auch dauernd erweitert. Jetzt kommt irgendwann mal die Situation, dass, nehmen wir ein bekanntes Beispiel (MySQL, OpenOffice) Oracle die Firma kauft und die Entwickler wild mit dem Armen rudernd und nicht zitierfähiges fluchend wegrennen oder aus anderen Gründen das Interesse verlieren oder eben auch richtig batzige Ideen haben wodurch ich dann mein gesamtes Projekt umschreiben muss (PHP-mysql(), python 2 zu 3, ...).</p> </blockquote> <p>Das Risiko besteht allerdings immer bei so ziemlich allem. Die PHP-Entwickler könnten auch irgendwann mal auf die Idee kommen, beispielsweise die <code>array_*</code>-Funktionen auszutauschen. Zu inkompatiblen Änderungen an <code>htmlspecialchars</code>, die theoretisch durchaus auch dein Bash-Script betreffen würden, habe ich oben schon was verlinkt. Selbst die Bash-Syntax ist nicht in Stein gemeißelt. Oder die von <code>sed</code>. Oder die Frage, ob <code>sed</code> oder <code>mktemp</code> irgendwann nicht mehr paketiert sein könnten.</p> <p>Nachträgliche Pflege ist im EDV-Umfeld ein Faktor, mit dem so oder so kalkuliert werden muss. Es gibt in der Hinsicht (leider?) den idealen Code nicht. Die Lebenszyklen sind endlich.</p> <blockquote> <p>Oder die Entwicker der "Kann-alles-am-besten-Libary" fummeln unbemerkt von der Community eine Sicherheitslücke rein (Joomla, Wordpress, Typo, ...) und irgendwann sind die Daten aller Mitarbeiter meiner Firma im Darknet für "zweifuffzich" zu haben - allerdings veraltet, denn ich bin keiner mehr.</p> </blockquote> <p>Nun ja… Das kann theoretisch auch jeder Entwickler eines Pakets einer Linux-Distribution tun. Ähnlich wie mein Kommentar zum letzten Aspekt. Das kann auch jeder Entwickler proprietärer Software tun. Nur ist es bei denen nicht mal theoretisch nachvollziehbar, weil der Code nicht offen einsehbar ist.</p> <p>Es ist letztlich so, dass der Free-Software-Kosmos oder der Software-Kosmos generell auf Vertrauen basiert. Das kann man auch nicht so einfach rauskürzen, weil kein einzelner Mensch Millionen an Codezeilen überwachen kann. (Führt jetzt zu weit, aber ich werfe da mal den Begriff „bugdoor“ in den Raum.)</p> <p>Dennoch gibt es bei dem Thema durchaus Aspekte in Sachen Gewährleistung und dergleichen. Ich weiß von Unternehmen, die auf der Grundlage durchaus die Nutzung externer Bibliotheken verbieten. Eine gewisse Paranoia oder Vorsicht ist da sicher nicht verkehrt. Die muss man aber gegenüber praktischen Aspekten abwägen. Zudem garantiert eben auch niemand, dass der „in house“-Code oder der Code, den man den Dienstleister hat machen lassen, qualitativ besser ist. Das ist letztlich auch eher der Punkt, dass die Kunden jemanden greifbar haben wollen, der eine Gewährleistungspflicht erfüllt und gegebenenfalls nachbessert.</p> <p>Es ist ein offenes Geheimnis, dass der meiste Code… nicht so toll ist.</p> <blockquote> <p>Ich vertrete hier den festen und begründeten Standpunkt, dass in vielen, <strong>besonders aber den einfachen Fällen</strong> die Nutzung eigener, minimalistischer Lösungen der billigere, performantere und risokofreiere Weg ist.</p> </blockquote> <p>Ich will nicht darauf rumreiten, aber ich habe oben demonstriert, dass du im Schnitt alle 5-10 Zeilen (nicht mal <a href="https://de.wikipedia.org/wiki/Lines_of_Code" rel="nofollow noopener noreferrer">SLOC</a>-Zeilen) einen eindeutigen Fehler gemacht hast und dass du bei deinem Ansatz auch mindestens ein konzeptionelles Problem hast, weil du das Einfügen beliebigen PHP-Codes gestattest.</p> <p>Das ist höchstens security through obscurity, weil sich niemand die Mühe macht, genau dein System anzugreifen, wenn man mit einem WordPress-Hack gleich – keine Ahnung – 75 Millionen Seiten attackieren könnte. Dein Code ist nicht unwahrscheinlich trotzdem viel schlechter als der von WordPress. (Ironischerweise ist das ein Konzept, was dennoch irgendwie sogar funktioniert. Aber sobald du ein einigermaßen lohnenswertes Ziel bist, trägt dir dann halt doch irgendein Hacker mal die Daten raus. Das potenzielle Risiko ist trotzdem immer vorhanden, es wird nur nicht realisiert. Wenn du auf dem Land wohnst, brauchst du dein Haus nicht abzuschließen, weil dir halt keiner an der Tür rüttelt.)</p> <blockquote> <p>Und da man ja in PHP - weil es eine Skriptsprache ist - weit überwiegend nur "kleinere" Dinge erledigt (<a href="https://code.fastix.org/Projekte/PHP%3AlibGetBreadcrumb/" rel="nofollow noopener noreferrer">aus ein paar Daten Webseiten zusammenkrümelt</a>) denke ich, dass diese "einfache Fälle" irgendwie die weit überwiegende Mehrheit der Fälle darstellen.</p> </blockquote> <p>Da müsste ich jetzt eigentlich weiter ausholen. Ein Aspekt ist jedenfalls: Wenn du einen einfachen Fall hast, brauchst du auch keine kompilierten Templates.</p> Klare Ansage: Lesen und keine falschen Behauptungen aufstellen Fri, 18 Nov 16 12:49:13 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680522#m1680522 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680522#m1680522 <blockquote> <blockquote> <p>Der Widerspruch ebenso "stumpf" formuliert: (Annahme:) Ich benutze eine dieser wunderschönen Standardlösungen. Deren Code (der viel mehr ist als ich brauche - weil der ja viel mehr können muss) wird jetzt von Dritten gepflegt und, ach, auch dauernd erweitert. Jetzt kommt irgendwann mal die Situation, dass, nehmen wir ein bekanntes Beispiel (MySQL, OpenOffice) Oracle die Firma kauft [..]</p> </blockquote> <p>MySQL ist ein schwieriges Beispiel, Du wirst wohl kaum ein DBMS selbst schreiben wollen. Außerdem: <a href="https://mariadb.org/" rel="nofollow noopener noreferrer">MariaDB</a>.</p> </blockquote> <p>MySQL ist geradezu das Idealbeispiel dafür, dass "Oracle die Firma kauft und die Entwickler wild mit dem Armen rudernd und nicht zitierfähiges fluchend wegrennen". Und genau und nur dafür habe ich es höchst ausdrücklich als Beispiel genannt. Nicht jedoch dafür, "ein DBMS selbst schreiben zu wollen".</p> <blockquote> <p>Außerdem: <a href="https://mariadb.org/" rel="nofollow noopener noreferrer">MariaDB</a>.</p> </blockquote> <p>Eben. Aber was wäre die Folge gewesen, wenn M$ oder $AP die Entwickler direkt vor der Firmenzentrale von Oracle eingesammelt und mit Geld zur Mitarbeit an deren eigener Software "gezwungen" hätte? Warum wird mir das einfach mal unterstellt um es dann schlecht zu finden?</p> <p>Irgenwie habe ich also schon wieder das durch Tatsachen begründete Gefühl, dass ich ganz bewusst falsch verstanden werde. Das war doch deutlich formuliert.</p> <p><a href="https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680518#m1680518" rel="noopener noreferrer"><strong>Gebt mir ruhig auch dafür die -1</strong></a> ... "Kritik", die sich auf wilde und grob falsche Vermutungen (eher schon vorsätzlich falsche Behauptungen) darüber bezieht, was ich äußerte, kann ich nicht wirklich ernst nehmen.</p> <p>Und naturgegeben färbt das auf die Kritiker ab.</p> Klare Ansage: Lesen und keine falschen Behauptungen aufstellen Sat, 19 Nov 16 07:37:59 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680574#m1680574 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680574#m1680574 <p>@Mitleser, @Google weiß alles:</p> <blockquote> <blockquote> <blockquote> <p>Der Widerspruch ebenso "stumpf" formuliert: (Annahme:) Ich benutze eine dieser wunderschönen Standardlösungen. Deren Code (der viel mehr ist als ich brauche - weil der ja viel mehr können muss) wird jetzt von Dritten gepflegt und, ach, auch dauernd erweitert. Jetzt kommt irgendwann mal die Situation, dass, nehmen wir ein bekanntes Beispiel (MySQL, OpenOffice) Oracle die Firma kauft [..]</p> </blockquote> <p>MySQL ist ein schwieriges Beispiel, Du wirst wohl kaum ein DBMS selbst schreiben wollen. Außerdem: <a href="https://mariadb.org/" rel="nofollow noopener noreferrer">MariaDB</a>.</p> </blockquote> <p>MySQL ist geradezu das Idealbeispiel dafür, dass "Oracle die Firma kauft und die Entwickler wild mit dem Armen rudernd und nicht zitierfähiges fluchend wegrennen". Und genau und nur dafür habe ich es höchst ausdrücklich als Beispiel genannt. Nicht jedoch dafür, "ein DBMS selbst schreiben zu wollen".</p> </blockquote> <p>MySQL ist so ziemlich das einzige relevante Beispiel, das mir einfällt, in dem ein FLOSS(?)-Projekt eingekauft wurde. Und MySQL existiert weiterhin und wird auch weiterhin unter der GPLv2 vertrieben, auch wenn der Zustand sicher nicht ideal ist.</p> <p>OpenOffice existiert als LibreOffice weiter und ist nicht gerade eine klassische Abhängigkeit für andere Software.</p> <p>Andere Beispiele? Ich finde es okay, auf die Gefahr hinzuweisen, aber ich sehe da schnell Probleme mit der Verhältnismäßigkeit, weil es meines Wissens im Grunde keine Präzedenzfälle gibt. Zumal schlimmstenfalls eben die letzte FLOSS-Version geforkt wird.</p> <p>Wenn man so was als Risiko ansieht, darf man gar keine Fremdkomponenten mehr nutzen. Das ist offenkundig nicht praktikabel, weil das natürlich bereits beim Betriebssystem anfängt. Die Furcht und das damit verbundene Argument halte ich daher letztlich für unbegründet.</p> <blockquote> <blockquote> <p>Außerdem: <a href="https://mariadb.org/" rel="nofollow noopener noreferrer">MariaDB</a>.</p> </blockquote> <p>Eben. Aber was wäre die Folge gewesen, wenn M$ oder $AP die Entwickler direkt vor der Firmenzentrale von Oracle eingesammelt und mit Geld zur Mitarbeit an deren eigener Software "gezwungen" hätte? Warum wird mir das einfach mal unterstellt um es dann schlecht zu finden?</p> <p>Irgenwie habe ich also schon wieder das durch Tatsachen begründete Gefühl, dass ich ganz bewusst falsch verstanden werde. Das war doch deutlich formuliert.</p> </blockquote> <p>Schreib ruhig dein eigenes DBMS, wenn du sonst nicht ruhig schlafen kannst. Aber das ist auf sehr vielen Ebenen Quatsch, und das ist vor allem auch nichts, was man Fragestellern empfehlen sollte. Das ist mein wesentliches „Problem“ mit deinen Antworten. Du vertrittst Standpunkte, die hochgradig „ideologisch“ geprägt sind und die nicht in dem Sinne „praktikabel“ oder „angemessen“ sind. Das ist kein guter Rat für Fragesteller, auch wenn es für dich Sinn ergeben mag. Du vertrittst nun mal nicht den „Normalfall“. Du schneidest sie damit mehr oder weniger gezielt von der Restwelt der Entwickler ab. Das empfinde ich als sehr kontraproduktiv und als etwas, dem man relativierend widersprechen sollte oder sogar muss.</p> <blockquote> <p><a href="https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680518#m1680518" rel="noopener noreferrer"><strong>Gebt mir ruhig auch dafür die -1</strong></a> ... "Kritik", die sich auf wilde und grob falsche Vermutungen (eher schon vorsätzlich falsche Behauptungen) darüber bezieht, was ich äußerte, kann ich nicht wirklich ernst nehmen.</p> <p>Und naturgegeben färbt das auf die Kritiker ab.</p> </blockquote> <p>Ich habe dir noch kein -1 gegeben, aber ich möchte dich dennoch ersuchen, Leute nicht zu den Lösungen mit ~1 Nutzern zu verleiten, wenn es anerkannte Alternativen mit dem Zehntausendfachen an Nutzern gibt. Da passt die Verhältnismäßigkeit nicht. Du kannst deine Variante gern präsentieren (ich finde das durchaus interessant), aber es ist einfach nicht richtig, so zu tun, als ob deine Lösung die bessere wäre. Das ist kein haltbarer Standpunkt.</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Sat, 19 Nov 16 08:02:18 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680575#m1680575 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680575#m1680575 <p>Kann wieder nicht mehr editieren. (20 Minuten reichen für mich nicht. Dazu bin ich zu exakt/mache ich zu viele Fehler. ;))</p> <blockquote> <ul> <li>Zeile 36: <code>hasErrors</code> könnte durch eine vorherige Eingabedatei den Wert 1 haben, wird hier aber auf 0 zurückgesetzt. Fehler werden dadurch potenziell verdeckt.</li> </ul> </blockquote> <p>Wobei es eine Fehlerausgabe gibt. Einwandfrei ist die Logik an der Stelle meines Erachtens dennoch nicht, weil <code>hasErrors</code> zurückgesetzt wird, obwohl der Wert später noch abgefragt wird.</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Sat, 19 Nov 16 12:37:00 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680587#m1680587 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680587#m1680587 <blockquote> <p>@Google weiß alles</p> <p>Okay, mal so als Denkanstoß:</p> <p>Hier eine Liste der von mir bemerkten Tippfehler in <a href="https://code.fastix.org/showFile.php?file=Projekte/PHP%2CBash%3ATemplate-%C3%9Cbersetzer/myTemplateToPHP.sh" rel="nofollow noopener noreferrer"><code>myTemplateToPHP.sh</code></a>, Version 1.1.2:</p> <ul> <li>Zeile 13: <code>replacementrRight</code></li> <li>Zeile 16: <code>replacementrRight</code></li> <li>Zeile 26: <code>replacementrRight</code></li> </ul> </blockquote> <p>Ok. Sind Tippfehler, die sich aber im Programmablauf nicht bemerkbar machten, weil ich <strong>an jeder Stelle</strong> <code>replacementrRight</code> statt <code>replacementRight</code> notierte. Hab es aber geändert und weil es tatsächlich Tippfehler sind möchte ich nicht verfehlen, mich für den Hinweis zu bedanken.</p> <blockquote> <ul> <li>Zeile 49: <code>Yoy</code>, <code>sedile</code></li> </ul> </blockquote> <p>Ok. 'Yoy' ist ein Tippfehler (Es muss natürlich "You" heissen!), der sich aber im Programmablauf nicht bemerkbar machte, weil er nur als Text in der informativen Ausgabe ab Ende auftritt. Und das nur nur wenn Fehler aufgetreten sind.</p> <blockquote> <p>Eine Liste der bemerkten Logikfehler oder inhaltlichen Fehler:</p> <ul> <li>Zeile 15: XSS-Angriff möglich. <code>htmlspecialchars</code> benötigt den Parameter <code>ENT_QUOTES</code> (für Platzhalter in HTML-Attributen) und eigentlich auch noch eine <code>encoding</code>-Angabe (<a href="http://php.net/manual/en/function.htmlspecialchars.php#refsect1-function.htmlspecialchars-changelog" rel="noopener noreferrer">Hintergrund</a>).</li> </ul> </blockquote> <p>Mein. Oder Ja. Das Skript kann natürlich nur das Template von Text nach PHP übersetzen. Es entsteht ein Template. Wenn man es ganz genau nimmt, dann ist es eine Frage des konkret geplantes Ablaufes, ob die, für die Ausgabe angezeigten Änderungen an Variableninhalten im Template definiert werden oder im Programm und zwar dort, wo die Daten unter Beachtung der jeweiligen Quelle in den hash "$TPL" eingefügt werden. Eine allgemeingültige Anforderung ist hier nicht formulierbar.</p> <p>Das gilt auch für den Zeichensatz. Der wird "eher nicht" im Template festgelegt, sondern zentraler. Trotzdem: Danke für den Hinweis.</p> <blockquote> <ul> <li>Zeile 30: Überschreibt nachfolgend vermutlich die Eingabedatei, falls diese nicht auf <code>.txt</code> endet.</li> </ul> </blockquote> <p>Nein. In Zeile 30 wird nur der Name der Ausgabedatei ermittelt. Und richtig: Wenn die Eingabedatei auf .php endet, dann würde diese in Zeile 33 überschrieben, genau genommen geleert. Das ist zwar auch eine Frage der Vereinbarung, aber Du hast Recht, das kann man einfach verhindern. Kommt in die Version 1.1.3. - Danke für den Hinweis.</p> <blockquote> <ul> <li>Zeile 36: <code>hasErrors</code> könnte durch eine vorherige Eingabedatei den Wert 1 haben, wird hier aber auf 0 zurückgesetzt. Fehler werden dadurch potenziell verdeckt.</li> </ul> </blockquote> <blockquote> <ul> <li>Zeile 48: <code>hasErrors</code> könnte nicht initialisiert sein.</li> </ul> </blockquote> <p>Das ist in genau einem Fall nicht initialisert, nämlich wenn keine Eingabedatei existiert. Das ist aber kein Fehler im Programmablauf, also wird nichts "geflaggt", also wird auch kein Fehler - der ja nicht auftrat - gemeldet. Trotzdem: Danke für den Hinweis.</p> <blockquote> <p>In die Ausgabe kann beliebiger PHP-Code injiziert werden.</p> </blockquote> <p>Das ist NUR unter der Annahme richtig, dass die Inhalte in $TPL 1:1 'usergeneriert' sind, z.B. durch Übernahme aus GET, POST, COOKIE, ... (oder auch immer.) Wie schon geschrieben kann und sollte man das an anderer Stelle regeln, nämlich bei der Übernahme in $TPL. Trotzdem: Danke für den Hinweis.</p> <blockquote> <ul> <li> <p>Für <code>htmlSafeMode="yes"</code>:</p> <ul> <li> <p>Eingabe:</p> <pre><code class="block">foo {{ '])?> <?php var_dump(filemtime(__FILE__)); ?> <?=($tpl[' }} bar </code></pre> </li> <li> <p>Ausgabe:</p> <pre><code class="block">foo <?=htmlspecialchars( $tpl[' '])?> <?php var_dump(filemtime(__FILE__)); ?> <?=($tpl[' '] );?> bar </code></pre> </li> </ul> </li> </ul> </blockquote> <p>Ich habe das mit</p> <pre><code class="block language-php">$tpl['FARBE'] = 'foo {{ \'])?> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token function">filemtime</span><span class="token punctuation">(</span><span class="token constant">__FILE__</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token php language-php"><span class="token delimiter important"><?=</span><span class="token punctuation">(</span><span class="token variable">$tpl</span><span class="token punctuation">[</span>\<span class="token string single-quoted-string">' }} bar'</span><span class="token punctuation">;</span> </span></code></pre> <p>in webseite.php versucht und das Template mit <code>htmlSafeMode="no"</code> übersetzt.</p> <p>Die Ausgabe lautet:</p> <pre><code class="block language-html">Kleine foo {{ '])?<span class="token entity named-entity" title=">">&gt;</span> <span class="token entity named-entity" title="<">&lt;</span>?php var_dump(filemtime(__FILE__)); ?<span class="token entity named-entity" title=">">&gt;</span> <span class="token entity named-entity" title="<">&lt;</span>?=($tpl[' }} bar Männchen stammen vom Mars. </code></pre> <p>Hast Du eventuell den visuellen Kontextwechsel durch die Darstellung im Browser nicht beachtet? Falls nicht zeige mir, was Du GENAU gemacht hast und ich entscheide dann ob es ein Future oder ein Bug ist.</p> <blockquote> <ul> <li> <p>Für <code>htmlSafeMode="no"</code>:</p> <ul> <li> <p>Eingabe:</p> <pre><code class="block">foo {{ ']?> <?php var_dump(filemtime(__FILE__)); ?> <?=$tpl[' }} bar </code></pre> </li> <li> <p>Ausgabe:</p> <pre><code class="block">foo <?=$tpl[' ']?> <?php var_dump(filemtime(__FILE__)); ?> <?=$tpl[' '];?> bar </code></pre> </li> </ul> </li> </ul> </blockquote> <p>Das habe ich mit</p> <pre><code class="block language-php">$tpl['FARBE'] = 'foo {{ \']?> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token function">filemtime</span><span class="token punctuation">(</span><span class="token constant">__FILE__</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token php language-php"><span class="token delimiter important"><?=</span><span class="token variable">$tpl</span><span class="token punctuation">[</span>\<span class="token string single-quoted-string">' }} bar'</span><span class="token punctuation">;</span> </span></code></pre> <p>versucht und das Template mit <code>htmlSafeMode="yes"</code> übersetzt.</p> <p>Ergebnis nach Aufruf mit php webseite.php:</p> <pre><code class="block">foo {{ '])?> <?php var_dump(filemtime(__FILE__)); ?> <?=($tpl[' }} bar </code></pre> <p>Nun, ich weiß ja nicht was Du vorhast. Aber so lange man das Ergebnis der Vereinigung von Daten und Template, <strong>also die Ausgabe</strong>, nicht nochmal von PHP interpretieren lässt (was wohl eines Probleme von Wordpress ist oder war) kann hier nichts passieren. Es sei denn natürlich, die Browser stellen gänzlich unerwartet von Javascript auf PHP um oder jemand holt die resultierende Webseite und lässt diese dann mit PHP interpretieren. Was auch ziemlich ungewöhnlich ist.</p> <blockquote> <p>Das war jetzt ein Code Review mit den offensichtlichen Problemen in 52 Zeilen Code (inklusive Leerzeilen und Kommentare). Das dauerte länger als 3 Sekunden, war aber dafür vermutlich auch ergiebiger.</p> </blockquote> <p>Danke für die Tippfehler und Hinweise. Was in Deiner Darstellung wie ein "richtiger" Fehler aussah konnte ich nicht nachvollziehen.</p> Klare Ansage: Lesen und keine falschen Behauptungen aufstellen Sat, 19 Nov 16 09:10:05 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680577#m1680577 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680577#m1680577 <blockquote> <blockquote> <p>Irgenwie habe ich also schon wieder das durch Tatsachen begründete Gefühl, dass ich ganz bewusst falsch verstanden werde. Das war doch deutlich formuliert.</p> </blockquote> </blockquote> <p>Ich beschränke mich auf den Kern und zwei Sätze:</p> <blockquote> <p>Schreib ruhig dein eigenes DBMS, wenn du sonst nicht ruhig schlafen kannst. Aber das ist auf sehr vielen Ebenen Quatsch, und das ist vor allem auch nichts, was man Fragestellern empfehlen sollte.</p> </blockquote> <p>WOW!</p> <p>Das muss man erst mal hinkriegen, unter meiner Aussage</p> <blockquote> <blockquote> <p>MySQL ist geradezu das Idealbeispiel dafür, dass "Oracle die Firma kauft und die Entwickler wild mit dem Armen rudernd und nicht zitierfähiges fluchend wegrennen". Und genau und nur dafür habe ich es höchst ausdrücklich als Beispiel genannt. <strong>Nicht jedoch dafür, "ein DBMS selbst schreiben zu wollen".</strong></p> </blockquote> </blockquote> <p>allerhand Zeug zu notieren und dann zu formulieren:</p> <blockquote> <p>Schreib ruhig dein eigenes DBMS, wenn du sonst nicht ruhig schlafen kannst.</p> </blockquote> <p>Ja. Reichte wohl nicht - also das dann noch mit mit der Vorhaltung garnieren, ich hätte eben dieses Vorgehen dem Fragestellern empfohlen:</p> <blockquote> <p>Aber das ist auf sehr vielen Ebenen Quatsch, und das ist vor allem auch nichts, was man Fragestellern empfehlen sollte.</p> </blockquote> <p>Wenn das dann noch unter der von mir gewählten Überschrift <em>"Klare Ansage: Lesen und keine falschen Behauptungen aufstellen"</em> stattfindet bin ich schon zu recht sauer - oder?</p> Platzhalter sind in PHP "nicht wirklich sinnvoll" Sat, 19 Nov 16 12:59:01 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680588#m1680588 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680588#m1680588 <blockquote> <blockquote> <ul> <li>Zeile 36: <code>hasErrors</code> könnte durch eine vorherige Eingabedatei den Wert 1 haben, wird hier aber auf 0 zurückgesetzt. Fehler werden dadurch potenziell verdeckt.</li> </ul> </blockquote> </blockquote> <p>Naja. Fehler werden nicht verdeckt, aber es kann am Ende nicht mehr die Datei mit Regeln für <code>sed</code> angesehen werden. Trotzdem ist es natürlich FALSCH. Die Zeile <code>hasErrors='0'</code>; habe ich also gelöscht.</p> <p>Danke für den Hinweis.</p> doppelt geschweifte klammern Sat, 19 Nov 16 23:30:52 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680619#m1680619 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680619#m1680619 <p>Hallo,</p> <p>meine frage zielte auf was anderes ab, das hier schon deutlich unterbreitet wurde. Du hast mich wohl, wie viele in dieser Runde, falsch verstanden. Liegt nicht an dir sonder an mir. Aber gute Erklärung.</p> <p>vgl MB</p> Korrektur Sat, 19 Nov 16 14:59:08 Z https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680599#m1680599 https://forum.selfhtml.org/self/2016/nov/16/doppelt-geschweifte-klammern/1680599#m1680599 <p>Falsch notiert:</p> <blockquote> <pre><code class="block bad language-text">versucht und das Template mit `htmlSafeMode="yes"` übersetzt. </code></pre> </blockquote> <p>Muss heißen:</p> <pre><code class="block good language-text">versucht und das Template mit `htmlSafeMode="no"` übersetzt. </code></pre> <p>Der Rest bleibt:</p> <blockquote> <p>Ergebnis nach Aufruf mit php webseite.php:</p> <pre><code class="block">foo {{ '])?> <?php var_dump(filemtime(__FILE__)); ?> <?=($tpl[' }} bar </code></pre> <p>Nun, ich weiß ja nicht was Du vorhast. Aber so lange man das Ergebnis der Vereinigung von Daten und Template, <strong>also die Ausgabe</strong>, nicht nochmal von PHP interpretieren lässt (was wohl eines Probleme von Wordpress ist oder war) kann hier nichts passieren. Es sei denn natürlich, die Browser stellen gänzlich unerwartet von Javascript auf PHP um oder jemand holt die resultierende Webseite und lässt diese dann mit PHP interpretieren. Was auch ziemlich ungewöhnlich ist.</p> </blockquote>