<?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 Blog - für TYPO3 Entwickler von TYPO3 Experten &#187; Michael</title>
	<atom:link href="http://blog.marit.ag/author/michael/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.marit.ag</link>
	<description>TYPO3 Entwicklung, TYPO3 Extensions, TypoScript, TYPO3 Installation und vieles mehr</description>
	<lastBuildDate>Fri, 27 Jan 2012 10:30:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>TYPO3 oder Magento Entwickeln auf Virtual Machines</title>
		<link>http://blog.marit.ag/2010/04/10/typo3-oder-magento-entwickeln-auf-virtual-machines/</link>
		<comments>http://blog.marit.ag/2010/04/10/typo3-oder-magento-entwickeln-auf-virtual-machines/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 14:15:53 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[typo3]]></category>
		<category><![CDATA[virtual machine]]></category>

		<guid isPermaLink="false">http://blog.marit.ag/?p=630</guid>
		<description><![CDATA[Gerade Webanwendungen mit komplizierten Versionsanforderungen lassen sich am besten auf einer virtualisierten Umgebung entwicklen. Mit Sun VirtualBox laufen einheitliche Images auf OSX und Windows Vista gleichermaßen. Für TYPO3 und Magento gibt es hier fertige Virtual Machines. Virtual Machine: www.virtualbox.org TYPO3 Image: http://www.evorion.hr/fileadmin/TYPO3_contrib/T3LAMPStack.tar Magento Image: www.magento-vm.de [Dieser Artikel wurde von einem Windows Vista Rechner &#38; VirtualBox [...]]]></description>
			<content:encoded><![CDATA[<p>Gerade Webanwendungen mit komplizierten Versionsanforderungen lassen sich am besten auf einer virtualisierten Umgebung entwicklen. Mit Sun VirtualBox laufen einheitliche Images auf OSX und Windows Vista gleichermaßen. Für TYPO3 und Magento gibt es hier fertige Virtual Machines. </p>
<p><span id="more-630"></span></p>
<p><strong>Virtual Machine:</strong><br />
<a href="http://www.virtualbox.org">www.virtualbox.org</a></p>
<p><strong>TYPO3 Image:</strong><br />
<a href="http://www.evorion.hr/fileadmin/TYPO3_contrib/T3LAMPStack.tar">http://www.evorion.hr/fileadmin/TYPO3_contrib/T3LAMPStack.tar</a></p>
<p><strong>Magento Image:</strong><br />
<a href="http://www.magento-vm.de">www.magento-vm.de</a></p>
<p>[Dieser Artikel wurde von einem Windows Vista Rechner &amp; VirtualBox mit Ubuntu GNOME verfasst <img src='http://blog.marit.ag/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ]</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.marit.ag/2010/04/10/typo3-oder-magento-entwickeln-auf-virtual-machines/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RealURL Configuration für tt_board</title>
		<link>http://blog.marit.ag/2010/02/20/realurl-configuration-fur-tt_board/</link>
		<comments>http://blog.marit.ag/2010/02/20/realurl-configuration-fur-tt_board/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 14:14:40 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://blog.marit.ag/?p=574</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<pre class="brush: php; title: ; notranslate">'forum'=&gt; array(
	array(
		'GETvar' =&gt; 'tt_board_uid',
		'lookUpTable' =&gt; array(
			'table' =&gt; 'tt_board',
			'id_field' =&gt; 'uid',
			'alias_field' =&gt;; 'subject',
			'addWhereClause' =&gt; ' AND NOT deleted',
			'useUniqueCache' =&gt; 1,
			'useUniqueCache_conf' =&gt; array(
				'strtolower' =&gt;; 1,
				'spaceCharacter' =&gt; '-',
			),
		),
	),
),</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.marit.ag/2010/02/20/realurl-configuration-fur-tt_board/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mobile (Iphone) Firmen-Präsentation in TYPO3</title>
		<link>http://blog.marit.ag/2010/02/10/mobile-iphone-firmen-prasentation-in-typo3/</link>
		<comments>http://blog.marit.ag/2010/02/10/mobile-iphone-firmen-prasentation-in-typo3/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 18:45:53 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[slider]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[typo3]]></category>

		<guid isPermaLink="false">http://blog.marit.ag/?p=554</guid>
		<description><![CDATA[Wir haben aktuell eine Idee, unsere Agenturpräsentation auf das Iphone zu bringen. Da sich die serielle Präsentationsform eignet, erstellen wir optimierte Slides nach Powerpoint-Logik als PNG Bilder, und stellen diese als Mobile-Präsentation dar. Am besten gleich mit Photoshop auf die optimale Größe 320&#215;480 erstellen! Und damit das ganze auch einfach ist, soll es in TYPO3 [...]]]></description>
			<content:encoded><![CDATA[<p>Wir haben aktuell eine Idee, unsere Agenturpräsentation auf das Iphone zu bringen. Da sich die serielle Präsentationsform eignet, erstellen wir optimierte Slides nach Powerpoint-Logik als PNG Bilder, und stellen diese als Mobile-Präsentation dar. Am besten gleich mit Photoshop auf die optimale Größe 320&#215;480 erstellen! Und damit das ganze auch einfach ist, soll es in TYPO3 bearbeitbar sein:</p>
<p><span id="more-554"></span></p>
<p>1. Als erstes auf einer neuen Seite eine neues Seitentemplate einstellen (CSS-Styled-Content einbinden):</p>
<pre class="brush: plain; title: ; notranslate">
#genug breite
styles.content.imgtext.maxW = 100000
tt_content.image.20.maxW = 100000
page = PAGE
#jquery muss am Platz sein
page.includeJS.file1 = fileadmin/template/js/jquery-1.4.min.js
#folgende Dateien werden weiter unten im Artikel beschrieben
page.includeCSS.file1 = fileadmin/template/css/mobile_slider.css
page.includeJS.file2 = fileadmin/template/js/mobile_slider.js
page.5 = TEXT
page.5.value=&lt;div id=&quot;slider&quot;&gt;&lt;div id=&quot;mask&quot;&gt;
page.10 &lt; styles.content.get
page.15 = TEXT
page.15.value=&lt;/div&gt;&lt;/div&gt;
</pre>
<p>Warum die ganze Div-Parade notwendig ist:<br />
<a href="http://blog.marit.ag/wp-content/uploads/mask-theory1.png" rel="lightbox[554]"><img src="http://blog.marit.ag/wp-content/uploads/mask-theory1-300x247.png" alt="" width="300" height="247" class="alignleft size-medium wp-image-556" /></a><br />
Die Logik ist geliehen von: <a href="http://css-tricks.com/create-a-slick-iphonemobile-interface-from-any-rss-feed/">http://css-tricks.com/create-a-slick-iphonemobile-interface-from-any-rss-feed/</a></p>
<p>2. Dann ein Image-Element in der Mittleren Spalte platzieren mit mehreren Bildern füllen, eine Reihe je Bild:<br />
<a href="http://blog.marit.ag/wp-content/uploads/FireShot-capture-521-Marit-AG-TYPO3-4_3_1-relaunch_marit_ag_typo3_backend_php.gif" rel="lightbox[554]"><img src="http://blog.marit.ag/wp-content/uploads/FireShot-capture-521-Marit-AG-TYPO3-4_3_1-relaunch_marit_ag_typo3_backend_php-300x237.gif" alt="" width="300" height="237" class="alignleft size-medium wp-image-555" /></a></p>
<p>3. Dann jQuery einbinden</p>
<p>4. Dann die Datei mobile_slider.js:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){
	$('img:not(:last)').click(function() {
		$(&quot;#mask&quot;).animate({left: &quot;-=320px&quot;});
	});
	$('img:last').click(function() {
		$(&quot;#mask&quot;).animate({left: &quot;0px&quot;});
	});
});
</pre>
<p>Dann die Datei mobile_slider.css:</p>
<pre class="brush: css; title: ; notranslate">
* {margin: 0 !important;}
#slider { width: 320px; overflow: hidden; position: relative; }
#mask { width: 1280px; position: relative; left: 0px;}
.csc-textpic-image { width: 320px; float: left; overflow: hidden;}
</pre>
<p>Und fertig!</p>
<p>Leider sind die Bildhöhen und Größen noch nicht perfekt justiert, da gebe ich ein Update, wenn wir weiter sind.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.marit.ag/2010/02/10/mobile-iphone-firmen-prasentation-in-typo3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Powermail Validierung mit jQuery</title>
		<link>http://blog.marit.ag/2010/01/23/powermail-validierung-mit-jquery/</link>
		<comments>http://blog.marit.ag/2010/01/23/powermail-validierung-mit-jquery/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 15:46:09 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://blog.marit.ag/?p=514</guid>
		<description><![CDATA[Powermail hat als Validatoren nur Mootools oder Prototype. Wer auf jQuery setzt, hat entsprechend Pech gehabt, da sich die Frameworks gegenseitig beißen. Abhilfe verschafft folgendes Setting, mit dem man für alle Powermail-Formulare jQuery an die Kette nimmt: Constants: plugin.powermail { libraryToUse = mootools } Setup: [userFunc = user_powermailOnCurrentPage] page.1203244 = TEXT page.1203244.value = jQuery.noConflict(); [end] [...]]]></description>
			<content:encoded><![CDATA[<p>Powermail hat als Validatoren nur Mootools oder Prototype. Wer auf jQuery setzt, hat entsprechend Pech gehabt, da sich die Frameworks gegenseitig beißen.</p>
<p><span id="more-514"></span></p>
<p>Abhilfe verschafft folgendes Setting, mit dem man für alle Powermail-Formulare jQuery an die Kette nimmt:</p>
<p><code> </code></p>
<pre><strong>Constants</strong>:
plugin.powermail {
	libraryToUse = mootools
}</pre>
<p><code> </code></p>
<pre><strong>Setup</strong>:
[userFunc = user_powermailOnCurrentPage]
page.1203244 = TEXT
page.1203244.value = jQuery.noConflict();
[end]</pre>
<p>Leider funktionieren dann auf der einzelnen Seite die jQuery Funktionen nicht mehr.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.marit.ag/2010/01/23/powermail-validierung-mit-jquery/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Powersearch Indizierung von tt_news</title>
		<link>http://blog.marit.ag/2010/01/18/powersearch-indizierung-von-tt_news/</link>
		<comments>http://blog.marit.ag/2010/01/18/powersearch-indizierung-von-tt_news/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 19:10:00 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[powersearch]]></category>

		<guid isPermaLink="false">http://blog.marit.ag/?p=493</guid>
		<description><![CDATA[Ich habe mir kurz Zeit genommen, und die Indizierung der Powersearch Extension für tt_news umgesetzt: /powersearch/lib/class.PowerSearch.php anfügen: const TTNEWS = 8; /powersearchindexlucene/ext_conf_template.txt anfügen: # cat=basic/enable; type=string; label=tt_news detailpage tt_newsPage = 3594 /powersearchindexlucene/lib/class.PowerSearchIndexerTTnews.php neu: class PowerSearchIndexerTTnews extends PowerSearchIndexerBase { public function run($extConf) { $dbh = PowerSearchFactory::createPDO(); $stmt = 'SELECT tt_news.uid, tt_news.datetime, tt_news.crdate, tt_news.title, tt_news.short, tt_news.bodytext FROM [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe mir kurz Zeit genommen, und die Indizierung der Powersearch Extension für tt_news umgesetzt:</p>
<p><span id="more-493"></span></p>
<p><strong>/powersearch/lib/class.PowerSearch.php anfügen:</strong><br />
<code>
<pre>const TTNEWS = 8;</pre>
<p></code></p>
<p><strong>/powersearchindexlucene/ext_conf_template.txt anfügen:</strong><br />
<code>
<pre># cat=basic/enable; type=string; label=tt_news detailpage
tt_newsPage = 3594</pre>
<p></code></p>
<p><strong>/powersearchindexlucene/lib/class.PowerSearchIndexerTTnews.php neu:</strong><br />
<code>
<pre>class PowerSearchIndexerTTnews extends PowerSearchIndexerBase
{
	public function run($extConf)
	{
		$dbh = PowerSearchFactory::createPDO();

		$stmt = 'SELECT	tt_news.uid,
								tt_news.datetime,
								tt_news.crdate,
								tt_news.title,
								tt_news.short,
								tt_news.bodytext

					FROM		tt_news
					WHERE		tt_news.hidden + tt_news.deleted=0';

		$res = $dbh-&gt;query($stmt);
		foreach ($res as $news) {

			$title = trim(iconv("UTF-8","ISO-8859-1", str_replace('ÃŸ','ss',$news['title'])));
			$bodytext = trim(iconv("UTF-8","ISO-8859-1", str_replace('ÃŸ','ss',$news['bodytext'])));
			$crdate = (intval($news['datetime'])&gt;0?intval($news['datetime']):intval($news['crdate']));
			$news_id = $news['uid'];

			if (trim($bodytext) != '') {
				$elements = array(
					'ref' =&gt; $extConf['tt_newsPage'].'#'.$news_id.'#'.$crdate,
					'type' =&gt; PowerSearch::TTNEWS,
					'text' =&gt; $this-&gt;prepareText($bodytext . ' ' . $title),
					'extract' =&gt; PowerSearchUtils::limit($this-&gt;prepareText($bodytext), $extConf['index_limit_extract']),
					'title' =&gt; PowerSearchUtils::limit($this-&gt;prepareText($title), $extConf['index_limit_title']),
					'crdate' =&gt; $crdate
				);

				$doc = $this-&gt;createDocument($elements);
				$this-&gt;addDocument($doc);
			}
		}
	}
}
</pre>
<p></code></p>
<p><strong>/powersearchui/pi1/template.html anfügen:</strong><br />
<code>
<pre>
<!-- ###RESULTTTNEWS### -->
&lt;div class="news-list-container"&gt;
	&lt;div class="news-list-item"&gt;&lt;span class="news-latest-date"&gt;###DATE###&lt;/span&gt;
		&lt;div class="clear"&gt;&lt;/div&gt;
		&lt;h3&gt;&lt;a href="###LINK###"&gt;###TITLE###&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;###EXTRACT###&lt;/p&gt;
	&lt;/div&gt;
&lt;/div&gt;
<!-- ###RESULTTTNEWS### -->
</pre>
<p></code></p>
<p><strong>/powersearchui/lib/class.PowerSearchUITemplateTTnews.php neu:</strong><br />
<code>
<pre>class PowerSearchUITemplateTTnews extends PowerSearchUITemplateBase implements PowerSearchUITemplateInterface
{
	protected $template = '';

	public function setTemplate( &amp;$template )
	{
		$this-&gt;template = $this-&gt;t3base-&gt;cObj-&gt;getSubpart( $template, '###RESULTTTNEWS###' );
	}

	public function getString( array &amp;$items, array &amp;$list )
	{
		$format = '%A, %d. %B %Y';

		foreach( $items as $key =&gt; $item )
		{
			list($page,$ttnewsid,$crdate) = explode('#',$key,3);
			$item[1]['###DATE###'] = strftime  ($format,$crdate);
			$baseurl = ($GLOBALS['TSFE']-&gt;tmpl-&gt;setup['config.']['baseURL'] ? $GLOBALS['TSFE']-&gt;tmpl-&gt;setup['config.']['baseURL'] : 'http://'.$_SERVER['HTTP_HOST'].'/');
			$item[1]['###LINK###'] = $this-&gt;t3base-&gt;pi_getPageLink($page,'',array('tx_ttnews[tt_news]'=&gt;$ttnewsid,'tx_ttnews[year]'=&gt;strftime('%Y',$crdate),'tx_ttnews[month]'=&gt;strftime('%m',$crdate),'tx_ttnews[day]'=&gt;strftime('%d',$crdate)));
			$list[$item[0]] = $this-&gt;t3base-&gt;cObj-&gt;substituteMarkerArray( $this-&gt;template, $item[1] );
		}
	}
}
</pre>
<p></code></p>
<p><strong>/powersearchui/lib/class.PowerSearchUIFactory.php anfügen:</strong><br />
<code>
<pre>case PowerSearch::TTNEWS:
$class = 'PowerSearchUITemplateTTnews'; break;
</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.marit.ag/2010/01/18/powersearch-indizierung-von-tt_news/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mobile Templates mit htaccess rewriting</title>
		<link>http://blog.marit.ag/2010/01/07/mobile-templates-mit-htaccess-rewriting/</link>
		<comments>http://blog.marit.ag/2010/01/07/mobile-templates-mit-htaccess-rewriting/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 17:29:09 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[htc]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[rewrite]]></category>

		<guid isPermaLink="false">http://blog.marit.ag/?p=486</guid>
		<description><![CDATA[Templates für mobile Endgeräte lassen sich relativ leicht erstellen, hier müssen alle essenziellen Funktionen auf 320×480(+x) passen. Wenn allerdings niemand diese Templates findet &#8211; ergo &#8211; nutzt, ist mit einem cleveren Routing geholfen: #####Mobile devices routing####### #Mobile devices routing RewriteCond %{HTTP_HOST} www\.domain\.de$ [NC] RewriteCond %{HTTP_ACCEPT} ^.*html.*$ [NC] RewriteCond %{HTTP_USER_AGENT} (HTC&#124;Ericsson&#124;BlackBerry&#124;Nokia&#124;iPhone&#124;Mobile) [NC] RewriteRule ^(.*)$ http://m.domain.de/$1 [L,R=301] [...]]]></description>
			<content:encoded><![CDATA[<p>Templates für mobile Endgeräte lassen sich relativ leicht erstellen, hier müssen alle essenziellen Funktionen auf 320×480(+x) passen.</p>
<p><span id="more-486"></span></p>
<p>Wenn allerdings niemand diese Templates findet &#8211; ergo &#8211; nutzt, ist mit einem cleveren Routing geholfen:</p>
<blockquote><p>
#####Mobile devices routing#######<br />
#Mobile devices routing<br />
RewriteCond %{HTTP_HOST} www\.domain\.de$ [NC]<br />
RewriteCond %{HTTP_ACCEPT} ^.*html.*$ [NC]<br />
RewriteCond %{HTTP_USER_AGENT} (HTC|Ericsson|BlackBerry|Nokia|iPhone|Mobile) [NC]<br />
RewriteRule ^(.*)$ http://m.domain.de/$1 [L,R=301]</p>
<p>#m.domain.de nur für mobile clients erlauben<br />
RewriteCond %{HTTP_HOST} m\.domain\.de$ [NC]<br />
RewriteCond %{HTTP_ACCEPT} ^.*html.*$ [NC]<br />
RewriteCond %{HTTP_USER_AGENT} !(HTC|Ericsson|BlackBerry|Nokia|iPhone|Mobile) [NC]<br />
RewriteRule ^(.*)$ http://www.domain.de/$1 [L,R=301]
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.marit.ag/2010/01/07/mobile-templates-mit-htaccess-rewriting/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tipafriend für die selbe Seite</title>
		<link>http://blog.marit.ag/2010/01/06/tipafriend-fur-die-selbe-seite/</link>
		<comments>http://blog.marit.ag/2010/01/06/tipafriend-fur-die-selbe-seite/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 13:44:16 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[tipafriend]]></category>
		<category><![CDATA[typo3]]></category>

		<guid isPermaLink="false">http://blog.marit.ag/?p=483</guid>
		<description><![CDATA[Bekanntes Problem bei TipAFriend, es funktioniert nur, wenn ein Link als Post-Parameter übergeben wurde. Schön ist aber auch die Funktion, dass als letztes Seitenelement einer Inhaltsseite das TipAFriend Formular eingebunden werden soll. Hier ein Patch für die PI-Class, der dies Möglich macht. Nun kann man mit dem bisher unsinnigen BE-Feld &#8220;Startingpoint&#8221; eine Seite auswählen, die [...]]]></description>
			<content:encoded><![CDATA[<p>Bekanntes Problem bei TipAFriend, es funktioniert nur, wenn ein Link als Post-Parameter übergeben wurde.</p>
<p><span id="more-483"></span></p>
<p>Schön ist aber auch die Funktion, dass als letztes Seitenelement einer Inhaltsseite das TipAFriend Formular eingebunden werden soll.</p>
<p>Hier ein Patch für die PI-Class, der dies Möglich macht.  Nun kann man mit dem bisher unsinnigen BE-Feld &#8220;Startingpoint&#8221; eine Seite auswählen, die verschickt werden soll. Wird keine angegeben und auch kein POST übergeben, so wird die aktuelle Seite weitergeleitet.</p>
<p><a href='http://blog.marit.ag/wp-content/uploads/class.tx_tipafriend.patch.txt'>class.tx_tipafriend.patch</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.marit.ag/2010/01/06/tipafriend-fur-die-selbe-seite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TYPO3 und Content delivery networks</title>
		<link>http://blog.marit.ag/2009/11/17/typo3-und-content-delivery-networks/</link>
		<comments>http://blog.marit.ag/2009/11/17/typo3-und-content-delivery-networks/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 11:18:41 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[TYPO3 Extensions]]></category>
		<category><![CDATA[TYPO3 Technik]]></category>

		<guid isPermaLink="false">http://blog.marit.ag/?p=419</guid>
		<description><![CDATA[Wir hatten diesmal in einem Projekt die Idee, statische Inhalte nicht vom selben Server zu laden, wo auch PHP prozessiert wird. Daher wurde dann ein Cookie-freier, Caching-optimierter Server zur Auslieferung von Statischen Dateien konfiguriert. Dabei hatten wir uns folgende Vorteile versprochen: Alte Browser können Daten schneller laden Etwas schnellere Auslieferung der statischen Dateien Bessere Leistungsergebnisse [...]]]></description>
			<content:encoded><![CDATA[<p>Wir hatten diesmal in einem Projekt die Idee, statische Inhalte nicht vom selben Server zu laden, wo auch PHP prozessiert wird. Daher wurde dann ein Cookie-freier, Caching-optimierter Server zur Auslieferung von Statischen Dateien konfiguriert.</p>
<p><span id="more-419"></span></p>
<p>Dabei hatten wir uns folgende Vorteile versprochen:</p>
<ol>
<li>Alte Browser können Daten schneller laden</li>
<li>Etwas schnellere Auslieferung der statischen Dateien</li>
<li>Bessere Leistungsergebnisse unter hoher Last</li>
<li>Entlastung für den www-Server</li>
<li>Schnellere Seitenauslieferung von HTML-Dateien</li>
<li>Schnellere PHP-Prozessierung</li>
</ol>
<p>Mit der Extension <a title="ja_replacer" href="http://typo3.org/extensions/repository/view/ja_replacer/current/">ja_replacer</a> konnten wir die Anforderung in TYPO3 umsetzen:</p>
<ol>
<li>Alle Statischen Dateien sollen von static.domain.com ausgeliefert werden</li>
<li>Sichere Verbindungen müssen berücksichtigt werden</li>
<li>Statisches Caching muss weiterhin funktionieren</li>
</ol>
<p>Die Stelle, wo Ja_replacer ansetzt, ist direkt am Output von TYPO3, also kurz bevor ausgeliefert, bzw. in den Cache geschrieben wird. An dieser Stelle können nochmals beliebige Strings gesucht und ersetzt werden. Das Setup wird per TYPOScript gemacht, wir ersetzen in unserem Fall alle Links zu den einschlägigen Verzeichnissen, in welchen sich statische Infos aufhalten:</p>
<pre>
#Welche Links sollen ersetzt werden? (jeweils mit und ohne Slash am Anfang)
config.tx_ja_replacer.search {
	10="/typo3temp/
	11="typo3temp/
	12="/fileadmin/
	13="fileadmin/
	14="/typo3conf/
	15="typo3conf/
}

#Mit was soll ersetzt werden, wenn im unsicheren Bereich (http)
tx_ja_replacer.unsecure = COA
tx_ja_replacer.unsecure {
	10="http://static.domain.com/typo3temp/
	11="http://static.domain.com/typo3temp/
	12="http://static.domain.com/fileadmin/
	13="http://static.domain.com/fileadmin/
	14="http://static.domain.com/typo3conf/
	15="http://static.domain.com/typo3conf/
}

#Mit was soll ersetzt werden, wenn im sicheren Bereich (https)
tx_ja_replacer.secure = COA
tx_ja_replacer.secure {
	10="https://static.domain.com/typo3temp/
	11="https://static.domain.com/typo3temp/

	12="https://static.domain.com/fileadmin/
	13="https://static.domain.com/fileadmin/

	14="https://static.domain.com/typo3conf/
	15="https://static.domain.com/typo3conf/
}

#Domain Setup:
[globalString = ENV:HTTP_HOST = www.domain.com]
	#normalfall, wird statisch gecached
	page.config.baseURL = http://www.domain.com/
	config.tx_ja_replacer.replace &lt; tx_ja_replacer.unsecure
[global]
[globalString = ENV:HTTP_HOST = www.domain.com] &amp;&amp; [globalString = _SERVER|HTTPS=on]
	page.config.baseURL = https://www.domain.com/
	config.tx_ja_replacer.replace &lt; tx_ja_replacer.secure
[global]
</pre>
<p>Wenn wir die Leistungsergebnisse gemessen haben, werde ich an dieser Stelle nochmal einen Bericht anfügen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.marit.ag/2009/11/17/typo3-und-content-delivery-networks/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Cal Base Realurl Configuration</title>
		<link>http://blog.marit.ag/2009/10/06/cal-base-realurl-configuration/</link>
		<comments>http://blog.marit.ag/2009/10/06/cal-base-realurl-configuration/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 10:46:03 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://blog.marit.ag/?p=400</guid>
		<description><![CDATA[Das skurille Problem des Standardsettings war, dass Orte und Veranstalter wie Veranstaltungen umgeschlüsselt wurden. Da sind durch das MVC Pattern zwei Dinge vermischt worden, die nicht zusammengehören. Hier macht sich der Einsatz des RealURL Parameters prevValueInList ganz gut. Hier können wir pro Fall einen unterschiedlichen Wert auslesen. Für eine saubere Konfiguration des Calendar Base (Cal) [...]]]></description>
			<content:encoded><![CDATA[<p>Das skurille Problem des Standardsettings war, dass Orte und Veranstalter wie Veranstaltungen umgeschlüsselt wurden. Da sind durch das MVC Pattern zwei Dinge vermischt worden, die nicht zusammengehören. Hier macht sich der Einsatz des RealURL Parameters <em>prevValueInList</em> ganz gut. Hier können wir pro Fall einen unterschiedlichen Wert auslesen.</p>
<p><span id="more-400"></span></p>
<p>Für eine saubere Konfiguration des Calendar Base (Cal) verwenden wir folgende Einstellung:</p>
<p><code>
<pre>
'termin'=&gt; array(
	array(
		'GETvar' =&gt; 'tx_cal_controller[view]',
	),
	array(
		'GETvar' =&gt; 'tx_cal_controller[getdate]'
	),

	array(
		'GETvar' =&gt; 'tx_cal_controller[type]'
	),

	array(
<strong>		'cond' =&gt; array (
			'prevValueInList' =&gt; 'tx_cal_phpicalendar'
		),</strong>
		'GETvar' =&gt; 'tx_cal_controller[uid]',
		'lookUpTable' =&gt; array(
			'table' =&gt; 'tx_cal_event',
			'id_field' =&gt; 'uid',
			'alias_field' =&gt; 'title',
			'addWhereClause'  =&gt; ' AND NOT deleted',
			'useUniqueCache' =&gt; 1,
			'useUniqueCache_conf' =&gt; array(
				'strtolower' =&gt; 1,
				'spaceCharacter' =&gt; '-',
			),
		),
	),
	array(
<strong>		'cond' =&gt; array (
			'prevValueInList' =&gt; 'tx_cal_organizer'
		),</strong>
		'GETvar' =&gt; 'tx_cal_controller[uid]',
		'lookUpTable' =&gt; array(
			'table' =&gt; 'tx_cal_organizer',
			'id_field' =&gt; 'uid',
			'alias_field' =&gt; 'name',
			'addWhereClause'  =&gt; ' AND NOT deleted',
			'useUniqueCache' =&gt; 1,
			'useUniqueCache_conf' =&gt; array(
				'strtolower' =&gt; 1,
				'spaceCharacter' =&gt; '-',
			),
		),
	),
	array(
<strong>		'cond' =&gt; array (
			'prevValueInList' =&gt; 'tx_cal_location'
		),</strong>
		'GETvar' =&gt; 'tx_cal_controller[uid]',
		'lookUpTable' =&gt; array(
			'table' =&gt; 'tx_cal_location',
			'id_field' =&gt; 'uid',
			'alias_field' =&gt; 'name',
			'addWhereClause'  =&gt; ' AND NOT deleted',
			'useUniqueCache' =&gt; 1,
			'useUniqueCache_conf' =&gt; array(
				'strtolower' =&gt; 1,
				'spaceCharacter' =&gt; '-',
			),
		),
	),
	array(
		'GETvar' =&gt; 'tx_cal_controller[category]',
		'lookUpTable' =&gt; array(
			'table' =&gt; 'tx_cal_category',
			'id_field' =&gt; 'uid',
			'alias_field' =&gt; 'title',
			'addWhereClause'  =&gt; ' AND NOT deleted',
			'useUniqueCache' =&gt; 1,
			'useUniqueCache_conf' =&gt; array(
				'strtolower' =&gt; 1,
				'spaceCharacter' =&gt; '-',
			 ),

		),
	),
	array(
		'GETvar' =&gt; 'tx_cal_controller[lastview]'
	),
),
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.marit.ag/2009/10/06/cal-base-realurl-configuration/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Nützliche Tools, die nicht jeder kennt</title>
		<link>http://blog.marit.ag/2009/10/02/nutzliche-tools-die-nicht-jeder-kennt/</link>
		<comments>http://blog.marit.ag/2009/10/02/nutzliche-tools-die-nicht-jeder-kennt/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 16:49:07 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://blog.marit.ag/?p=397</guid>
		<description><![CDATA[Charles Web Debugging Proxy Ein nettes kostenfreies Debugging-Program für Browserrequests aller Art. Besonders praktisch für Ajax- und Flash Entwicklung. Auch beliebt, um Redirects zu prüfen: http://www.charlesproxy.com/ Balsamiq Mockups Auf Adobe-Air basiertes Wireframing Tool, kostenlos benutzbar. http://www.balsamiq.com/products/mockups UN.CO.VER Kostenloser Unique-Content Verifyer http://www.textbroker.de/uncover/ Mindjet Mindmanager Pro Sehr gutes, kostenpflichtiges Mindmapping Tool http://www.mindjet.com/de-DE/ Chandler Schöner, kostenloser Self-Organizer mit [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Charles Web Debugging Proxy</strong></p>
<p>Ein nettes kostenfreies Debugging-Program für Browserrequests aller Art. Besonders praktisch für Ajax- und Flash Entwicklung. Auch beliebt, um Redirects zu prüfen:</p>
<p><span id="more-397"></span></p>
<p><a href="http://www.charlesproxy.com/">http://www.charlesproxy.com/</a></p>
<p><strong>Balsamiq Mockups</strong></p>
<p>Auf Adobe-Air basiertes Wireframing Tool, kostenlos benutzbar.</p>
<p><a href="http://www.balsamiq.com/products/mockups">http://www.balsamiq.com/products/mockups</a></p>
<p><strong>UN.CO.VER</strong></p>
<p>Kostenloser Unique-Content Verifyer</p>
<p><a href="http://www.textbroker.de/uncover/">http://www.textbroker.de/uncover/</a></p>
<p><strong>Mindjet Mindmanager Pro</strong></p>
<p>Sehr gutes, kostenpflichtiges Mindmapping Tool</p>
<p><a href="http://www.mindjet.com/de-DE/">http://www.mindjet.com/de-DE/</a></p>
<p><strong>Chandler</strong></p>
<p>Schöner, kostenloser Self-Organizer mit vielen Schnittstellen</p>
<p><a href="http://chandlerproject.org/">http://chandlerproject.org/</a></p>
<p><strong>RegExr</strong></p>
<p>Gutes Tool zum Testen von Regular Expressions</p>
<p><a href="http://www.gskinner.com/RegExr/">http://www.gskinner.com/RegExr/</a></p>
<p><strong>Dropbox</strong></p>
<p>Vollintegrierendes Tool zum  File Synchronisieren über mehrere Rechner, Online Backups, File-Sharing</p>
<p><a href="https://www.getdropbox.com/referrals/NTUzNjU3MDk">https://www.getdropbox.com/</a></p>
<p><strong>Foxit Reader</strong></p>
<p>Rasend Schneller PDF-Viewer. Wenn Adobe Acrobat wieder mal nerft&#8230;</p>
<p><a href="http://foxit-pdf-reader.softonic.de/">http://foxit-pdf-reader.softonic.de/</a></p>
<p><strong>Pants-Off</strong></p>
<p>Kann die Inhalte manche Passwortfelder sichtbar machen. Absolut notwendig, wenn mal wieder  ***** benötigt wird.</p>
<p><a href="http://www.scendix.de/pantsoff/index.php4">http://www.scendix.de/pantsoff/index.php4</a></p>
<p><strong>GSA Email Spider</strong></p>
<p>Durchsucht Websites nach E-Mailadressen</p>
<p><a href="http://www.softpedia.com/get/Internet/E-mail/Mail-Utilities/GSA-EMail-Spider.shtml">http://www.softpedia.com/get/Internet/E-mail/Mail-Utilities/GSA-EMail-Spider.shtml</a></p>
<p><strong>Twitterfeed</strong></p>
<p>Befüllt automatisiert Twitter-Accounts mit RSS-Feeds</p>
<p><a href="http://twitterfeed.com/">http://twitterfeed.com/</a></p>
<p><strong>HURL</strong></p>
<p>Testen von HTTP-Requests mit bestimmten Headern</p>
<p><a href="http://hurl.r09.railsrumble.com/">http://hurl.r09.railsrumble.com/</a></p>
<p><strong>Regain</strong></p>
<p>Lucene Suchmaschine für Files und Verzeichnisse</p>
<p><a href="http://regain.sourceforge.net/">http://regain.sourceforge.net/</a></p>
<p><strong>Mailingcheck</strong></p>
<p>Prüft Mails auf Spam-Rating</p>
<p><a href="http://www.mailingcheck.com/">http://www.mailingcheck.com/</a></p>
<p>Was sind deine Favoriten? Kommentare willkommen!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.marit.ag/2009/10/02/nutzliche-tools-die-nicht-jeder-kennt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

