<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">

    <title type="text">wiki</title>
    <subtitle type="text">wiki</subtitle>
    <link rel="alternate" type="text/html" href="http://www.lisardo.de/wiki/" />
    <link rel="self" type="application/atom+xml" href="http://www.lisardo.de/wiki/Spezial:Recentchanges_Atom" />
    <updated>2010-08-08T17:50:39Z</updated>
    <rights>Copyright (c) 2006, info@lisardo.de</rights>
    <generator uri="http://www.pmachine.com/" version="1.6.6">ExpressionEngine</generator>
    <id>tag:lisardo.de,2010:08:08:wiki</id>


    <entry>
      <title>Cache in Extensions</title>
      <link rel="alternate" type="text/html" href="http://www.lisardo.de/wiki/Cache-in-Extensions/" />
      <id>tag:lisardo.de,2010:wiki:Cache in Extensions/89.704</id>
      <published>2010-08-08T17:50:39Z</published>
      <updated>2010-08-08T17:50:39Z</updated>
      <author>
            <name>Peter</name>
            <email>peter@linzenkirchner.de</email>
      </author>
      <content type="html"><![CDATA[
        <h3>Grundlagen</h3>

	<p>Grundsätzlich kann eine Extension als gecachtes <span class="caps">USER</span>-Objekt oder als ungecachtes <span class="caps">USER</span>_INT-Objekt eingebunden werden. Prinzipiell kann das für jede Extensions sowohl im <span class="caps">PHP</span>-Code wie auch über Typoscript bestimmt werden. </p>

	<h3>Extensions, die gecachet werden sollen</h3>

	<p>Zunächst erhalten Sie folgenden Eintrag in der ext_localconf.php. Die &#8220;1&#8221; am Ende steht für aktivierten Cache: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">t3lib_extMgm</span><span style="color: #006600">::</span><span style="color: #0000CC">addPItoST43</span><span style="color: #006600">(</span><span style="color: #0000CC">$_EXTKEY</span><span style="color: #006600">,</span><span style="color: #0000CC">‘piX</span><span style="color: #006600">/class.</span><span style="color: #0000CC">tx_myExtension_pi1</span><span style="color: #006600">.</span><span style="color: #0000CC">php’</span><span style="color: #006600">,</span><span style="color: #0000CC">‘_pi1’</span><span style="color: #006600">,</span><span style="color: #0000CC">‘list_type’</span><span style="color: #006600">,</span><span style="color: #0000CC">1</span><span style="color: #006600">); </span>
</span>
</code></div></p>

	<p>Zusätzlich muss innerhalb der Extension der cHash aktiviert werden, indem eine Klassenvariable definiert wird:</p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #006600">var </span><span style="color: #0000CC">$pi_checkCHash </span><span style="color: #006600">= </span><span style="color: #0000CC">true</span><span style="color: #006600">; </span>
</span>
</code></div></p>

	<p>Die Ausgabe des cHash ist nötig, damit für jede Paramter-Kombination ein eigener Cache-Eintrag angelegt wird.  Ohne cHash wird jeweils der erste Seitenaufruf für die gesamte Seite gechachet und die weiteren Parameter-Kombinationen ignoriert. Der cHash ist ein Hash-Wert, der aus den Parametern und dem Encryption key des Install-Tools errechnet wird. Er soll verhindern, dass über zufällig aufgerufene Parameter der Cache überflutet wird &#8211; was einer <span class="caps">DOS</span>-Attacke gleich käme. Nur gültige Parameter erzeugen einen Cache-Eintrag. </p>

	<p>Natürlich müssen die Links entsprechend erstellt werden, sinnvollerweise über die TypoLink-Funktionen von TYPO3: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">tslib_pibase</span><span style="color: #006600">.</span><span style="color: #0000CC">pi_linkTP&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #006600">( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">$str</span><span style="color: #006600">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">$urlParameters </span><span style="color: #006600">= array(), <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">$cache </span><span style="color: #006600">= </span><span style="color: #0000CC">1</span><span style="color: #006600">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">$altPageId </span><span style="color: #006600">= </span><span style="color: #0000CC">0 <br /></span><span style="color: #006600">); </span>
</span>
</code></div></p>

	<p>Weitere Beispiel im Artikel <a href="http://www.lisardo.de/wiki/Links-in-Extensions/" title="Links-in-Extensions">Links in Extensions</a>. </p>

	<h3>Dynamische Extensions ohne Cache</h3>

	<p>Extensions, die z. B. mit Formularen umgehen oder aktuelle Daten liefern sollen, dürfen nicht gecached werden. Allerdings sollte natürlich trotzdem der Rest der Seite gecachet werden, nur eben rein der Code der Extension nicht. Das kann so erreicht werden: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">t3lib_extMgm</span><span style="color: #006600">::</span><span style="color: #0000CC">addPItoST43</span><span style="color: #006600">(</span><span style="color: #0000CC">$_EXTKEY</span><span style="color: #006600">,</span><span style="color: #0000CC">‘piX</span><span style="color: #006600">/class.</span><span style="color: #0000CC">tx_myExtension_pi1</span><span style="color: #006600">.</span><span style="color: #0000CC">php’</span><span style="color: #006600">,</span><span style="color: #0000CC">‘_pi1’</span><span style="color: #006600">,</span><span style="color: #0000CC">‘list_type’</span><span style="color: #006600">,</span><span style="color: #0000CC">0</span><span style="color: #006600">); </span>
</span>
</code></div></p>

	<p>Damit wird die Extension als <span class="caps">USER</span>_INT &#8211; also als nicht cachende Extension &#8211; eingebunden. </p>

	<h3>Steuerung über TypoScript</h3>

	<p>Es ist ohne weiteres möglich, Plugins über Typoscript umzustellen von <span class="caps">USER</span> auf <span class="caps">USER</span>_INT. Mit <br />
<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">plugin</span><span style="color: #006600">.</span><span style="color: #0000CC">tx_myExt_pi1 </span><span style="color: #006600">= </span><span style="color: #0000CC">USER_INT </span>
</span>
</code></div><br />
kann ein Plugin nachträglich von <span class="caps">USER</span> auf <span class="caps">USER</span>_INT umgestellt werden. Das erlaubt Konstruktionen dieser Art: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">&#91;globalVar </span><span style="color: #006600">= </span><span style="color: #0000CC">TSFE</span><span style="color: #006600">:</span><span style="color: #0000CC">id </span><span style="color: #006600">= </span><span style="color: #0000CC">100&#93; <br />&nbsp;&nbsp;&nbsp;plugin</span><span style="color: #006600">.</span><span style="color: #0000CC">tx_tx_myExt_pi1 </span><span style="color: #006600">= </span><span style="color: #0000CC">USER_INT <br />&#91;global&#93; </span>
</span>
</code></div></p>

	<p><strong>Tipp:</strong> Diese Einstellung in der main-Function: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #006600">function </span><span style="color: #0000CC">main</span><span style="color: #006600">(</span><span style="color: #0000CC">$content</span><span style="color: #006600">, </span><span style="color: #0000CC">$conf</span><span style="color: #006600">) </span><span style="color: #0000CC">&#123;<br />&nbsp;&nbsp;&nbsp;$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">pi_USER_INT_obj </span><span style="color: #006600">= </span><span style="color: #0000CC">1</span><span style="color: #006600">;<br /><br /></span><span style="color: #0000CC">&#125; </span>
</span>
</code></div></p>

	<p>Wird oft zusätzlich empfohlen, um ein <span class="caps">USER</span>_INT-Plugin anzulegen. Meines Wissens schreibt sie auch der Extensions-Manager entsprechend rein. Ich würde das nicht empfehlen, da dadurch der TypoScript-Umschalter natürlich deaktiviert wird und die oben erwähnten Methoden nicht mehr funktionieren. </p>

	<h3>Steuerung über Flexforms</h3>

	<p>Das ist nicht so einfach und setzt einen entsprechenden <span class="caps">PHP</span>-Code im Plugin selbst voraus. Ausserdem ist es erst ab TYPO3 4.3 möglich. Dieser Code in der main-Function des (<span class="caps">USER</span>-)Plugins: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #006600">switch (</span><span style="color: #0000CC">$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">conf&#91;</span><span style="color: #CC0000">'code'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">) </span><span style="color: #0000CC">&#123; <br />&nbsp;&nbsp;&nbsp;</span><span style="color: #006600">case </span><span style="color: #CC0000">'FORM'</span><span style="color: #006600">: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">cObj</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">convertToUserIntObject</span><span style="color: #006600">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">$content </span><span style="color: #006600">.= </span><span style="color: #CC0000">'Bin jetzt ein USER_INT-Objekt und cache nicht.'</span><span style="color: #006600">; <br />&nbsp;&nbsp;&nbsp;&nbsp;break; <br />&nbsp;&nbsp;&nbsp;&nbsp;default: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">$content </span><span style="color: #006600">.= </span><span style="color: #CC0000">'Bin ein USER-Objekt und cache. '</span><span style="color: #006600">; <br />&nbsp;&nbsp;&nbsp;&nbsp;break; <br /></span><span style="color: #0000CC">&#125; </span>
</span>
</code></div></p>

	<p>schaltet automatisch bei der Auswahl von <span class="caps">FORM</span> in den Flexforms um auf ein <span class="caps">USER</span>_INT. Hier ist noch eine andere Variante, welche die <span class="caps">USER</span>/USER_INT-Eigenschaften abhängig macht von der TypoScript-Variablen &#8220;allowCaching&#8221;: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #006600">if (</span><span style="color: #0000CC">$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">cObj</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">getUserObjectType</span><span style="color: #006600">() == </span><span style="color: #0000CC">tslib_cObj</span><span style="color: #006600">::</span><span style="color: #0000CC">OBJECTTYPE_USER</span><span style="color: #006600">) </span><span style="color: #0000CC">&#123; <br />&nbsp;&nbsp;&nbsp;$content </span><span style="color: #006600">.= </span><span style="color: #CC0000">'Ich bin ein USER Objekt.&lt;br&gt;'</span><span style="color: #006600">; <br />&nbsp;&nbsp;&nbsp;if (!</span><span style="color: #0000CC">$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">conf&#91;</span><span style="color: #CC0000">'allowCaching'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">) </span><span style="color: #0000CC">&#123; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">cObj</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">convertToUserIntObject</span><span style="color: #006600">(); return </span><span style="color: #CC0000">''</span><span style="color: #006600">; <br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">&#125; <br />&#125; </span><span style="color: #006600">else </span><span style="color: #0000CC">&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;$content </span><span style="color: #006600">.= </span><span style="color: #CC0000">'Nun bin ich ein USER_INT Objekt&lt;br&gt;'</span><span style="color: #006600">; <br /></span><span style="color: #0000CC">&#125; </span>
</span>
</code></div></p>

	<p><strong>Quelle:</strong> <a href="http://danosipov.com/blog/?p=191"><span class="caps">USER</span> to <span class="caps">USER</span>_INT conversion</a>. Aber <strong>Achtung</strong>: dort stimmt die Syntax nicht! Meine hier ist richtig.  </p>

	<h3>Ausgabe eines <span class="caps">USER</span>_INT-Plugins innerhalb eines <span class="caps">USER</span>-Plugins</h3>

	<p>Machmal besteht die Notwendigkeit, innerhalb einer gecachten Extension eine einzelne Ausgabe ungecached machen zu lassen &#8211; z. B. die Ausgabe einer Zeit. Das kann man über ein kleines zusätzliches Plugin lösen, das im eigentlichen Plugin aufgerufen wird: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">$content </span><span style="color: #006600">.= </span><span style="color: #CC0000">'Normale, gechachte Ausgabe. &lt;br&gt;'</span><span style="color: #006600">; <br /><br /></span><span style="color: #0000CC">$cObj </span><span style="color: #006600">= </span><span style="color: #0000CC">t3lib_div</span><span style="color: #006600">::</span><span style="color: #0000CC">makeInstance</span><span style="color: #006600">(</span><span style="color: #CC0000">'tslib_cObj'</span><span style="color: #006600">); <br /></span><span style="color: #0000CC">$cObj</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">start</span><span style="color: #006600">(array()); <br /></span><span style="color: #0000CC">$conf2 </span><span style="color: #006600">= </span><span style="color: #0000CC">$GLOBALS&#91;</span><span style="color: #CC0000">'TSFE'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">tmpl</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">setup&#91;</span><span style="color: #CC0000">'plugin.'</span><span style="color: #0000CC">&#93;&#91;</span><span style="color: #CC0000">'tx_myExt_pi2.'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">; <br /></span><span style="color: #0000CC">$conf2&#91;</span><span style="color: #CC0000">'includeLibs'</span><span style="color: #0000CC">&#93; </span><span style="color: #006600">= </span><span style="color: #CC0000">'EXT:myExt/pi2/class.tx_test_pi2.php'</span><span style="color: #006600">; <br /></span><span style="color: #FF9900">// ungecachte Ausgabe aus einem anderen Plugin: <br /></span><span style="color: #0000CC">$content </span><span style="color: #006600">.= </span><span style="color: #0000CC">$cObj</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">cObjGetSingle</span><span style="color: #006600">(</span><span style="color: #CC0000">'USER_INT'</span><span style="color: #006600">,</span><span style="color: #0000CC">$conf2</span><span style="color: #006600">); <br /><br /></span><span style="color: #0000CC">$content </span><span style="color: #006600">.= </span><span style="color: #CC0000">'&lt;br&gt; und wieder die gecachte Ausgabe ... '</span><span style="color: #006600">; </span>
</span>
</code></div></p>

	<p><strong>Quelle:</strong> das Buch &#8220;Extension entwickeln&#8221; von Dimitry Dupolev, S. 129. </p>

	<h3>Weiterführende Links
	<ul>
		<li><a href="http://www.typo3-scout.de/2008/05/29/caching-in-typo3-extensions/">Caching in TYPO3-Extensions</a></li>
		<li><a href="http://dmitry-dulepov.com/article/missing-chash-make-plugin-user-int.html"><span class="caps">MISSING</span> <span class="caps">CHASH</span>? <span class="caps">MAKE</span> <span class="caps">PLUGIN</span> <span class="caps">USER</span>_INT!</a></li>
		<li><a href="http://www.sk-typo3.de/Richtiges-Cachen-mit-pi_base.188.0.html">Richtiges Cachen mit pi_base</a></li>
		<li><a href="http://danosipov.com/blog/?p=191"><span class="caps">USER</span> to <span class="caps">USER</span>_INT conversion</a></li>
	</ul></h3>

	<p><a href="http://www.lisardo.de/wiki/Category:Typo3::Extensions::Programmierung/" title="Category:Typo3::Extensions::Programmierung" class="noArticle">Category:Typo3 -&gt; Extensions -&gt; Programmierung</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Sprachumschaltung</title>
      <link rel="alternate" type="text/html" href="http://www.lisardo.de/wiki/Sprachumschaltung/" />
      <id>tag:lisardo.de,2010:wiki:Sprachumschaltung/22.699</id>
      <published>2010-08-06T17:53:56Z</published>
      <updated>2010-08-06T17:53:56Z</updated>
      <author>
            <name>Peter</name>
            <email>peter@linzenkirchner.de</email>
      </author>
      <content type="html"><![CDATA[
        <p>Die Sprachumschaltung per TypoScript hängt die <span class="caps">GET</span>-Variable L zweimal an die Sprachumschalter. Bisher kein Problem, da die Reihenfolge richtig war, ab Typo3 sind die beiden aber in der falschen falschen Reihenfolge. </p>

	<p>Eine Lösung mit einem modifizierten <span class="caps">PHP</span>-Skript ist im Beitrag <a href="http://www.lisardo.de/wiki/Typoscript-Konfiguration/" title="Typoscript-Konfiguration">Typoscript Konfiguration</a> zu finden. </p>

	<h3>[Update]</h3>

	<p>Offensichtlich gibt es einen TypoScript-Parameter, der das doppelte Setzen des L-Parameters verhindert. </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">config</span><span style="color: #006600">.</span><span style="color: #0000CC">linkVars </span><span style="color: #006600">= </span><span style="color: #0000CC">L<br /> config</span><span style="color: #006600">.</span><span style="color: #0000CC">uniqueLinkVars </span><span style="color: #006600">= </span><span style="color: #0000CC">1 </span>
</span>
</code></div></p>

	<p>Noch nicht getestet, aber sollte wohl funktionieren. </p>

	<h3>Weiterführende Literatur</h3>

	<p>Laborenz et. al: Typo3 4.0. Kapitel Mehrsprachige Websites, ab S. 435. <br />
<a href="http://www.sk-typo3.de/Sprachumschaltung-mit-Links.210.0.html">Artikel von Steffen Kamper, Sprachumschaltung mit TypoScript</a><br />
<a href="http://typo3blogger.de/sprach-menu/">Sprach-Menü vom Typo3 Blogger</a><br />
<a href="http://www.typo3wizard.com/en/snippets/general-config/tip-a-friend-link-mit-typoscript-erstellen.html">Tip-A-Friend link generated using Typoscript</a></p>

	<h3>Update</h3>

	<p>Es ist wesentlich sinnvoller und auch einfacher, ein Sprachmenü aufzubauen. Siehe Artikel <a href="http://www.lisardo.de/wiki/Sprachmenue/" title="Sprachmenue">Sprachmenue</a>. </p>

	<p><a href="http://www.lisardo.de/wiki/Category:Typo3::Sprachen/" title="Category:Typo3::Sprachen" class="noArticle">Category:Typo3 -&gt; Sprachen</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Sprachmenue</title>
      <link rel="alternate" type="text/html" href="http://www.lisardo.de/wiki/Sprachmenue/" />
      <id>tag:lisardo.de,2010:wiki:Sprachmenue/91.698</id>
      <published>2010-08-06T17:52:44Z</published>
      <updated>2010-08-06T17:52:44Z</updated>
      <author>
            <name>Peter</name>
            <email>peter@linzenkirchner.de</email>
      </author>
      <content type="html"><![CDATA[
        <p>Als Sprachumschalter wird sinnvollerweise das Sprachmenü von Typoscript benutzt. Hier ein Beispiel, das einen Sprachumschalter einbaut, der zwischen zwei Sprachen wechselt und dazu keine Fahnen benutzt, sondern Text. </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">temp</span><span style="color: #006600">.</span><span style="color: #0000CC">nav_top_intern &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;20 </span><span style="color: #006600">= </span><span style="color: #0000CC">HMENU<br />&nbsp;&nbsp;&nbsp;&nbsp;20 &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;special </span><span style="color: #006600">= </span><span style="color: #0000CC">language<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;special</span><span style="color: #006600">.</span><span style="color: #0000CC">value </span><span style="color: #006600">= </span><span style="color: #0000CC">1</span><span style="color: #006600">,</span><span style="color: #0000CC">0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 </span><span style="color: #006600">= </span><span style="color: #0000CC">TMENU<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NO </span><span style="color: #006600">= </span><span style="color: #0000CC">1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NO</span><span style="color: #006600">.</span><span style="color: #0000CC">linkWrap </span><span style="color: #006600">= |&amp;</span><span style="color: #0000CC">nbsp</span><span style="color: #006600">;&amp;</span><span style="color: #FF9900">#124;&amp;nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">NO</span><span style="color: #006600">.</span><span style="color: #0000CC">stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">cObject </span><span style="color: #006600">= </span><span style="color: #0000CC">TEXT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NO</span><span style="color: #006600">.</span><span style="color: #0000CC">stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">cObject &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value </span><span style="color: #006600">= </span><span style="color: #0000CC">Englisch </span><span style="color: #006600">|| </span><span style="color: #0000CC">German<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USERDEF1 </span><span style="color: #006600">&lt; .</span><span style="color: #0000CC">NO<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USERDEF1 &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doNotLinkIt </span><span style="color: #006600">= </span><span style="color: #0000CC">1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">typolink</span><span style="color: #006600">.</span><span style="color: #0000CC">parameter </span><span style="color: #006600">= </span><span style="color: #0000CC">399<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">typolink</span><span style="color: #006600">.</span><span style="color: #0000CC">additionalParams </span><span style="color: #006600">= &amp;</span><span style="color: #0000CC">L</span><span style="color: #006600">=</span><span style="color: #0000CC">1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&#125; </span>
</span>
</code></div></p>

	<p>Dieses Menü hat den Vorteil, dass bei einer fehlenden Übersetzung einer Seite auf eine selbst zu definierende Startseite gesprungen werden kann.</p>

	<p>Man kann es auch so aufbauen, dass ein Wechsel zwischen den Textausgabe erfolgt, also in den deutschen Seiten wird nur Englisch als Link ausgegeben und umgekehrt. </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">temp</span><span style="color: #006600">.</span><span style="color: #0000CC">nav_top_intern &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;20 </span><span style="color: #006600">= </span><span style="color: #0000CC">HMENU<br />&nbsp;&nbsp;&nbsp;&nbsp;20 &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;special </span><span style="color: #006600">= </span><span style="color: #0000CC">language<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;special</span><span style="color: #006600">.</span><span style="color: #0000CC">value </span><span style="color: #006600">= </span><span style="color: #0000CC">1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 </span><span style="color: #006600">= </span><span style="color: #0000CC">TMENU<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NO </span><span style="color: #006600">= </span><span style="color: #0000CC">1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NO</span><span style="color: #006600">.</span><span style="color: #0000CC">linkWrap </span><span style="color: #006600">= |&amp;</span><span style="color: #0000CC">nbsp</span><span style="color: #006600">;&amp;</span><span style="color: #FF9900">#124;&amp;nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">NO</span><span style="color: #006600">.</span><span style="color: #0000CC">stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">cObject </span><span style="color: #006600">= </span><span style="color: #0000CC">TEXT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NO</span><span style="color: #006600">.</span><span style="color: #0000CC">stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">cObject &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value </span><span style="color: #006600">= </span><span style="color: #0000CC">English<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USERDEF1 </span><span style="color: #006600">&lt; .</span><span style="color: #0000CC">NO<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;USERDEF1 &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doNotLinkIt </span><span style="color: #006600">= </span><span style="color: #0000CC">1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">typolink</span><span style="color: #006600">.</span><span style="color: #0000CC">parameter </span><span style="color: #006600">= </span><span style="color: #0000CC">399<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">typolink</span><span style="color: #006600">.</span><span style="color: #0000CC">additionalParams </span><span style="color: #006600">= &amp;</span><span style="color: #0000CC">L</span><span style="color: #006600">=</span><span style="color: #0000CC">0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&#125;<br /><br />&#91;globalVar </span><span style="color: #006600">= </span><span style="color: #0000CC">GP</span><span style="color: #006600">:</span><span style="color: #0000CC">L </span><span style="color: #006600">= </span><span style="color: #0000CC">1&#93;<br /><br /></span><span style="color: #FF9900"># Kopfmenü mit Sprachumschaltung. <br /></span><span style="color: #0000CC">temp</span><span style="color: #006600">.</span><span style="color: #0000CC">nav_top_intern &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;20.special</span><span style="color: #006600">.</span><span style="color: #0000CC">value </span><span style="color: #006600">= </span><span style="color: #0000CC">0<br />&nbsp;&nbsp;&nbsp;&nbsp;20.1</span><span style="color: #006600">.</span><span style="color: #0000CC">NO</span><span style="color: #006600">.</span><span style="color: #0000CC">stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">cObject</span><span style="color: #006600">.</span><span style="color: #0000CC">value </span><span style="color: #006600">= </span><span style="color: #0000CC">Deutsch<br />&nbsp;&nbsp;&nbsp;&nbsp;20.1</span><span style="color: #006600">.</span><span style="color: #0000CC">USERDEF1</span><span style="color: #006600">.</span><span style="color: #0000CC">stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">typolink</span><span style="color: #006600">.</span><span style="color: #0000CC">additionalParams </span><span style="color: #006600">= &amp;</span><span style="color: #0000CC">L</span><span style="color: #006600">=</span><span style="color: #0000CC">0<br />&#125;<br /><br />&#91;global&#93; </span>
</span>
</code></div></p>

	<h3>Weiterführende Links</h3>

	<ul>
		<li><a href="http://www.typo3.net/tsref/cobject/hmenu/">Typoscript-Referenz</a> (Abschnitt &#8220;language&#8221; unter Rubrik &#8220;special&#8221;)</li>
	</ul>

	<p><a href="http://www.lisardo.de/wiki/Category:Typo3::Sprachen/" title="Category:Typo3::Sprachen" class="noArticle">Category:Typo3 -&gt; Sprachen</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Download Link als Referenz</title>
      <link rel="alternate" type="text/html" href="http://www.lisardo.de/wiki/Download-Link-als-Referenz/" />
      <id>tag:lisardo.de,2010:wiki:Download Link als Referenz/90.693</id>
      <published>2010-08-05T12:30:55Z</published>
      <updated>2010-08-05T12:30:55Z</updated>
      <author>
            <name>Peter</name>
            <email>peter@linzenkirchner.de</email>
      </author>
      <content type="html"><![CDATA[
        <p>In eigenen Extensions gibt es eine einfache Möglichkeit zu verhindern, dass beim Einbinden von Dateien für den Download &#8211; zum Beispiel aus einem Unterordner von fileadmin &#8211; diese Dateien nochmals in den /uploads/-Ordner kopiert werden. Dazu muss in der tca.php der internal_type von file auf file_refence umgestellt werden:</p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #CC0000">'file' </span><span style="color: #006600">=&gt; array (&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'exclude' </span><span style="color: #006600">=&gt; </span><span style="color: #0000CC">0</span><span style="color: #006600">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'label' </span><span style="color: #006600">=&gt; </span><span style="color: #CC0000">'LLL:EXT:MyExtension/locallang_db.xml:tx_myExtension.file'</span><span style="color: #006600">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'config' </span><span style="color: #006600">=&gt; array (<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'type' </span><span style="color: #006600">=&gt; </span><span style="color: #CC0000">'group'</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF9900">## hier umstellen von file auf file_refence: ######<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'internal_type' </span><span style="color: #006600">=&gt; </span><span style="color: #CC0000">'file_reference'</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'allowed' </span><span style="color: #006600">=&gt; </span><span style="color: #CC0000">''</span><span style="color: #006600">,&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'disallowed' </span><span style="color: #006600">=&gt; </span><span style="color: #CC0000">'php,php3'</span><span style="color: #006600">,&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'max_size' </span><span style="color: #006600">=&gt; </span><span style="color: #0000CC">$GLOBALS&#91;</span><span style="color: #CC0000">'TYPO3_CONF_VARS'</span><span style="color: #0000CC">&#93;&#91;</span><span style="color: #CC0000">'BE'</span><span style="color: #0000CC">&#93;&#91;</span><span style="color: #CC0000">'maxFileSize'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">,&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'uploadfolder' </span><span style="color: #006600">=&gt; </span><span style="color: #CC0000">'uploads/myExtension'</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'size' </span><span style="color: #006600">=&gt; </span><span style="color: #0000CC">1</span><span style="color: #006600">,&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'minitems' </span><span style="color: #006600">=&gt; </span><span style="color: #0000CC">0</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'maxitems' </span><span style="color: #006600">=&gt; </span><span style="color: #0000CC">1</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;)<br />), </span>
</span>
</code></div></p>

	<p>Dadurch wird nicht mehr der reine Dateiname in der Datenbank gespeichert sondern der komplette Pfad auf die Datei. Natürlich muss das bei der weiteren Verarbeitung der Datei auch entsprechend berücksichtigt werden. </p>

	<h3>Weiterführende Links
	<ul>
		<li><a href="http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.3.0/view/4/2/">Typo3 <span class="caps">API</span> Dokumentation</a> &#8211; darin Stichwort internal_type.</li>
	</ul></h3>

	<p><a href="http://www.lisardo.de/wiki/Category:Typo3::Extensions::Programmierung/" title="Category:Typo3::Extensions::Programmierung" class="noArticle">Category:Typo3 -&gt; Extensions -&gt; Programmierung</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Sichere Extensions</title>
      <link rel="alternate" type="text/html" href="http://www.lisardo.de/wiki/Sichere-Extensions/" />
      <id>tag:lisardo.de,2010:wiki:Sichere Extensions/88.685</id>
      <published>2010-07-31T21:04:44Z</published>
      <updated>2010-07-31T21:04:44Z</updated>
      <author>
            <name>Peter</name>
            <email>peter@linzenkirchner.de</email>
      </author>
      <content type="html"><![CDATA[
        <p>Ein paar Tipps zum Absichern eigener Extensions. </p>

	<h3>TYPO3-<span class="caps">API</span> für Datenbank-Zugriffe</h3>

	<p>Generell sollte die TYPO3-<span class="caps">API</span> für alle Datenbankzugriffe verwendet werden. Diese sorgt unter anderem für das nötige Quotieren der Eingaben. </p>

	<p>Wichtig sind hier vor allem diese beiden Methoden: <br />
<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">$GLOBALS&#91;</span><span style="color: #CC0000">'TYPO3_DB'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">fullQuoteStr</span><span style="color: #006600">( </span><span style="color: #0000CC">$str</span><span style="color: #006600">, </span><span style="color: #0000CC">$table </span><span style="color: #006600">)<br /></span><span style="color: #0000CC">$GLOBALS&#91;</span><span style="color: #CC0000">'TYPO3_DB'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">fullQuoteArray</span><span style="color: #006600">( </span><span style="color: #0000CC">$arr</span><span style="color: #006600">, </span><span style="color: #0000CC">$table</span><span style="color: #006600">, </span><span style="color: #0000CC">$noQuote </span><span style="color: #006600">= </span><span style="color: #0000CC">FALSE </span><span style="color: #006600">); </span>
</span>
</code></div></p>

	<p>Näheres im Abschnitt <a href="http://www.lisardo.de/wiki/Datenbankabfragen/" title="Datenbankabfragen">Datenbankabfragen</a>. </p>

	<h3>Einige Methoden der Klasse t3lib_div</h3>

	<p>Die Methoden der Klassse t3lib_div werden statisch aufgerufen. </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #FF9900">// Entfernt gefährlichen Code, Rückgabewert der bereinigte String<br /></span><span style="color: #0000CC">t3lib_div</span><span style="color: #006600">::</span><span style="color: #0000CC">removeXSS</span><span style="color: #006600">(</span><span style="color: #0000CC">$string</span><span style="color: #006600">)<br /></span><span style="color: #FF9900">// Gültige E-Mail: Rüpckgabewert true/false<br /></span><span style="color: #0000CC">t3lib_div</span><span style="color: #006600">::</span><span style="color: #0000CC">validEmail</span><span style="color: #006600">(</span><span style="color: #0000CC">$email</span><span style="color: #006600">)<br /></span><span style="color: #FF9900">// Testet auf gültige URL, Rückgabewert tru/false<br /></span><span style="color: #0000CC">t3lib_div</span><span style="color: #006600">::</span><span style="color: #0000CC">isValidUrl</span><span style="color: #006600">(</span><span style="color: #0000CC">$sanitizedUrl</span><span style="color: #006600">) </span>
</span>
</code></div></p>

	<h3>Übergabeparameter</h3>

	<p>Alle <span class="caps">GET</span>- und <span class="caps">POST</span>-Variablen sollten über die entsprechenden Funktionen der TYPO3-<span class="caps">API</span> angesprochen werden: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #FF9900">// Übernahme der Parameter mit Namensindex der Extension: <br /></span><span style="color: #0000CC">$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">piVars&#91;</span><span style="color: #CC0000">'parameter'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">; <br /></span><span style="color: #FF9900">// Wenn das nicht möglich ist, dann so: <br /></span><span style="color: #0000CC">t3lib_div</span><span style="color: #006600">::</span><span style="color: #0000CC">_GP </span><span style="color: #006600">( </span><span style="color: #0000CC">$var </span><span style="color: #006600">);<br /></span><span style="color: #FF9900">// oder getrennt nach GET / POST<br /></span><span style="color: #0000CC">t3lib_div</span><span style="color: #006600">::</span><span style="color: #0000CC">_GET </span><span style="color: #006600">( </span><span style="color: #0000CC">$var </span><span style="color: #006600">);<br /></span><span style="color: #0000CC">t3lib_div</span><span style="color: #006600">::</span><span style="color: #0000CC">_POST </span><span style="color: #006600">( </span><span style="color: #0000CC">$var </span><span style="color: #006600">); </span>
</span>
</code></div></p>

	<h3>Wichtige <span class="caps">PHP</span>-Befehle</h3>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #FF9900">// Kürzen eines UTF-8-Strings<br /></span><span style="color: #0000CC">mb_substr</span><span style="color: #006600">( </span><span style="color: #0000CC">$string</span><span style="color: #006600">, </span><span style="color: #0000CC">0</span><span style="color: #006600">, </span><span style="color: #0000CC">50 </span><span style="color: #006600">); <br /></span><span style="color: #FF9900">// Länge eines UTF-8-Strings prüfen<br /></span><span style="color: #0000CC">mb_strlen</span><span style="color: #006600">( </span><span style="color: #0000CC">$string </span><span style="color: #006600">); <br /></span><span style="color: #FF9900">// Integer erzwingen<br /></span><span style="color: #0000CC">intval</span><span style="color: #006600">( </span><span style="color: #0000CC">$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">piVars&#91;</span><span style="color: #CC0000">'wert'</span><span style="color: #0000CC">&#93; </span><span style="color: #006600">); <br /></span><span style="color: #FF9900">// Alle Tags aus einem String entfernen: <br /></span><span style="color: #0000CC">strip_tags</span><span style="color: #006600">( </span><span style="color: #0000CC">$string </span><span style="color: #006600">); <br /></span><span style="color: #FF9900">// einige Tags erlauben (Achtung: die erlaubten Tags können Parameter enthalten!)<br /></span><span style="color: #0000CC">strip_tags</span><span style="color: #006600">( </span><span style="color: #0000CC">$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">piVars&#91;</span><span style="color: #CC0000">'wert'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">, </span><span style="color: #CC0000">'&lt;em&gt;&lt;i&gt;' </span><span style="color: #006600">)<br /></span><span style="color: #FF9900">// Tags in Entities umwandeln: <br /></span><span style="color: #0000CC">htmlspecialchars</span><span style="color: #006600">( </span><span style="color: #0000CC">$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">piVars&#91;</span><span style="color: #CC0000">'wert'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">) </span>
</span>
</code></div></p>

	<h3>Datenfilter &#8211; neue Möglichkeiten mit PHP5</h3>

	<p>Diese Datenfilter werden in TYPO3 seit einigen Versionen ebenfalls eingesetzt. Einige kleine Anwendungsbeispiele: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #FF9900">// Test auf korrekte URL<br /></span><span style="color: #0000CC">$url </span><span style="color: #006600">= </span><span style="color: #CC0000">'http://www.lisardo.de'</span><span style="color: #006600">; <br />if ( @</span><span style="color: #0000CC">filter_var</span><span style="color: #006600">(</span><span style="color: #0000CC">$url</span><span style="color: #006600">, </span><span style="color: #0000CC">FILTER_VALIDATE_URL</span><span style="color: #006600">) === </span><span style="color: #0000CC">FALSE</span><span style="color: #006600">) </span><span style="color: #0000CC">&#123; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #006600">echo </span><span style="color: #0000CC">$url</span><span style="color: #006600">.</span><span style="color: #CC0000">' falsch'</span><span style="color: #006600">; <br /></span><span style="color: #0000CC">&#125; </span><span style="color: #006600">else </span><span style="color: #0000CC">&#123; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #006600">echo </span><span style="color: #0000CC">$url</span><span style="color: #006600">.</span><span style="color: #CC0000">' korrekt'</span><span style="color: #006600">; <br /></span><span style="color: #0000CC">&#125; <br /></span><span style="color: #FF9900">// oder ein Test auf korrekte E-Mail: <br /></span><span style="color: #006600">if(!</span><span style="color: #0000CC">filter_var</span><span style="color: #006600">(</span><span style="color: #CC0000">"someone@lisardo...de"</span><span style="color: #006600">, </span><span style="color: #0000CC">FILTER_VALIDATE_EMAIL</span><span style="color: #006600">)) </span><span style="color: #0000CC">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #006600">echo(</span><span style="color: #CC0000">"E-mail falsch"</span><span style="color: #006600">);<br /></span><span style="color: #0000CC">&#125;<br /></span><span style="color: #006600">else </span><span style="color: #0000CC">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #006600">echo(</span><span style="color: #CC0000">"E-mail korrekt"</span><span style="color: #006600">);<br /></span><span style="color: #0000CC">&#125;<br /></span><span style="color: #FF9900">// Oder ein Test ob eine POST-Variable namens "mail" eine gültige E-Mail enthält: <br /></span><span style="color: #006600">if (!</span><span style="color: #0000CC">filter_input</span><span style="color: #006600">(</span><span style="color: #0000CC">INPUT_POST</span><span style="color: #006600">, </span><span style="color: #CC0000">'email'</span><span style="color: #006600">, </span><span style="color: #0000CC">FILTER_VALIDATE_EMAIL</span><span style="color: #006600">)) </span><span style="color: #0000CC">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #006600">echo </span><span style="color: #CC0000">"E-Mail ist falsch"</span><span style="color: #006600">;<br /></span><span style="color: #0000CC">&#125;<br /></span><span style="color: #006600">else </span><span style="color: #0000CC">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #006600">echo </span><span style="color: #CC0000">"E-Mail korrekt"</span><span style="color: #006600">;<br /></span><span style="color: #0000CC">&#125; </span>
</span>
</code></div></p>

	<p>Ein schöner Überblick über alle Filter mit Beispielcode ist bei <a href="http://www.w3schools.com/PHP/php_ref_filter.asp">w3schools, <span class="caps">PHP</span> Filter Functions</a> zu finden. eine genaue Erläuterung im offiziellen <a href="http://de.php.net/manual/de/book.filter.php"><span class="caps">PHP</span>-Manual, Datenfilterung</a></p>

	<h3>Weiterführende Links
	<ul>
		<li><a href="http://t3n.de/magazin/typo3-extensions-absichern-sicherheitslucken-eigenen-221198/1/">TYPO3-Extensions absichern</a></li>
		<li><a href="http://www.typo3-unleashed.net/typo3apidocs/latest/">TYPO3 <span class="caps">API</span> Dokumentation</a></li>
		<li><a href="http://de.php.net/manual/de/book.filter.php">Datenfilterung in <span class="caps">PHP</span></a></li>
	</ul></h3>

	<p><a href="http://www.lisardo.de/wiki/Category:Typo3::Extensions::Programmierung/" title="Category:Typo3::Extensions::Programmierung" class="noArticle">Category:Typo3 -&gt; Extensions -&gt; Programmierung</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Custom Tags im RTE</title>
      <link rel="alternate" type="text/html" href="http://www.lisardo.de/wiki/Custom-Tags-im-RTE/" />
      <id>tag:lisardo.de,2010:wiki:Custom Tags im RTE/74.674</id>
      <published>2010-07-20T20:02:47Z</published>
      <updated>2010-07-20T20:02:47Z</updated>
      <author>
            <name>Peter</name>
            <email>peter@linzenkirchner.de</email>
      </author>
      <content type="html"><![CDATA[
        <h2>Eigene Tags im <span class="caps">RTE</span></h2>

	<p>In der Grundkonfiguration entfernt der <span class="caps">RTE</span> alle nicht erwünschten Tags. Um eigene Tags zu ermöglichen, muss der Konfiguration des <span class="caps">RTE</span> folgendes hinzugefügt werden: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">RTE</span><span style="color: #006600">.default.</span><span style="color: #0000CC">proc</span><span style="color: #006600">.</span><span style="color: #0000CC">allowTags </span><span style="color: #006600">:= </span><span style="color: #0000CC">addToList</span><span style="color: #006600">(</span><span style="color: #0000CC">sondertag</span><span style="color: #006600">)<br /></span><span style="color: #0000CC">RTE</span><span style="color: #006600">.default.</span><span style="color: #0000CC">proc</span><span style="color: #006600">.</span><span style="color: #0000CC">allowTagsOutside </span><span style="color: #006600">:= </span><span style="color: #0000CC">addToList</span><span style="color: #006600">(</span><span style="color: #0000CC">sondertag</span><span style="color: #006600">)<br /></span><span style="color: #0000CC">RTE</span><span style="color: #006600">.default.</span><span style="color: #0000CC">proc</span><span style="color: #006600">.</span><span style="color: #0000CC">entryHTMLparser_db</span><span style="color: #006600">.</span><span style="color: #0000CC">allowTags </span><span style="color: #006600">&lt; </span><span style="color: #0000CC">RTE</span><span style="color: #006600">.default.</span><span style="color: #0000CC">proc</span><span style="color: #006600">.</span><span style="color: #0000CC">allowTags </span>
</span>
</code></div></p>

	<p>Anstatt der Schreibweise := addToList(sondertag) können natürlich auch alle Tags aufgeführt werden, z. B. so: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">RTE</span><span style="color: #006600">.default.</span><span style="color: #0000CC">proc &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allowTags </span><span style="color: #006600">( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">a</span><span style="color: #006600">,</span><span style="color: #0000CC">abbr</span><span style="color: #006600">,</span><span style="color: #0000CC">acronym</span><span style="color: #006600">,</span><span style="color: #0000CC">b</span><span style="color: #006600">,</span><span style="color: #0000CC">bdo</span><span style="color: #006600">,</span><span style="color: #0000CC">blockquote</span><span style="color: #006600">,</span><span style="color: #0000CC">br</span><span style="color: #006600">,</span><span style="color: #0000CC">cite</span><span style="color: #006600">,</span><span style="color: #0000CC">code</span><span style="color: #006600">,</span><span style="color: #0000CC">col</span><span style="color: #006600">,</span><span style="color: #0000CC">colgroup</span><span style="color: #006600">,</span><span style="color: #0000CC">del</span><span style="color: #006600">,</span><span style="color: #0000CC">dfn</span><span style="color: #006600">,</span><span style="color: #0000CC">div</span><span style="color: #006600">,</span><span style="color: #0000CC">em</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">h1</span><span style="color: #006600">,</span><span style="color: #0000CC">h2</span><span style="color: #006600">,</span><span style="color: #0000CC">h3</span><span style="color: #006600">,</span><span style="color: #0000CC">h4</span><span style="color: #006600">,</span><span style="color: #0000CC">h5</span><span style="color: #006600">,</span><span style="color: #0000CC">h6</span><span style="color: #006600">,</span><span style="color: #0000CC">hr</span><span style="color: #006600">,</span><span style="color: #0000CC">i</span><span style="color: #006600">,</span><span style="color: #0000CC">img</span><span style="color: #006600">,</span><span style="color: #0000CC">li</span><span style="color: #006600">,</span><span style="color: #0000CC">ol</span><span style="color: #006600">,</span><span style="color: #0000CC">p</span><span style="color: #006600">,</span><span style="color: #0000CC">span</span><span style="color: #006600">,</span><span style="color: #0000CC">strike</span><span style="color: #006600">,</span><span style="color: #0000CC">strong</span><span style="color: #006600">,</span><span style="color: #0000CC">sub</span><span style="color: #006600">,</span><span style="color: #0000CC">sup</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">table</span><span style="color: #006600">,</span><span style="color: #0000CC">thead</span><span style="color: #006600">,</span><span style="color: #0000CC">tbody</span><span style="color: #006600">,</span><span style="color: #0000CC">tfoot</span><span style="color: #006600">,</span><span style="color: #0000CC">td</span><span style="color: #006600">,</span><span style="color: #0000CC">tr</span><span style="color: #006600">,</span><span style="color: #0000CC">th</span><span style="color: #006600">,</span><span style="color: #0000CC">ul</span><span style="color: #006600">,</span><span style="color: #0000CC">sondertag</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br /></span><span style="color: #0000CC">&#125; </span>
</span>
</code></div></p>

	<p>Das ist natürlich umständlicher, aber man weiss genau, was man erlaubt hat und was nicht.</p>

	<p>Damit der Tag im Frontend ausgegeben wird, muss zusätzlich im TypoScript des Templates noch folgendes hinzugefügt werden: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">lib</span><span style="color: #006600">.</span><span style="color: #0000CC">parseFunc_RTE</span><span style="color: #006600">.</span><span style="color: #0000CC">allowTags </span><span style="color: #006600">:= </span><span style="color: #0000CC">addToList</span><span style="color: #006600">(</span><span style="color: #0000CC">sondertag</span><span style="color: #006600">) </span>
</span>
</code></div></p>

	<p>Beziehungsweise für alle Texteingabefelder, die nicht den <span class="caps">RTE</span> benutzen: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">lib</span><span style="color: #006600">.</span><span style="color: #0000CC">parseFunc</span><span style="color: #006600">.</span><span style="color: #0000CC">allowTags </span><span style="color: #006600">:= </span><span style="color: #0000CC">addToList</span><span style="color: #006600">(</span><span style="color: #0000CC">sondertag</span><span style="color: #006600">) </span>
</span>
</code></div></p>

	<p>In der Regel wird man aber den eigenen Tag nicht im Frontend ausgeben wollen, sondern man möchte ihn auf eine bestimmte &#8211; individuelle &#8211; Art parsen. Das kann mit Hilfe eines eigenen <span class="caps">PHP</span>-Skripts erfolgen oder über eine TypoScript-Konfiguration. </p>

	<p>Für ein eigenes <span class="caps">PHP</span>-Skript kann man eine eine Extension anlegen und das hier ins Setup des TypoScript-Templates schreiben: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #FF9900"># eigenes PHP-Script: <br /></span><span style="color: #0000CC">lib</span><span style="color: #006600">.</span><span style="color: #0000CC">parseFunc</span><span style="color: #006600">.</span><span style="color: #0000CC">tags</span><span style="color: #006600">.</span><span style="color: #0000CC">sondertag </span><span style="color: #006600">= &lt; </span><span style="color: #0000CC">plugin</span><span style="color: #006600">.</span><span style="color: #0000CC">tx_eigenExtension_pi1 </span>
</span>
</code></div></p>

	<p>Man kann aber auch im Kickstarter eine Extension anlegen, die sich im das Parsen eines einzigen Tags kümmert. In der Auswahl der Frontendplugins gibt es am Ende der Liste die Option, einen Custom Tag zu verarbeiten. In diesem Fall muss nichts mehr ins Setup geschrieben werden, da die Einbindung das localconf der neuen Extension übernimmt. </p>

	<p>Oder man geht komplett über TypoScript, zum Beispiel so:   </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #FF9900"># über TS<br /></span><span style="color: #0000CC">lib</span><span style="color: #006600">.</span><span style="color: #0000CC">parseFunc_RTE</span><span style="color: #006600">.</span><span style="color: #0000CC">tags</span><span style="color: #006600">.</span><span style="color: #0000CC">myTag </span><span style="color: #006600">= </span><span style="color: #0000CC">TEXT<br />lib</span><span style="color: #006600">.</span><span style="color: #0000CC">parseFunc_RTE</span><span style="color: #006600">.</span><span style="color: #0000CC">tags</span><span style="color: #006600">.</span><span style="color: #0000CC">myTag &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF9900"># mit current=1 enthält man den aktuellen Inhalt des Tags<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">current </span><span style="color: #006600">= </span><span style="color: #0000CC">1<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF9900"># eigenes wrap, z. B. für Boxen<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">wrap </span><span style="color: #006600">(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000CC">div </span><span style="color: #006600">class=</span><span style="color: #CC0000">"box"</span><span style="color: #006600">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000CC">div </span><span style="color: #006600">class=</span><span style="color: #CC0000">"top"</span><span style="color: #006600">&gt;&lt;/</span><span style="color: #0000CC">div</span><span style="color: #006600">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000CC">div </span><span style="color: #006600">class=</span><span style="color: #CC0000">"center"</span><span style="color: #006600">&gt;|&lt;/</span><span style="color: #0000CC">div</span><span style="color: #006600">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000CC">div </span><span style="color: #006600">class=</span><span style="color: #CC0000">"bottom"</span><span style="color: #006600">&gt;&lt;/</span><span style="color: #0000CC">div</span><span style="color: #006600">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</span><span style="color: #0000CC">div</span><span style="color: #006600">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF9900"># Leerzeilen vor und nach dem Inhalt des Tags entfernen<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">stripNL </span><span style="color: #006600">= </span><span style="color: #0000CC">1<br />&#125; </span>
</span>
</code></div></p>

	<h3>Einfügen über User-Elemente</h3>

	<p>Eigene <span class="caps">HTML</span>-Tags zu erlauben ist natürlich nur der erste Schritt &#8211; wir müssen es den Redakteuren noch ermöglichen, diese auch einzugeben. Normalerweise werden diese Tags nämlich bei der Eingabe bereits in Entities umgewandelt. Man könnte natürlich auf die <span class="caps">HTML</span>-Eingabe umschalten oder den <span class="caps">RTE</span> vorübergehen deaktivieren, aber das ist eigentlich nicht zumutbar. </p>

	<p>Wir können es aber über eine eigene Bibliothek mit User-Elementen ermöglichen. </p>

	<p>Zuerst muss das »user«-Werkzeug erlaubt werden. Dazu muss es entweder unter »showButtons« hinzugefügt oder bei »hideButtons« ausgelassen werden. Je nachdem, wie man prinzipiell den <span class="caps">RTE</span> konfiguriert hat. Ich gehe über hideButtons und lösche dort »user« aus der Liste: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">RTE</span><span style="color: #006600">.default </span><span style="color: #0000CC">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;hideButtons </span><span style="color: #006600">( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">lefttoright</span><span style="color: #006600">, </span><span style="color: #0000CC">righttoleft</span><span style="color: #006600">, </span><span style="color: #0000CC">formattext</span><span style="color: #006600">, </span><span style="color: #0000CC">bidioverride</span><span style="color: #006600">, </span><span style="color: #0000CC">big</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">citation</span><span style="color: #006600">, </span><span style="color: #0000CC">definition</span><span style="color: #006600">, </span><span style="color: #0000CC">insertedtext</span><span style="color: #006600">, </span><span style="color: #0000CC">italic</span><span style="color: #006600">, </span><span style="color: #0000CC">keyboard</span><span style="color: #006600">,&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">monospaced</span><span style="color: #006600">, </span><span style="color: #0000CC">sample</span><span style="color: #006600">, </span><span style="color: #0000CC">small</span><span style="color: #006600">, </span><span style="color: #0000CC">span</span><span style="color: #006600">, </span><span style="color: #0000CC">strikethrough</span><span style="color: #006600">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">variable</span><span style="color: #006600">, </span><span style="color: #0000CC">bold</span><span style="color: #006600">, </span><span style="color: #0000CC">underline</span><span style="color: #006600">, </span><span style="color: #0000CC">fontstyle</span><span style="color: #006600">, </span><span style="color: #0000CC">fontsize</span><span style="color: #006600">, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">blockquote</span><span style="color: #006600">, </span><span style="color: #0000CC">insertparagraphbefore</span><span style="color: #006600">, </span><span style="color: #0000CC">insertparagraphafter</span><span style="color: #006600">, </span><span style="color: #0000CC">inserthorizontalrule</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">spellcheck</span><span style="color: #006600">, </span><span style="color: #0000CC">emoticon</span><span style="color: #006600">, </span><span style="color: #0000CC">inserttag</span><span style="color: #006600">, </span><span style="color: #0000CC">copy</span><span style="color: #006600">, </span><span style="color: #0000CC">cut</span><span style="color: #006600">, </span><span style="color: #0000CC">paste</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">justifyfull</span><span style="color: #006600">, </span><span style="color: #0000CC">textcolor</span><span style="color: #006600">, </span><span style="color: #0000CC">bgcolor</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;)<br /></span><span style="color: #0000CC">&#125; </span>
</span>
</code></div></p>

	<p>Danach sollte im <span class="caps">RTE</span> ein Werkzeug auftauchen mit dem Tooltipp »Insert custom element«. Bei Klick öffnet sich ein Dialog, mit dem die neuen Elemente eingefügt werden können. Damit die Elemente zur Vefügung stehen, müssen diese noch konfiguriert werden: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">RTE</span><span style="color: #006600">.default </span><span style="color: #0000CC">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;userElements &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10 </span><span style="color: #006600">= </span><span style="color: #0000CC">Eigene Sondertags<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10 &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 </span><span style="color: #006600">= </span><span style="color: #0000CC">Sondertag<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.description </span><span style="color: #006600">= </span><span style="color: #0000CC">Der ausgewählte Text wird umschlossen von </span><span style="color: #006600">&lt;</span><span style="color: #0000CC">sondertag</span><span style="color: #006600">&gt;&lt;/</span><span style="color: #0000CC">sondertag</span><span style="color: #006600">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">1.mode </span><span style="color: #006600">= </span><span style="color: #0000CC">wrap<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.content </span><span style="color: #006600">= &lt;</span><span style="color: #0000CC">sondertag</span><span style="color: #006600">&gt;|&lt;/</span><span style="color: #0000CC">sondertag</span><span style="color: #006600">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">&#125;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&#125; </span>
</span>
</code></div></p>

	<p>Dabei bildet »10« eine Kategorie mit der Bezeichnung »Eigene Sondertags« und »1» ist das erste Element. Die folgenden Elemente dieser Kategorie beginnen mit »2«, »3« und so weiter. Wichtig ist die Angabe des Modus &#8211; damit wird erreicht, dass der markierte Text vom Content umgeben wird. </p>

	<p>Mit dieser Technik können nicht nur Tags ermöglicht werden, sondern es können Bilder oder Textbausteine zur Verfügung gestellt werden oder auch weiterführende Formatierungen mit &lt;div&gt;-Containern. Es können sogar <span class="caps">PHP</span>-Skript darüber aufgerufen werden, die markierte Inhalte vor der Übergabe verarbeiten. </p>

	<h3>Fehler / Probleme</h3>

	<p>Bei uns tauchte gelegentlich das Problem auf, dass bei &lt;div&gt;-Containern, die auf diese Art in den <span class="caps">RTE</span> eingefügt wurden, bei der Ausgabe ins Frontend der äusserste Container in einen p-Tag umgewandelt wurde. Da in einen p-Tag kein &lt;div&gt; geschachtelt werden darf, hat das unangenehme Konsequenzen &#8211; unter Umständen auf das Rendering der gesamten Seite. Dieser Fehler ist ein Feature und kann abgeschaltet werden durch diesen Eintrag ins TypoScript Setup: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #FF9900">### das hier verursacht den Fehler: <br /></span><span style="color: #0000CC">lib</span><span style="color: #006600">.</span><span style="color: #0000CC">parseFunc_RTE</span><span style="color: #006600">.</span><span style="color: #0000CC">nonTypoTagStdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">encapsLines</span><span style="color: #006600">.</span><span style="color: #0000CC">remapTag</span><span style="color: #006600">.</span><span style="color: #0000CC">DIV </span><span style="color: #006600">= </span><span style="color: #0000CC">P<br /></span><span style="color: #FF9900">### so abschalten: <br /></span><span style="color: #0000CC">lib</span><span style="color: #006600">.</span><span style="color: #0000CC">parseFunc_RTE</span><span style="color: #006600">.</span><span style="color: #0000CC">nonTypoTagStdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">encapsLines</span><span style="color: #006600">.</span><span style="color: #0000CC">remapTag</span><span style="color: #006600">.</span><span style="color: #0000CC">DIV </span><span style="color: #006600">&gt; </span>
</span>
</code></div></p>

	<p>Dieser Eintrag soll eigentlich dafür sorgen, dass versehentlich eingefügte &lt;div&gt;-Tags durch Absätze ersetzt werden. Bei einigermaßen guter Konfiguration des <span class="caps">RTE</span> ist dieses Feature aber überflüssig und kann abgeschaltet werden. </p>

	<h3>Weiterführende Links</h3>

	<ul>
		<li><a href="http://typo3.org/documentation/document-library/extension-manuals/rtehtmlarea_manual/1.0.0/view/4/4/">Manual auf Typo3.org</a> Hinweis: das Manual ist nicht auf dem üblichen Weg zu finden; die Extension gehört zwar mittlerweile zur Standardinstallation, aber sie wird in der Core-Dokumentation gelistet. Es gibt deshalb eine eigene Extension nur für das Manual von htmlArea <span class="caps">RTE</span>. Interessant sind hier vor allem die Abschnitte »userCategory« und »userElements«</li>
		<li><a href="http://typo3.org/documentation/document-library/references/doc_core_tsref/4.2.1/view/1/5/#id4310252">Tags</a> Der Abschnitt über eigene Tags in TSref.</li>
	</ul>

	<p><a href="http://www.lisardo.de/wiki/Category:Typo3::RTE/" title="Category:Typo3::RTE" class="noArticle">Category:Typo3 -&gt; <span class="caps">RTE</span></a><br />
<a href="http://www.lisardo.de/wiki/Category:Typo3::Extensions/" title="Category:Typo3::Extensions" class="noArticle">Category:Typo3 -&gt; Extensions</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Sprachen in Extension</title>
      <link rel="alternate" type="text/html" href="http://www.lisardo.de/wiki/Sprachen-in-Extension/" />
      <id>tag:lisardo.de,2010:wiki:Sprachen in Extension/73.673</id>
      <published>2010-05-23T20:18:15Z</published>
      <updated>2010-05-23T20:18:15Z</updated>
      <author>
            <name>Peter</name>
            <email>peter@linzenkirchner.de</email>
      </author>
      <content type="html"><![CDATA[
        <p>Die Verarbeitung von Sprachen in Extensions geht in mehreren Schritten vor sich: </p>

	<h3>Spracheinstellungen aus config</h3>

	<p>Zuerst muss die Spracheinstellung (Modus) aus config im Setup ausgelesen werden, am besten in der main()-Funktion oder in einer speziellen init()-Funktion, die aus main() ausgerufen wird: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">sys_language_mode </span><span style="color: #006600">= </span><span style="color: #0000CC">$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">conf&#91;</span><span style="color: #CC0000">'sys_language_mode'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">?</span><span style="color: #0000CC">$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">conf&#91;</span><span style="color: #CC0000">'sys_language_mode'</span><span style="color: #0000CC">&#93; </span><span style="color: #006600">: </span><span style="color: #0000CC">$GLOBALS&#91;</span><span style="color: #CC0000">'TSFE'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">sys_language_mode</span><span style="color: #006600">;<br /><br /></span><span style="color: #FF9900">#####<br /># Mögliche Werte: <br /># <br /># &#91;leer&#93;: Das System fällt in die Standardsprache zurück, <br />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wenn keine Übersetzung vorliegt. <br /># <br /># "content_fallback": Es wird immer mit der Übersetzung gearbeitet, <br />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auch wenn eine Seite nicht übersetzt<br />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wurde. Dadurch fallen die Menüs nicht immer <br />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auf die Standardsprache zurück. <br /># <br /># "strict": Bei fehlenden Übersetzungen wird nichts gezeigt, <br />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auch nicht die Standardsprache. <br /># <br />######### </span>
</span>
</code></div></p>

	<p>Der Wert für $this-&gt;sys_language_mode wird entweder aus der lokalen Konfiguration der Extension entnommen oder aus den config-Einstellungen im Setup. </p>

	<h3>Datenbankabfrage</h3>

	<p>Bereits bei der Datenbankabfrage muss die Sprache berücksichtigt werden, da sich die Übersetzungen in der gleichen Datentabelle befinden wie die Defaultsprache, nur mit einer anderen uid und der uid der Sprachversion im Feld &#8220;sys_language_uid&#8221;. </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">$where </span><span style="color: #006600">= </span><span style="color: #CC0000">'pid = ' </span><span style="color: #006600">. </span><span style="color: #0000CC">$pid </span><span style="color: #006600">. </span><span style="color: #CC0000">' AND sys_language_uid IN (-1,0) '</span><span style="color: #006600">. </span><span style="color: #0000CC">$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">cObj</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">enableFields</span><span style="color: #006600">(</span><span style="color: #CC0000">'tt_content'</span><span style="color: #006600">);<br /></span><span style="color: #0000CC">$res </span><span style="color: #006600">= </span><span style="color: #0000CC">$GLOBALS&#91;</span><span style="color: #CC0000">'TYPO3_DB'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">exec_SELECTquery</span><span style="color: #006600">(<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'*'</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">'tt_content'</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">$where </span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">''</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">''</span><span style="color: #006600">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #CC0000">''<br /></span><span style="color: #006600">); </span>
</span>
</code></div></p>

	<p>Dadurch wird sichergestellt, dass immer nur die Datensätze der Default-Sprache ausgelesen werden, nicht die Übersetzungen. Diese werden im nächsen Schritt geholt. </p>

	<h3>Language Overlay</h3>

	<p>Über eine spezielle Abfrage wird die Default-Sprache überschrieben: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #006600">while ((</span><span style="color: #0000CC">$row </span><span style="color: #006600">= </span><span style="color: #0000CC">$GLOBALS&#91;</span><span style="color: #CC0000">'TYPO3_DB'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">sql_fetch_assoc</span><span style="color: #006600">(</span><span style="color: #0000CC">$res</span><span style="color: #006600">))) </span><span style="color: #0000CC">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF9900">// wenn eine andere als die Defaultsprache gewählt wurde<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #006600">if (</span><span style="color: #0000CC">$GLOBALS&#91;</span><span style="color: #CC0000">'TSFE'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">sys_language_content</span><span style="color: #006600">) </span><span style="color: #0000CC">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF9900">// Daten mit Language-Overlay überschreiben<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">$row </span><span style="color: #006600">= </span><span style="color: #0000CC">$GLOBALS&#91;</span><span style="color: #CC0000">'TSFE'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">sys_page</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">getRecordOverlay</span><span style="color: #006600">(</span><span style="color: #CC0000">'tt_content'</span><span style="color: #006600">, </span><span style="color: #0000CC">$row</span><span style="color: #006600">, </span><span style="color: #0000CC">$GLOBALS&#91;</span><span style="color: #CC0000">'TSFE'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">sys_language_content</span><span style="color: #006600">, </span><span style="color: #0000CC">$this</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">sys_language_mode </span><span style="color: #006600">== </span><span style="color: #CC0000">'strict' </span><span style="color: #006600">? </span><span style="color: #CC0000">'hideNonTranslated' </span><span style="color: #006600">: </span><span style="color: #CC0000">''</span><span style="color: #006600">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">&#125;<br />&#125; </span>
</span>
</code></div></p>

	<p>Dieser Aufruf bringt die neue Sprache zurück, falls eine vorhanden ist und solange der Modus nicht &#8216;strict&#8217; lautet. Wenn keine Übersetzung vorhanden ist, wird die Defaultsprache zurückgeliefert, wenn jedoch zusätzlich sys_language_mode = &#8216;strict&#8217; ist, dann wird ein leeres Array zurückgeliefert. </p>

	<h3>Bei pages geht es etwas anders: </h3>

	<p>Der obige Weg muss immer eingeschlagen werden, wenn sich die Sprachversionen in der gleichen Datentabelle befinden, wie üblich in tt_content oder in Extensions. Bei den Seiten ist es allerdings etwas anders, da es hier eine eigene pages_language_overlay-Tabelle gibt. Folglich muss bei der Datenbankabfrage nicht die language_uid berücksichtigt werden, da immer nur die Seite in der Defaultsprache gefunden wird.</p>

	<p>Es muss nur im Anschluss an die Abfrage erneut der Language-Overlay aufgerufen werden: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #006600">while (</span><span style="color: #0000CC">$row </span><span style="color: #006600">= </span><span style="color: #0000CC">$GLOBALS&#91;</span><span style="color: #CC0000">'TYPO3_DB'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">sql_fetch_assoc</span><span style="color: #006600">(</span><span style="color: #0000CC">$res</span><span style="color: #006600">)) </span><span style="color: #0000CC">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #006600">if (</span><span style="color: #0000CC">$GLOBALS&#91;</span><span style="color: #CC0000">'TSFE'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">sys_language_content</span><span style="color: #006600">) </span><span style="color: #0000CC">&#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$row </span><span style="color: #006600">= </span><span style="color: #0000CC">$GLOBALS&#91;</span><span style="color: #CC0000">'TSFE'</span><span style="color: #0000CC">&#93;</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">sys_page</span><span style="color: #006600">-&gt;</span><span style="color: #0000CC">getPageOverlay</span><span style="color: #006600">(</span><span style="color: #0000CC">$row</span><span style="color: #006600">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">&#125;<br />&#125; </span>
</span>
</code></div></p>

	<p>Wie man sieht, funktioniert es etwas anders als bei normalen Content-Elementen.</p>

	<h3>Weiterführende Links
	<ul>
		<li><a href="http:///www.typo3.net/tsref/setup/config/">Typo3 TSref</a></li>
		<li><a href="hhttp://www.typo3-unleashed.net/typo3apidocs/typo3api_4.2.5/html/d1/d86/classt3lib__pageSelect.html#60908baaf77680c7ea28e916a491b371">t3lib_pageSelect Class Reference</a></li>
	</ul></h3>

	<p><a href="http://www.lisardo.de/wiki/Category:Typo3::Extensions::Programmierung/" title="Category:Typo3::Extensions::Programmierung" class="noArticle">Category:Typo3 -&gt; Extensions -&gt; Programmierung</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Download Extension</title>
      <link rel="alternate" type="text/html" href="http://www.lisardo.de/wiki/Download-Extension/" />
      <id>tag:lisardo.de,2010:wiki:Download Extension/87.672</id>
      <published>2010-05-16T13:28:14Z</published>
      <updated>2010-05-16T13:28:14Z</updated>
      <author>
            <name>Peter</name>
            <email>peter@linzenkirchner.de</email>
      </author>
      <content type="html"><![CDATA[
        <h2>Download-Extensions in TYPO3</h2>

	<h3>Secure Downloads (naw_securedl)</h3>

	<p>Absicherung von Downloadbereichen, so dass kein direkter Link mehr möglich ist. Für verschiedene Dateitypen und unterschiedliche Ordner. Erzwungener Download möglich. </p>

	<p><a href="http://typo3.org/documentation/document-library/extension-manuals/naw_securedl/1.4.1/view/toc/0/">Beschreibung im <span class="caps">TER</span></a></p>

	<h3>Download Stats (wwe_documentstats)</h3>

	<p>Statistik für das oben beschriebene Secure Downloads (Backend-Modul)</p>

	<p><a href="http://typo3.org/documentation/document-library/extension-manuals/wwe_documentstats/0.0.1/view/1/1/#id4123899">Beschreibung im <span class="caps">TER</span></a></p>

	<h3>Modern Downloads (ab_downloads)</h3>

	<p>Downloadbereich mit Kategorien und Listen; ausserdem Community-Funktionen wie Bewertungsmöglichkeiten, am häufigsten Heruntergeladen, sponsored Downloads und statistische Auswertung. Ermöglicht vor allem Front-End-Usern einen Upload bzw. Upload-Vorschläge. </p>

	<p><a href="http://typo3.org/documentation/document-library/extension-manuals/ab_downloads/1.9.6/view/1/1/#id4425857">Beschreibung im <span class="caps">TER</span></a></p>

	<h3>File List (dr_blob)</h3>

	<p>Dateiliste für Download, wobei die Dateien wahlweise in der DB oder als Datei zur Verfügung stehen. Front-End-User können eigene Kriterien für Downloadlisten erstellen (Subscribe-Funktion). Extension kann ich andere Extensions intergriert werden. indexed_search kann den Inhalt durchsuchen. </p>

	<p>Berechtungen für versch. Frontend-Usergruppen möglich, allerdings wird bei fehlender Berechtigung der Datensatz gar nicht gezeigt. Anzeige + Verweis auf Login ist nicht möglich. </p>

	<p>Integration mit der Extension link_handler; also Verlinkung aus dem <span class="caps">RTE</span> möglich. </p>

	<p><a href="http://typo3.org/documentation/document-library/extension-manuals/dr_blob/2.2.1/view/1/1/#id2528081">Beschreibung im <span class="caps">TER</span></a></p>

	<h3><span class="caps">PDF</span> Shop (pdf_order)</h3>

	<p>Man kann Downlaoddateien per E-Mail bestellen. Darstellung der Dateien wie in einem Shop. Enthält keinerlei Bezahlmodul und keinen Warenkorb. </p>

	<p><a href="http://typo3.org/documentation/document-library/extension-manuals/pdf_order/0.2.1/view/1/1/#id2786690">Beschreibung im <span class="caps">TER</span></a></p>

	<h3>Download system &#40;sb_downloader&#41;</h3>

	<p>Downloadlisten mit (ausführlichen) Beschreibungen, Click-counter, Dateigrößen und Vorschau. </p>

	<p><a href="http://www.typo3erweiterungen.de/typo3-extensions/sb-downloader/demo/">Demo</a></p>

	<p><a href="http://typo3.org/documentation/document-library/extension-manuals/sb_downloader/1.0.6/view/1/1/#id2344658">Beschreibung im <span class="caps">TER</span></a></p>

	<h3>Download link with hit counter (jpk_downloadcounter)</h3>

	<p>Erstellen von Downloadlinks mit jeweils eigenem Click-Counter. </p>

	<p><a href="http://typo3.org/documentation/document-library/extension-manuals/jpk_downloadcounter/0.9.7/view/toc/0/">Bescrheibung im <span class="caps">TER</span></a></p>

	<h3>Documents download (rtg_files)</h3>

	<p>Erstellen von Downloadlisten für unterschiedliche Dateiarten. Kann Quelltext als Text darstellen. Ausführliche Statistik. Suche. Listen können echte Downloads enthalten oder externe Links. </p>

	<p><a href="http://typo3.org/documentation/document-library/extension-manuals/rtg_files/1.5.0/view/1/1/#id2512170">Beschreibung im <span class="caps">TER</span></a></p>

	<h3>Passwortgeschützte Downloads (fhm_downloads)</h3>

	<p>Passwortschutz für Downloads als eigenes Inhaltselement. Der Besucher muss ein Passwort eingeben, dann kann er downloaden. Keine Lokalisierung!</p>

	<p><a href="http://typo3.org/documentation/document-library/extension-manuals/fhm_downloads/0.0.1/view/1/1/">Beschreibung im <span class="caps">TER</span></a></p>

	<h3>Secure Download (rs_securedownload)</h3>

	<p>Erlaubt einen passwortgeschützten Download. Mit Statistikfunktionen im Backend. </p>

	<p><a href="http://typo3.org/documentation/document-library/extension-manuals/rs_securedownload/0.2.0/view/toc/0/">Beschreibung im <span class="caps">TER</span></a></p>

	<h3>Password Secured Downloads (fr_pwsdownload)</h3>

	<p>Passwortgeschützte Downloads als neues Inhaltselement. Kann ergänzt werden um eine Liste von Usern, die downloaden dürfen. Leider als kommaseparierte Liste und nicht als Gruppe &#8230; kann aber wahrscheinlich leicht angepasst werden. </p>

	<p><a href="http://typo3.org/documentation/document-library/extension-manuals/fr_pwsdownload/0.1.0/view/1/1/#id2528963">Beschreibung im <span class="caps">TER</span></a></p>
      ]]></content>
    </entry>

    <entry>
      <title>DAM Extension Redakteure</title>
      <link rel="alternate" type="text/html" href="http://www.lisardo.de/wiki/DAM-Extension-Redakteure/" />
      <id>tag:lisardo.de,2010:wiki:DAM Extension Redakteure/86.663</id>
      <published>2010-03-02T20:41:52Z</published>
      <updated>2010-03-02T20:41:52Z</updated>
      <author>
            <name>Peter</name>
            <email>peter@linzenkirchner.de</email>
      </author>
      <content type="html"><![CDATA[
        <p>Die Gruppe der Redakteure braucht <strong>Zugriff auf den Media-Sysfolder</strong> &#8211; allerdings soll dieser eigentlich nicht allen Redakteuren gezeigt werden. Deshalb gibt es in der <span class="caps">DAM</span>-Extension selbst die Option &#8216;Hide Media sysfolder&#8217;. Diese Checkbox einfach anklicken und die Redakteure sehen den Sysfolder nicht mehr. </p>

	<p>Allerdings muss er sichtbar sein beim Einrichten der Benutzergruppen, sonst ist es ja nicht möglich, ihn den Gruppen zuzuweisen; man muss diese Option also öfter an- bzw. wieder ausschalten. </p>

	<p>Ausserdem benötigen die Redakteure <strong>Schreibzugriff auf die Tabelle »Medien«</strong>. </p>

	<h3>Weiterführende Links</h3>

	<p><a href="http://www.typo3-snippets.de/snippets/generelle-konfiguration/dam-extension-fuer-redakteure-einrichten.html"><span class="caps">DAM</span>-Extension für Redakteure einrichten</a></p>

	<h3>Kategorien</h3>

	<p><a href="http://www.lisardo.de/wiki/Category:Typo3::Backend/" title="Category:Typo3::Backend" class="noArticle">Category:Typo3 -&gt; Backend</a><br />
<a href="http://www.lisardo.de/wiki/Category:Typo3::DAM/" title="Category:Typo3::DAM" class="noArticle">Category:Typo3 -&gt; <span class="caps">DAM</span></a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Inhaltselemente formatieren</title>
      <link rel="alternate" type="text/html" href="http://www.lisardo.de/wiki/Inhaltselemente-formatieren/" />
      <id>tag:lisardo.de,2010:wiki:Inhaltselemente formatieren/57.660</id>
      <published>2010-02-24T13:39:35Z</published>
      <updated>2010-02-24T13:39:35Z</updated>
      <author>
            <name>Peter</name>
            <email>peter@linzenkirchner.de</email>
      </author>
      <content type="html"><![CDATA[
        <p>Die Optionen aller Eingabefelder im Backend können modifizert (= geändert oder erweitert) werden. Prinzipiell ist die Syntax: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">TCEFORM</span><span style="color: #006600">.</span><span style="color: #0000CC">&#91;tablename&#93;</span><span style="color: #006600">.</span><span style="color: #0000CC">&#91;field&#93; &#123;<br />&nbsp;&nbsp;</span><span style="color: #FF9900"># Feld komplett entfernen: <br />&nbsp;&nbsp;</span><span style="color: #0000CC">disabled </span><span style="color: #006600">= </span><span style="color: #0000CC">1<br />&nbsp;&nbsp;</span><span style="color: #FF9900"># Item entfernen<br />&nbsp;&nbsp;</span><span style="color: #0000CC">removeItems </span><span style="color: #006600">= </span><span style="color: #0000CC">1</span><span style="color: #006600">,</span><span style="color: #0000CC">2</span><span style="color: #006600">,</span><span style="color: #0000CC">3<br />&nbsp;&nbsp;</span><span style="color: #FF9900"># Item hinzufügen (Achtung: erfordert für das Frontend noch TypoScript im Template!)<br />&nbsp;&nbsp;</span><span style="color: #0000CC">addItems</span><span style="color: #006600">.</span><span style="color: #0000CC">&#91;itemValue&#93; </span><span style="color: #006600">= </span><span style="color: #0000CC">100</span><span style="color: #006600">,</span><span style="color: #0000CC">101<br />&nbsp;&nbsp;</span><span style="color: #FF9900"># Umbenennen<br />&nbsp;&nbsp;</span><span style="color: #0000CC">altLabels</span><span style="color: #006600">.</span><span style="color: #0000CC">&#91;item_value&#93; </span><span style="color: #006600">= </span><span style="color: #0000CC">ein ganz neuer Name<br />&#125; </span>
</span>
</code></div></p>

	<p>Leider gibt es keine Dokumentation, welche Optionen für welches Feld zur Verfügung stehen und wie diese im Frontend ausgegeben werden. Das kann man wohl am einfachsten aus dem Quelltext des Eingabeformulars im Backend entnehmen. Für das Frontend kenne ich im Moment nur die Möglichkeit, es auszutesten bzw im Falle von tt_content das TypoScript von css_styled_content durchzusehen. </p>

	<h3>Bezeichnungen der Headline-Layouts ändern: </h3>

	<p>Ins TSconfig der der Seite folgendes eintragen: <br />
<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">TCEFORM</span><span style="color: #006600">.</span><span style="color: #0000CC">tt_content &#123;<br />&nbsp;&nbsp;</span><span style="color: #FF9900"># ausblenden<br />&nbsp;&nbsp;</span><span style="color: #0000CC">header_layout</span><span style="color: #006600">.</span><span style="color: #0000CC">removeItems </span><span style="color: #006600">= </span><span style="color: #0000CC">1</span><span style="color: #006600">,</span><span style="color: #0000CC">4</span><span style="color: #006600">,</span><span style="color: #0000CC">5</span><span style="color: #006600">,</span><span style="color: #0000CC">100<br />&nbsp;&nbsp;</span><span style="color: #FF9900"># mit anderem Namen versehen<br />&nbsp;&nbsp;</span><span style="color: #0000CC">header_layout</span><span style="color: #006600">.</span><span style="color: #0000CC">altLabels.0 </span><span style="color: #006600">= </span><span style="color: #0000CC">Ebene 1</span><span style="color: #006600">, </span><span style="color: #0000CC">H1<br />&nbsp;&nbsp;header_layout</span><span style="color: #006600">.</span><span style="color: #0000CC">altLabels.2 </span><span style="color: #006600">= </span><span style="color: #0000CC">Ebene 2</span><span style="color: #006600">, </span><span style="color: #0000CC">H2<br />&nbsp;&nbsp;header_layout</span><span style="color: #006600">.</span><span style="color: #0000CC">altLabels.3 </span><span style="color: #006600">= </span><span style="color: #0000CC">Ebene 3</span><span style="color: #006600">, </span><span style="color: #0000CC">H3<br />&#125; </span>
</span>
</code></div></p>

	<p>Falls H1 nicht genutzt werden soll, muss die Default-Einstellung noch geändert werden, bzw. die Ausgabe für header_layout.altLabels.0. Das geht über folgende Eingabe im Constants-Bereich des TypoScript-Templates: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #FF9900"># Voreinstellunge auf Headline &lt;h3&gt;<br /></span><span style="color: #0000CC">content</span><span style="color: #006600">.</span><span style="color: #0000CC">defaultHeaderType </span><span style="color: #006600">= </span><span style="color: #0000CC">3 </span>
</span>
</code></div></p>

	<h3>Rahmenoptionen umbenennen: </h3>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">TCEFORM</span><span style="color: #006600">.</span><span style="color: #0000CC">tt_content &#123;<br />&nbsp;&nbsp;</span><span style="color: #FF9900"># Rahmenoptionen im Bereich Typ<br />&nbsp;&nbsp;</span><span style="color: #0000CC">section_frame &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF9900"># neue Labels<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">altLabels &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10 </span><span style="color: #006600">= </span><span style="color: #0000CC">Kasten<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5 </span><span style="color: #006600">= </span><span style="color: #0000CC">Linie davor<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6 </span><span style="color: #006600">= </span><span style="color: #0000CC">Linie danach<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11 </span><span style="color: #006600">= </span><span style="color: #0000CC">BoxBlau<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12 </span><span style="color: #006600">= </span><span style="color: #0000CC">BoxGrau<br />&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br />&nbsp;&nbsp;</span><span style="color: #FF9900"># ausblenden<br />&nbsp;&nbsp;</span><span style="color: #0000CC">removeItems </span><span style="color: #006600">= </span><span style="color: #0000CC">1</span><span style="color: #006600">, </span><span style="color: #0000CC">20</span><span style="color: #006600">, </span><span style="color: #0000CC">21<br />&nbsp;&nbsp;&#125;<br />&#125; </span>
</span>
</code></div></p>

	<h3>Neue Rahmenoptionen hinzufügen</h3>

	<p>Das ist etwas aufwändiger, da hierzu auch das TypoScript von tt_content verändert werden muss. Erster Schritt im TSconfig der Seite: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #FF9900"># neuer Rahmen dazu<br /></span><span style="color: #0000CC">TCEFORM</span><span style="color: #006600">.</span><span style="color: #0000CC">tt_content</span><span style="color: #006600">.</span><span style="color: #0000CC">section_frame &#123;<br />&nbsp;&nbsp;addItems.100 </span><span style="color: #006600">= </span><span style="color: #0000CC">Mal ganz anders<br />&#125; </span>
</span>
</code></div></p>

	<p>Danach im TypoScript-Template: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">tt_content</span><span style="color: #006600">.</span><span style="color: #0000CC">stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">innerWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">cObject </span><span style="color: #006600">= CASE<br /></span><span style="color: #0000CC">tt_content</span><span style="color: #006600">.</span><span style="color: #0000CC">stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">innerWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">cObject &#123;<br />&nbsp;&nbsp;100 </span><span style="color: #006600">= </span><span style="color: #0000CC">TEXT<br />&nbsp;&nbsp;100.value </span><span style="color: #006600">= &lt;</span><span style="color: #0000CC">div </span><span style="color: #006600">class=</span><span style="color: #CC0000">"mal-ganz-anders"</span><span style="color: #006600">&gt;|&lt;/</span><span style="color: #0000CC">div</span><span style="color: #006600">&gt;<br /></span><span style="color: #0000CC">&#125; </span>
</span>
</code></div></p>

	<p>Danach ganz normal in der <span class="caps">CSS</span>-Datei formatieren. </p>

	<p><strong><span class="caps">ACHTUNG</span>:</strong> Das funktioniert seit TYPO3 4.3 nicht mehr; hier wurde css_styled_content etwas verändert. Man kann zwar die alte Fassung als static_content in das Template laden, aber besser ist es, es auf die neue Art zu machen: </p>

	<p><div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000CC">tt_content</span><span style="color: #006600">.</span><span style="color: #0000CC">stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">innerWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">cObject &#123;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF9900"># Definitionen zuweisen<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">100 </span><span style="color: #006600">=&lt; </span><span style="color: #0000CC">tt_content</span><span style="color: #006600">.</span><span style="color: #0000CC">stdWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">innerWrap</span><span style="color: #006600">.</span><span style="color: #0000CC">cObject</span><span style="color: #006600">.default<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF9900"># Klasse zuweisen<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000CC">100.15</span><span style="color: #006600">.</span><span style="color: #0000CC">value </span><span style="color: #006600">= </span><span style="color: #0000CC">mal</span><span style="color: #006600">-</span><span style="color: #0000CC">ganz</span><span style="color: #006600">-</span><span style="color: #0000CC">anders<br />&#125; </span>
</span>
</code></div></p>

	<p>Das hat auch den Vorteile, dass die Abstände oben und unten funktionieren. </p>

	<h3>Weiterführende Links: </h3>

	<ul>
		<li><a href="http://typo3.org/documentation/document-library/references/doc_core_tsconfig/4.1.0/view/1/3/">TS-Referenz auf Typo3.org</a></li>
	</ul>

	<p><a href="http://www.lisardo.de/wiki/Category:Typo3::TSconfig/" title="Category:Typo3::TSconfig" class="noArticle">Category:Typo3 -&gt; TSconfig</a></p>
      ]]></content>
    </entry>


</feed>