<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TYPO3 Blogger &#187; Matthias Stübner</title>
	<atom:link href="http://typo3blogger.de/author/mstuebner/feed/" rel="self" type="application/rss+xml" />
	<link>http://typo3blogger.de</link>
	<description>TYPO3 News, Development &#38; Insider Infos</description>
	<lastBuildDate>Wed, 08 Sep 2010 21:19:36 +0000</lastBuildDate>
	<language>de-de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Wear TYPO3!</title>
		<link>http://typo3blogger.de/wear-typo3/</link>
		<comments>http://typo3blogger.de/wear-typo3/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 08:02:38 +0000</pubDate>
		<dc:creator>Matthias Stübner</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=4601</guid>
		<description><![CDATA[&#8220;Wear TYPO3&#8243; ist meine Erkenntnis der letzten Tage. &#8220;Wear TYPO3&#8243; wo auch immer Du bist. Seit nun zwei Wochen befinde ich mich am Roten Meer zum Tauchen. Wie jedes Jahr ist auch die gesamte Kollektion an TYPO3 T-Shirts dabei, da ich diese ansonsten so selten ausführen kann. Daher ist jeden Tag ein anderes T-Shirt auf [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>&#8220;Wear TYPO3&#8243; ist meine Erkenntnis der letzten Tage. &#8220;Wear TYPO3&#8243; wo auch immer Du bist. <img src='http://typo3blogger.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Seit nun zwei Wochen befinde ich mich am Roten Meer zum Tauchen. Wie jedes Jahr ist auch die gesamte Kollektion an TYPO3 T-Shirts dabei, da ich diese ansonsten so selten ausführen kann. Daher ist jeden Tag ein anderes T-Shirt auf dem Boot, mal T3DD, mal T3Camp oder einfach nur &#8220;Inspire to share&#8221;.</p>
<p>Interessanter Nebeneffekt: Ich wurde diese Woche bereits zwei mal auf TYPO3 angesprochen, von Anwendern die verschiedene Bauchschmerzen haben, in einem Fall das typische &#8220;Redakteur arbeitet mit Adminzugang ==&gt; TYPO3 ist kompliziert&#8221;. Sicherlich beides keine Millionenaufträge, aber die Resonanz ist erfreulich.</p>
<p>Auch gut ist, dass die UMTS-Abdeckung (mit Etisalat SIM [25EUR für 6GB Pre-Paid], wahrscheinlich aber auch mit Vodafone) hervorragend ist. Das erlaubt es nicht nur mittels Skype den 1-stündigen Videocall zur Familie zu machen, man kann auch schnell mal was in TYPO3 zu zeigen.</p>
<p>Also: &#8220;Wear TYPO3!&#8221;</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/wear-typo3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Die T3AK10 hat begonnen&#8230; (1. TAG)</title>
		<link>http://typo3blogger.de/die-t3ak10-hat-begonnen/</link>
		<comments>http://typo3blogger.de/die-t3ak10-hat-begonnen/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 09:20:29 +0000</pubDate>
		<dc:creator>Matthias Stübner</dc:creator>
				<category><![CDATA[T3 AK 20xx]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=4013</guid>
		<description><![CDATA[Zusammenfassung des Tages: Fokus des ersten Tages war, wie man bei den Vorträgen unten leicht erkennen kann, die Zusammenareit von TYPO3 und Magento, in den verschiedensten Spielarten. Die Vorträge waren allesamt interessant, wenngleich der Vortrag über das Performancetuning/Caching am Beispiel kress.de definitiv zu spät am Tag angesetzt war, um die Zuhörer noch zu erreichen (die [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Zusammenfassung des Tages:</p>
<p>Fokus des ersten Tages war, wie man bei den Vorträgen unten leicht erkennen kann, die Zusammenareit von TYPO3 und Magento, in den verschiedensten Spielarten. Die Vorträge waren allesamt interessant, wenngleich der Vortrag über das Performancetuning/Caching am Beispiel kress.de definitiv zu spät am Tag angesetzt war, um die Zuhörer noch zu erreichen (die Menge an Informationen übertraf die verbleibende Aufnahmefähigkeit bei weitem).</p>
<p>Die Bewirtung, von morgens bis zum Dinner, war sehr gut und jederzeit reichlich. Die Cocktailbar am Abend konnte ich (da mit Auto angereist) leider nicht nutzen.</p>
<p>Spontan fällt mir nur ein negativer Punkt ein: die Twitterwall (großer Flachbildschirm mit dem #t3ak10 Tweet), der zur einige Anwesende zu Abgabe konsequent inhalts- und bedeutungsloser Tweets provozierte und sicher nicht der Konzentration auf die Vorträge dienlich war. Schauen wir mal wie das morgen sein wird.<span id="more-4013"></span><span style="text-decoration: underline;">Themen des Tages:</span></p>
<p>- Vorstellung der Performancemassnahmen am Beispiel kress.de, inkl. des Caching-Frameworks und der Ext. enetcache</p>
<p>- Volker Graubaum stellte das Projekt kress.de vor, inkl. der verschiedenen Features. Einsatz des Caching Frameworks der Version 4.3</p>
<p>- Und noch einmal TYPO3 und Magento mittels Middleware. jimConnector und weitere Elemente in der Kommunikation zwischen TYPO3 und Magento</p>
<p>- Weiter gehts nach dem Mittag mit einem Vortrag über TYPOGENTO durch TOCO3. Als Beispiel eines Shops für Frottee Frisbees. Es wird gezeigt, wie Teile der Magentoausgabe direkt durch TYPO3 ausgegeben werden.</p>
<p>- Ingo Schmidt (Marketing Factory) spricht über die wichtigen Punkte für SEO. An sich ein Thema wo man denkt &#8220;Nicht schon wieder&#8221;, aber mal ganz andere (und interessante) Gesichtspunkte. Inkl. der Bedeutung der robots.txt, XML-Sitemap etc. Empfehlung für dd_googlesitemap (Multidomainfähig u.a.) ==&gt; Fazit: Das Problem ist dann doch wieder der Redakteur, der die Inhalte nicht pflegt. Dagegen gibt es noch keine Extension, leider.</p>
<p>Interessanter Konfigurationskey: config.meaningfulTempFilePrefix = 100, um den Namen der originalen Datei als Bestandteil der temp. Datei integriert, was dann wieder zu Keywords in Dateinamen führt.</p>
<p>Mit Realurl nicht übertreiben, denn für Google kann das aussehen, als wenn die Seite auf einer tiefen Verzeichnisstruktur liegt und dadurch weniger relevant ist. Wie oft: viel hilft nicht viel.</p>
<p>- Stefan Willkommer von TECHDIVISION stellt das große Lindner-Projekt vor: Weltweit verteiltes Internet/Intranet. Schon spannend was man alles aufbauen kann. Inkl. Anbindung an diverse LDAP-Server für weltweites Login.</p>
<p>- &#8230;mit dem Vortrag von Sebastian Böttger bzgl. eCommerce und TYPO3. Die Marit AG hat das Haus voll bekommen, der Kaffee ist gut, die Brezen auch. Derzeit werden die verschiedenen verfügbaren Systeme vorgestellt.</p>
<p>Mehr Details folgen&#8230;.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/die-t3ak10-hat-begonnen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Handling von Typoscript Konfiguration mit mehreren Plugins</title>
		<link>http://typo3blogger.de/handling-von-typoscript-konfiguration-mit-mehreren-plugins/</link>
		<comments>http://typo3blogger.de/handling-von-typoscript-konfiguration-mit-mehreren-plugins/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 13:39:03 +0000</pubDate>
		<dc:creator>Matthias Stübner</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Extension]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=3913</guid>
		<description><![CDATA[Extensionen werden in TYPO3 in vielen, wenn nicht sogar den meisten, Fällen mit Typoscript konfiguriert. Im Typoscript-Template gibt es daher dann für das erste Plugin der Extension mytest einen Bereich a la plugin.mytest_pi1, für weitere Plugins derselben Extension plugin.mytest_pi2 etc. Die Daten des entsprechenden Bereiches steht dem jeweiligen Plugin in der Variablen $this-&#62;conf[] zur Verfügung. [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Extensionen werden in TYPO3 in vielen, wenn nicht sogar den meisten, Fällen mit Typoscript konfiguriert. Im Typoscript-Template gibt es daher dann für das erste Plugin der Extension mytest einen Bereich a la plugin.mytest_pi1, für weitere Plugins derselben Extension plugin.mytest_pi2 etc. Die Daten des entsprechenden Bereiches steht dem jeweiligen Plugin in der Variablen $this-&gt;conf[] zur Verfügung.<span id="more-3913"></span></p>
<p>Oft trifft es aber zu, dass in den verschiedenen Plugins gewisse Basisdaten der Konfiguration gebraucht werden, die für alle Plugins gelten. Dies können Formatierungen und Templates sein, aber auch jegliche andere Konfiguration.</p>
<p>Um diese Daten jedem Plugin zur Verfügung zu stellen gibt es verschiedene Ansätze. Der allgemeinste Ansatz wäre das Kopieren der Daten im Typoscript Template, in welchem dann folgender Code die Einstellungen vom Plugin1 zum Plugin2 kopieren würde:</p>
<pre class="light">plugin.mytest_pi2 &lt; plugin.mytest1</pre>
<p>Allerdings ist diese Lösung alles andere als ideal, da dies eine Zeile im Typoscript Template ist, welche einfach gelöscht oder vergessen werden kann. Die Auswirkungen können sehr unterschiedlich ausfallen. Daher ist es besser diese Daten im PHP-Code der Extension zu kopieren, wobei die Daten bei diesem Vorgang zusätzlich auch noch verifiziert und gegebenenfalls modifiziert werden können.</p>
<p>Im PHP-Code der Extension kann jederzeit auf die Typoscript Daten zugegriffen werden:</p>
<pre class="light">$ts = $GLOBALS['TSFE']-&gt;tmpl-&gt;setup['plugin.']['mytest_pi1.'];</pre>
<p>Da bei dieser Methode des Zugriffs nicht die Notwendigkeit gegeben ist sich an strikte Namenskonventionen zu halten, kann allgemeiner Code der mehrere Plugins der Extension betrifft auch in einen allgemeinen Teil umverlagert werden, wie der folgende Code zeigt:</p>
<pre class="light">$ts = $GLOBALS['TSFE']-&gt;tmpl-&gt;setup['plugin.']['mytest.'];</pre>
<p>In diesem Fall wären alle allgemeinen Einstellungen im Typoscript Template in Bereich plugin.mytest anzugeben, spezielle Einstellungen pro Plugin jedoch weiter hin als plugin.mytest_pi1 etc.</p>
<p>Durch diese Aufteilung und die Verteilung innerhalb des PHP-Codes wird die beste Kombination zwischen Flexibilität, Sicherheit und Übersichtlichkeit getroffen.</p>
<p>Eine Anmerkung ist an dieser Stelle jedoch wichtig: Daten die im &#8220;allgemeinen Teil (mytest)&#8221; gespeichert sind, stehen NICHT automatisch in $this-conf zur verfügung und müssen bei Bedarf im PHP-Code dorthin übetragen werden. Auch wichtig anzumerken ist, dass dies nur EINE Möglichkeit der Vereinfachung darstellt, die je nach Anwendung mehr oder weniger gut umzusetzen ist.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/handling-von-typoscript-konfiguration-mit-mehreren-plugins/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Config parsen mit t3lib_TSparser</title>
		<link>http://typo3blogger.de/config-parsen-mit-t3lib_tsparser/</link>
		<comments>http://typo3blogger.de/config-parsen-mit-t3lib_tsparser/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 13:27:34 +0000</pubDate>
		<dc:creator>Matthias Stübner</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Extension]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=3910</guid>
		<description><![CDATA[Vor einigen Tagen, beim Schreiben an der Extension zum Handling von Login-News, kam ich wieder mal den Punkt TypoScript aus einer Datei laden zu müssen, um dies dann im Source auswerten zu können. Eine eigentlich recht einfache Aufgabe, wenn man die entsprechende Klasse zur Hand hat. Daher im Folgenden ein paar kurze Hinweis dazu. Eine [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Vor einigen Tagen, beim Schreiben an der Extension zum Handling von Login-News, kam ich wieder mal den Punkt TypoScript aus einer Datei laden zu müssen, um dies dann im Source auswerten zu können. Eine eigentlich recht einfache Aufgabe, wenn man die entsprechende Klasse zur Hand hat. <span id="more-3910"></span>Daher im Folgenden ein paar kurze Hinweis dazu. Eine Datei einzulesen ist einfach und kann mit</p>
<pre class="light">$confFile  .= file_get_contents($File);</pre>
<p>geschehen, woraufhin der Inhalt der Datei in $confFile steht. Die Variable $confFile enthält den Text der Datei, aber noch kein auswertbares TS-Array. Um dies zu erhalten muss der Parser die Daten erst noch verarbeiten und in ein TypoScript-Array konvertieren, was mit dem folgenden Code geschehen kann:</p>
<pre class="light">$tsParser  = t3lib_div::makeInstance('t3lib_TSparser');
$tsParser-&gt;parse($confFile);
$tsArray = $tsParser-&gt;setup;</pre>
<p>In der ersten Zeile wird eine Instanz des TSparsers erzeugt, deren Methode <strong>parse()</strong> anschliessend anschliessend die eingelesene Datei übergeben wird. Nach Ausführung von parse() steht das TS-Array in der Variable $tsParser-&gt;setup zur weiteren Verarbeitung zur Verfügung und kann wie jedes Array verarbeitet werden.</p>
<p>Auf die einzelnen Schlüssel kann dann wie im folgenden Beispiel zugegriffen werden:</p>
<pre class="light">$parseFunc = $tsArray['lib.']['parseFunc.']</pre>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/config-parsen-mit-t3lib_tsparser/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>News beim Einloggen ins Backend</title>
		<link>http://typo3blogger.de/news-beim-einloggen-ins-backend/</link>
		<comments>http://typo3blogger.de/news-beim-einloggen-ins-backend/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 14:50:29 +0000</pubDate>
		<dc:creator>Matthias Stübner</dc:creator>
				<category><![CDATA[Extension]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[myExt]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=3890</guid>
		<description><![CDATA[Weihnachten ist nicht nur zum Schlafen gut, auch zum Durchsehen der Sachen die man das Jahr über liegen gelassen hat. Dabei sind mir auch Notizen zu Extensionen in die Hand gefallen die ich irgendwann mal schreiben wollte. Eine davon wäre dazu da, News zu verwalten die unter der Backend-Loginbox angezeigt werden. Verwalten soll zumind. heissen, [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Weihnachten ist nicht nur zum Schlafen gut, auch zum Durchsehen der Sachen die man das Jahr über liegen gelassen hat. Dabei sind mir auch Notizen zu Extensionen in die Hand gefallen die ich irgendwann mal schreiben wollte.</p>
<p>Eine davon wäre dazu da, News zu verwalten die unter der Backend-Loginbox angezeigt werden. Verwalten soll zumind. heissen, dass ContentElemente ausgegeben werden die in einem oder mehreren Foldern liegen und auch Dinge wie START/STOP, Hidden u.ä. der ContentElemente beachtet werden.</p>
<p>Um nun nicht nur für die eigene Schublade zu schreiben, möchte ich an dieser Stelle dazu aufrufen Ideen/Wünsche (so vorhanden) zu äussern. Auch falls es sowas schon gibt und mir nur nicht bekannt ist, wäre ein Hinweis wunderbar.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/news-beim-einloggen-ins-backend/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Extensionkonf. direkt im ExtensionManager</title>
		<link>http://typo3blogger.de/extensionkonf-direkt-im-extensionmanager/</link>
		<comments>http://typo3blogger.de/extensionkonf-direkt-im-extensionmanager/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 07:44:14 +0000</pubDate>
		<dc:creator>Matthias Stübner</dc:creator>
				<category><![CDATA[Extension]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=3855</guid>
		<description><![CDATA[In Extensionen kommt es häufig vor, dass in Abhängigkeit von der aktuellen Konfiguration bestimmte Werte (z.B. Seiten-IDs) an die Extension übergeben werden müssen. Um dies zu erreichen gibt es verschiedene Möglichkeiten, zum Beispiel den ConstantEditor. Eine weitere Möglichkeit ist die Eingabe der Werte über ein TS-Template, womit die Werte der Extension im conf[]-Array zur Verfügung [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>In Extensionen kommt es häufig vor, dass in Abhängigkeit von der aktuellen Konfiguration bestimmte Werte (z.B. Seiten-IDs) an die Extension übergeben werden müssen. Um dies zu erreichen gibt es verschiedene Möglichkeiten, zum Beispiel den ConstantEditor.<span id="more-3855"></span></p>
<p>Eine weitere Möglichkeit ist die Eingabe der Werte über ein TS-Template, womit die Werte der Extension im conf[]-Array zur Verfügung stehen. Dies wird jedoch spätestens dann aufwändig, wenn die Extension aus mehreren Untermodulen (pi1, pi2, pi3&#8230;) besteht und die Parameter allen Untermodulen bekannt sein muss.</p>
<p>In diesem Fall bietet sich eine einfachere Möglichkeit an: <strong>ext_conf_template.txt</strong>.</p>
<p>Hierbei handelt es sich um eine Textdatei die im Hauptverzeichnis der Extension existieren kann. Ist sie vorhanden, so wird sie eingelesen. In dieser Datei werden nun die Variablen definiert, wobei die Syntax die selbe wie beim ConstantEditor ist. Sollen Variablen thematisch gruppiert werden können sie in eine geschweifte Klammer eingeschlossen werden.</p>
<pre class="light">Gruppenname {
    variablen
}</pre>
<p>Die zu konfigurierenden Variablen finden Sie, wenn Sie im Extension Manager auf den Namen der Extension klicken, um die Informationsseite aufzurufen. Jede Variable wird mit der angegebenen Beschreibung angezeigt. Wird das Formular  gesendet werden die Daten in einem serialisierten Array in der localconf.php gespeichert.</p>
<p><strong><span style="text-decoration: underline;">HINWEIS</span></strong>: Falls Sie in einer der Variablen Dateien auswählen wollen, so sollten sich diese im Unterverzeichnis /res der Extension befinden.</p>
<p>Falls Sie die Eingaben im Formular vor dem Speichern in der localconf.php noch prüfen oder modifizieren wollen müssen Sie einen Hook des Extension Managers nutzen und Ihre Funktion in folgendem Aufruf registrieren:</p>
<pre class="light">$TYPO3_CONF_VARS['SC_OPTIONS']['typo3/mod/tools/em/index.php']['tsStyleConfigForm'][] = “function"</pre>
<p>Um die Variablen später anwenden zu können müssen selbige aus dem serialisierten Array ausgelesen werden. Dies kann recht einfach mit dem folgenden Code geschehen:</p>
<pre class="light">$Config = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['extension_key']);
$var = $Config['var_name'];</pre>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/extensionkonf-direkt-im-extensionmanager/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Links zum Erzeugen anderer Contentelemente</title>
		<link>http://typo3blogger.de/links-zum-erzeugen-anderer-contentelemente/</link>
		<comments>http://typo3blogger.de/links-zum-erzeugen-anderer-contentelemente/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 07:43:59 +0000</pubDate>
		<dc:creator>Matthias Stübner</dc:creator>
				<category><![CDATA[Extension]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=3852</guid>
		<description><![CDATA[Immer wieder stellt sich die Anforderung, aus einer eigenen Extension andere Elemente, z.B. einen FE_User anzulegen. Statt nun Funktionen der FE_User direkt aufzurufen kann man diese Arbeit gerne TYPO3 überlassen. Es folgen einige Beispiele. Dabei wird angenommen, dass eine neue Seite in einer Seite mit der UID=111 angelegt werden sollen (mit FE_User etc. funktioniert dies [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Immer wieder stellt sich die Anforderung, aus einer eigenen Extension andere Elemente, z.B. einen FE_User anzulegen. Statt nun Funktionen der FE_User direkt aufzurufen kann man diese Arbeit gerne TYPO3 überlassen. Es folgen einige Beispiele. Dabei wird angenommen, dass eine neue Seite in einer Seite mit der UID=111 angelegt werden sollen (mit FE_User etc. funktioniert dies sinngemäß)<span id="more-3852"></span></p>
<p>Das Erzeugen eines Links zu anlegen einer neuen Seite&#8230;:</p>
<pre class="light">$params = '&amp;edit[pages][111]=new';
$output.= '<a onclick="'.htmlspecialchars(t3lib_BEfunc::editOnClick($params,$GLOBALS['BACK_PATH'])).'" href="http://www.typo3-consultant.de/entwicklung/artikeldetails/archive/2007/oktober/article/links-zum-erzeugen-anderer-contentelemente.html#">Some Text</a>'</pre>
<p>&#8230;zum Editieren der Seite mit UID=21&#8230;</p>
<pre class="light">$params = '&amp;edit[pages][21]=edit';</pre>
<p>&#8230;zum Editieren der Seite mit UID=21 mit eingeschränkten Feldern&#8230;</p>
<pre>$params = '&amp;edit[pages][21]=edit&amp;columnsOnly=title,hidden';</pre>
<p>&#8230;und mit Defaultwerten.</p>
<pre class="light">$params = '&amp;edit[pages][21]=new&amp;defVals[pages][title]=New%20Page';</pre>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/links-zum-erzeugen-anderer-contentelemente/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>TypoScript in einer Extension generieren</title>
		<link>http://typo3blogger.de/typoscript-in-einer-extension-generieren/</link>
		<comments>http://typo3blogger.de/typoscript-in-einer-extension-generieren/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 07:43:36 +0000</pubDate>
		<dc:creator>Matthias Stübner</dc:creator>
				<category><![CDATA[Extension]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TYPO3]]></category>
		<category><![CDATA[TypoScript]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=3848</guid>
		<description><![CDATA[In verschiedenen Situationen kann es notwendig sein, innerhalb einer eigenen Extension TypoScript-Code zu erzeugen, z.B. wenn die Seite auf der die Extension eingebunden sein wird gecacht wird, die Ausgabe einer Funktion aber trotzdem dynamisch sein muss (z.B. Zugriffszähler). In einem Template würde man hierzu z.B. folgendes definieren: page.10.marks.dynamik = COA_INT page.10.marks.dynamik {     10 = [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>In verschiedenen Situationen kann es notwendig sein, innerhalb einer eigenen Extension TypoScript-Code zu erzeugen, z.B. wenn die Seite auf der die Extension eingebunden sein wird gecacht wird, die Ausgabe einer Funktion aber trotzdem dynamisch sein muss (z.B. Zugriffszähler).<span id="more-3848"></span></p>
<p>In einem Template würde man hierzu z.B. folgendes definieren:</p>
<pre class="light">page.10.marks.dynamik = COA_INT
page.10.marks.dynamik {
    10 = USER
    10.userFunc = funktion
}</pre>
<p>Umstände können es jedoch notwendig machen den Marker aus der Extension heraus zu befüllen, z.B. wenn sich der Inhalt des Markers aus anderen Daten ergibt, die ausserhalb der Extension nicht bekannt sein können. Dann muss obiger Code innerhalb der Extension generiert und ausgegeben werden. Dies kann mit folgendem PHP-Code erreicht werden:</p>
<pre class="light">function PageViewCounter() {
    $TS['conf']='COA_INT';
    $TS['conf.']['950']='USER';
    $TS['conf.']['950.']['userFunc']='funktion';
    $ret = $this-&gt;cObj-&gt;cObjGetSingle($TS['conf'],$TS['conf.']);
    return $ret;
}</pre>
<p>Abschliessend wird der Rückgabewert der Funktion in der Extension an einen Marker ausgeben:</p>
<pre class="light">$markerArray['###FIELD_CREATEDATE###'] = $this-&gt;funktionName</pre>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/typoscript-in-einer-extension-generieren/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Relevante Datenbankfelder bei Mehrsprachigkeit</title>
		<link>http://typo3blogger.de/relevante-datenbankfelder-bei-mehrsprachigkeit/</link>
		<comments>http://typo3blogger.de/relevante-datenbankfelder-bei-mehrsprachigkeit/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 21:44:02 +0000</pubDate>
		<dc:creator>Matthias Stübner</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Extension]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=3830</guid>
		<description><![CDATA[Kurze Beschreibung der Zusammenhänge bezüglich mehrsprachiger Seiten und Inhalten zum Selektieren von Seiten und Inhalten in eigenen Erweiterungen. Eine der häufigsten Funktionen von Erweiterungen in TYPO3 ist das Abfragen von Datensätzen aus der Datenbank. Dabei sind Seiten in der Tabelle pages gespeichert, die Inhalte in der Tabelle tt_content. Handelt es sich um eine einsprachige Website [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Kurze Beschreibung der Zusammenhänge bezüglich mehrsprachiger Seiten und Inhalten zum Selektieren von Seiten und Inhalten in eigenen Erweiterungen.<span id="more-3830"></span></p>
<p>Eine der häufigsten Funktionen von Erweiterungen in TYPO3 ist das Abfragen von Datensätzen aus der Datenbank. Dabei sind Seiten in der Tabelle pages gespeichert, die Inhalte in der Tabelle tt_content. Handelt es sich um eine einsprachige Website ist die Abfrage sehr einfach.</p>
<p>Nachdem die UID der relevanten Seite ermittelt oder vorgegeben wurde, können mit selbiger alle Datensätze aus der Tabelle tt_content abgefragt werden, bei denen das Feld PID gleich der UID der Seite ist. Damit stehen alle Seitenelemente zur Verfügung. Zusätzlich zur obigen Bedingung wird in den meisten Fällen auch noch getestet, ob die Elemente als gelöscht markiert sind oder anderen Zugriffsbeschränkungen unterliegen. Das ist unter anderem deshalb wichtig, da Seiten beim Löschen nicht aus der Tabelle tt_content entfernt, sondern nur das Feld <strong>deleted </strong>gesetzt wird.</p>
<p>Bei einer mehrsprachigen Site würde dieses Vorgehen jedoch alle Inhaltselemente der Seite als Ergebnis liefern, unabhängig davon welcher Sprache die einzelnen Inhalte zugeordnet sind. Daher müssen in einer mehrsprachigen Website weitere Felder beachtet werden.</p>
<p>Die Sprachen werden in der Tabelle sys_language abgespeichert. In dieser Tabelle steht die UID für den Wert der Sprache, welcher auch im L-Parameter zu finden ist und welcher in TS-Conditions anzugeben ist. Das Feld title repräsentiert den anzuzeigenden Namen, der Inhalt des Feldes flag die anzuzeigende Flagge.</p>
<p>Mit dem Wert UID aus der Tabelle sys_language steht nun fest nach welchem Wert zu fragen ist, wenn Inhaltselemente und Seiten einer bestimmten Sprache zu finden sind. Vorgegeben sei die Sprach-UID=1 und die Seiten-UID=12, zu der nun alle entsprechenden Daten (Titel der übersetzten Seite und Inhaltselemente) gefunden werden sollen.</p>
<p>Da Sprachvarianten einer Seite in der Tabelle page_language_overlay gespeichert sind, kann die Übersetzung hier gefunden werden, wenn nach PID=12 und sys_language_uid=1 gesucht wird. Diese Abfrage fördert für die Übersetzung alle Eigenschaften der übersetzten Seite. Die Eigenschaften sind die selben wie für eine originale Seite (hidden, deleted, navtitle usw.), welche natürlich in der Übersetzung von der originalen Seite abweichen kann.</p>
<p>Die Inhaltselemente der übersetzten Seite können ermittelt werden, indem aus der Tabelle tt_content alle Datensätze mit der pid=12 und der sys_language_uid=1 abgefragt werden. Die Datensätze mit pid=12 und sys_language_uid=0 wäre die Standardsprache, pid=12 und sys_language_uid=3 die Inhalte für die Sprache mit der UID=3. Welche Sprache dies ist beantwortet wiederum die Tabelle sys_language.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/relevante-datenbankfelder-bei-mehrsprachigkeit/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Relationen mit MM-Tabellen</title>
		<link>http://typo3blogger.de/relationen-mit-mm-tabellen/</link>
		<comments>http://typo3blogger.de/relationen-mit-mm-tabellen/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 21:38:53 +0000</pubDate>
		<dc:creator>Matthias Stübner</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Extension]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=3820</guid>
		<description><![CDATA[Dieser Artikel beschreibt einige Grundsätze für das Verknüpfen von Datensätzen über MM-Relationen. Relationen zwischen Datensätzen spielen in datenbankbasierten Anwendungen eine wichtige Rolle, spätestens wenn die Datensätze umfangreicher werden, bzw. Teilmengen der Daten an verschiedenen Stellen der Anwendung in verschiedenen Kontexten benötigt werden. Ein typischer Anwendungsfall ist ein Produkt, dem ein Hersteller zugeordnet werden soll. Hierzu [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Dieser Artikel beschreibt einige Grundsätze für das Verknüpfen von Datensätzen über MM-Relationen.</p>
<p>Relationen zwischen Datensätzen spielen in datenbankbasierten Anwendungen eine wichtige Rolle, spätestens wenn die Datensätze umfangreicher werden, bzw. Teilmengen der Daten an verschiedenen Stellen der Anwendung in verschiedenen Kontexten benötigt werden.</p>
<p>Ein typischer Anwendungsfall ist ein Produkt, dem ein Hersteller zugeordnet werden soll. Hierzu steht eine Auswahlliste zur Verfügung in welcher die verschiedenen Hersteller ausgewählt werden können, die dem Produkt zugeordnet sind.<span id="more-3820"></span></p>
<h2>Ansatz 1: Die kommaseparierte Liste</h2>
<p>An dieser Stelle existieren nun zwei verschiedene Wege, wie eine derartige Relation realisiert werden kann. Der &#8220;althergebrachte&#8221; Weg besteht darin, dass eine Liste der UIDs der Herstellerdatensätze in dem Feld des Produktdatensatzes gespeichert werden. Bei diesem Feld handelt es sich daher um ein Textfeld, in welchem die UIDs, mit Komma getrennt, eingetragen sind. Sollen nun die einzelnen Herstellernamen zusammen mit dem Produkt angezeigt werden, so muss der Inhalt des Datensatzfeldes geholt, in einzelne UIDs zerlegt und der Herstellername für jede einzelne UID aus der Herstellertabelle angefragt werden. Ein recht aufwendiger Weg, welcher sich nicht komplett mit SQL umsetzen lässt.</p>
<h2>Ansatz 2: Relationstabellen</h2>
<p>Der zweite Ansatz involviert eine zusätzliche Tabelle, die die Zuordnung der Datensätze der einzelnen Tabellen enthält. Diese Zuordnungstabelle enthält also die IDs der Produktdatensätze und die der Hersteller. Für jeden, dem Produkt zugeordneten Hersteller enthält diese Tabelle einen einzelnen Datensatz. Durch diese durchgängige Datenbanknormalisierung kann die Abfrage der Daten über die drei Tabellen (Produkt-, Hersteller- und Zuordnungstabelle mittels SQL erfolgen. Zeitgleich mit der Datenabfrage können weitere Kriterien und Filter in die SQL-Abfrage eingefügt werden, um die Datenabfrage weiter einzuschränken.</p>
<p>Um den Ansatz 2 weiter zu vereinfachen hat die <strong>Klasse t3lib_DB</strong> eine spezielle Funktion für diese MM-Abfrage. Der Namen der Funktion ist <strong>exec_SELECT_mm_query()</strong> welche die folgenden Parameter übernimmt:</p>
<ul>
<li>$select</li>
<li>$local_table</li>
<li>$mm_table</li>
<li>$foreign_table</li>
<li>$whereClause</li>
<li>$groupBy</li>
<li>$orderBy</li>
<li>$limit</li>
</ul>
<p>Die letzten vier Parameter, also angefangen mit $whereClause, haben jeweils Defaultwerte, können also bei Nichtgebrauch weggelassen werden.</p>
<p>Mit diesen Defaultwerten aufgerufen ist die Funktion sehr einfach anzuwenden:</p>
<pre>$res = $GLOBALS['TYPO3_DB']-&gt;exec_SELECT_mm_query(
 $select,
 $local_table,
 $mm_table,
 $foreign_table);</pre>
<p>Da die Funktion um den Aufbau einer MM-Relation in TYPO3 weiß, werden die Zuordnungen von lokaler und foreign UID automatisch beachtet. Dadurch dass ein JOIN über die Tabellen ausgeführt wird erhalten Sie als Ergebnis einen &#8220;Gesamtdatensatz&#8221; der also die Felder des Produktes und zusätzlich die Felder des Herstellers enthält. Dies ist der Fall bei dem Aufruf der folgenden Funktion.</p>
<pre>$ret = $GLOBALS['TYPO3_DB']-&gt;sql_fetch_assoc($res);</pre>
<p>Möchte man nun statt aller Werte nur einen betsimmten erhalten, so muss selbiger abschliessend aus dem Ergebnissarray entnommen werden.</p>
<pre>$manArray[$cnt] = $ret['manufacturer'];</pre>
<p>Wird obige Funktion in einer Schleife für jeden Ergebnisdatensatz ausgeführt, so entsteht ein Array mit allen Herstellernamen.</p>
<p><span style="text-decoration: underline;"><strong>Anmerkung</strong></span>: Wenn man eine MM-Relation im Kickstarter aufbau, so erhält die Produkttabelle ein Feld für die Relation. Allerdings wird in diesem Datenbankfeld KEIN Bezug zu einem Herstellerdatensatz eingesetzt. Die Zahl die Sie in diesem Datenbankfeld finden ist die Anzahl der in verbindung stehenden (Hersteller)-Datensätze. Haben Sie einem Produkt also vier Hersteller zugeordnet, so enthält das Feld die VIER. Dadurch kann ohne jeden weitern Aufwand abgefragt werden wieviele Hersteller ein Produkt ohne diese erst abfragen zu müssen.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/relationen-mit-mm-tabellen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Instantiieren einer Klasse mit Parametern</title>
		<link>http://typo3blogger.de/instantiieren-einer-klasse-mit-parametern/</link>
		<comments>http://typo3blogger.de/instantiieren-einer-klasse-mit-parametern/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 21:18:16 +0000</pubDate>
		<dc:creator>Matthias Stübner</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Extension]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://typo3blogger.de/?p=3813</guid>
		<description><![CDATA[Bei der Programmierung von Extensions soll anstelle der PHP-Funktion new() die TYPO3-Funktion makeInstance() benutzt werden. Was aber, wenn dem Konstruktor Parameter übergeben werden sollen? Die meisten Extensionen die für TYPO3 geschrieben werden, benutzen Klassenstrukturen statt eines prozeduralen Ansatzes. In Klassen gibt es für die Initialisierung und das abschliessende Aufräumen die Funktionen: function __construct() und function [...]<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></description>
			<content:encoded><![CDATA[<p>Bei der Programmierung von Extensions soll anstelle der PHP-Funktion new() die TYPO3-Funktion makeInstance() benutzt werden. Was aber, wenn dem Konstruktor Parameter übergeben werden sollen?<span id="more-3813"></span></p>
<p>Die meisten Extensionen die für TYPO3 geschrieben werden, benutzen Klassenstrukturen statt eines prozeduralen Ansatzes. In Klassen gibt es für die Initialisierung und das abschliessende Aufräumen die Funktionen:</p>
<ul>
<li>function __construct() und</li>
<li>function __destruct()</li>
</ul>
<p>Diese werden automatisch beim Erstellen (__construct()), bzw. Zerstören einer Instanz (__destruct()) aufgerufen.</p>
<p>In &#8220;normalem&#8221; PHP wird zum Erstellen einer Instanz die Funktion new(&#8216;Klassenname&#8217;); aufgerufen. Auch in einer Extension für TYPO3 wäre dies machbar, jedoch wird dringend davon abgeraten. Die Funktion new() erzeugt die Klasse nämlich direkt auf PHP-Weise, ohne dabei auf TYPO3-Spezifitäten wie XCLASSes einzugehen. Liegt eine Klasse als XCLASS vor und würde eine neue Instanz mit new() erzeugt, so würde die Erzeugung fehlschlagen.</p>
<p>Kommt dagegen makeInstance(&#8216;Klassenname&#8217;) zum Einsatz wird das Vorhandensein einer XCLASS geprüft und entsprechend beachtet. Bis zur Version 4.3 war es allerdings nicht möglich makeInstance(), und dadurch dem __construct(), weitere Parameter zu übergeben.</p>
<p>Vor der Version 4.3 war daher mittels des Funktionsaufrufes makeInstanceClassName(&#8216;Klassenname&#8217;) der korrekte Klassenname geprüft werden., welche den korrekten und geprüften Klassennamen zurück gibt (Im Falle einer XCLASS würde diesem Namen ein ux_ vorangestellt). Der Rückgabewert konnte dann risikofrei mit new() verwendet werden, wobei dem Konstruktor natürlich auch Parameter mitgegeben werden können.</p>
<p>Ab Version 4.3 ist dies nun wesentlich einfacher. Parameter können nun ohne obigem Umweg per makeInstance(&#8216;Klasse&#8217;,Param1,Param2, etc) übergeben werden. Diese werden an den eigentlichen Konstruktor mittels ReflectionClass-&gt;newInstanceArgs() übergeben.</p>
<p>------------------------------------------------------<br />Dies ist ein Post vom <a href="http://typo3blogger.de/">TYPO3 Blog</a> typo3blogger.de!</p>
]]></content:encoded>
			<wfw:commentRss>http://typo3blogger.de/instantiieren-einer-klasse-mit-parametern/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
