<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		
		<title>T3node - TYPO3 blog by Steffen Müller</title>
		<link>http://www.t3node.com/</link>
		<description>Blog about TYPO3, LAMP, HTML, CSS and other web topics</description>
		<language>en</language>
		<image>
			<title>T3node - TYPO3 blog by Steffen Müller</title>
			<url>http://www.t3node.com/fileadmin/template/rssicon.gif</url>
			<link>http://www.t3node.com/</link>
			<width>32</width>
			<height>32</height>
			<description>Blog about TYPO3, LAMP, HTML, CSS and other web topics</description>
		</image>
		<generator>TYPO3 - get.content.right</generator>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		
		
		
		<lastBuildDate>Sat, 15 Oct 2011 12:06:00 +0200</lastBuildDate>
		
		
		<item>
			<title>Automaketemplate is dead, long live FLUIDTEMPLATE!</title>
			<link>http://www.t3node.com/blog/automaketemplate-is-dead-long-live-fluidtemplate/</link>
			<description>Here comes another article by guest author Tomaž Zaman. He demonstrates the mapping of TypoScript with Fluid/HTML Templates using the FLUIDTEMPLATE cObject. He also delivers some easy to understand example code, which includes support for backend layouts (grids).</description>
			<content:encoded><![CDATA[I'm sure at some point of your TYPO3 experience, you've wondered whether it would be better to use the Automaketemplate or Templavoila! for your template needs. I've used both of them and each has it's pros and cons, which I won't discuss in this post.<br />This post is about introducing the new, latest and greatest way of integrating your oh-so awesome templates in TYPO3! I'm sure you've heard of it by now: FLUIDTEMPLATE!
It uses the Fluid templating language (backport from FLOW3 framework, coming on October 20th) that comes as a system extension from TYPO3 4.3 on but it still seems many developers don't know- or use it. The second part of this approach are Backend layouts (grids) that are a part of TYPO3 core as well.
<h3>TypoScript FLUIDTEMPLATE cObject</h3>
Without further ado, here's the page object that utilizes FLUIDTEMPLATE:
<pre>page = PAGE<br />page{<br />&nbsp;&nbsp; typeNum = 0&nbsp;&nbsp; <br />&nbsp;&nbsp; 10 = FLUIDTEMPLATE<br />&nbsp;&nbsp; 10 {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; partialRootPath = fileadmin/templates/partials/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; layoutRootPath = fileadmin/templates/layouts/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file.stdWrap.cObject = CASE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file.stdWrap.cObject {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; key.data = levelfield:-1, backend_layout_next_level, slide<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; key.override.field = backend_layout<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default = TEXT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default.value = fileadmin/templates/home.html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 = TEXT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.value = fileadmin/templates/sub.html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; variables {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; left &lt; styles.content.get<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; left.select.where = colPos=1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; content &lt; styles.content.get&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; right &lt; styles.content.get<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; right.select.where = colPos=2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp; }<br />}</pre>
Notice the file selection is based on what the current BE grid is used, so you can define multiple layouts. Of course in order for this to work, you need to define a few backend grids and remember their UIDs because those are used as keys in the CASE cObject above.
<h3>Fluid/HTML Template</h3>
Next, let's look at the home.html which is used in this example:
<pre>&lt;div&nbsp;id=&quot;wrap&quot;&gt;<br>&nbsp;&nbsp;&lt;div&nbsp;id=&quot;menu&quot;&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;f:cObject&nbsp;typoscriptObjectPath=&quot;lib.navigation&quot;&nbsp;/&gt;<br>&nbsp;&nbsp;&lt;/div&gt;<br>&nbsp;&nbsp;&lt;div&nbsp;id=&quot;left&quot;&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;f:format.html&nbsp;parseFuncTSPath=&quot;lib.parseFunc&quot;&gt;{left}&lt;/f:format.html&gt;<br>&nbsp;&nbsp;&lt;/div&gt;<br>&nbsp;&nbsp;&lt;div&nbsp;id=&quot;content&quot;&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;f:format.html&nbsp;parseFuncTSPath=&quot;lib.parseFunc&quot;&gt;{content}&lt;/f:format.html&gt;<br>&nbsp;&nbsp;&lt;/div&gt;<br>&nbsp;&nbsp;&lt;div&nbsp;id=&quot;right&quot;&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;f:format.html&nbsp;parseFuncTSPath=&quot;lib.parseFunc&quot;&gt;{right}&lt;/f:format.html&gt;<br>&nbsp;&nbsp;&lt;/div&gt;<br>&lt;/div&gt;</pre>
As you can see, you can include other TS-defined objects inside your fluidtemplates as well!
This is pretty much all there is to it, the most interesting part of this, compared to TemplaVoila!, is that you can modify your HTML templates without the need to refresh (okay, apart from the 'clear cache' button that you are so used to click) or remap anything.<br />Also there is no additional tables, wizards or extensions, you use what you already get with the core. Enjoy!
<h3>About the author<span class="Apple-style-span" style="font-size: 12px; font-weight: normal; ">&nbsp;</span></h3>
<img src="fileadmin/user_upload/images/tomaz-zaman.jpg" style="padding-right: 8px; padding-bottom: 8px; float: left; " title="Tomaz Zaman" height="160" width="137" alt="" />&nbsp;<link http://optiss.si - external-link-new-window "Slovenian TYPO3 Freelancer">Tomaž Zaman</link> is a Slovenian freelancer with more than 7 years of experience with TYPO3. He has made numerous websites, from small 4-page portfolios, to educational, government and corporate websites and intranets for clients from all across Europe. Since 2011&nbsp;he is a certified TYPO3 integrator.<br /><br />OPTISS<br />@: <link mailto:tomaz@optiss.si>tomaz@optiss.si</link><br />W: <link http://optiss.si - external-link "Optiss Tomaž Zaman">http://optiss.si</link><br />T: +386 30 651 645
<div></div>
<div></div>]]></content:encoded>
			
			
			<pubDate>Sat, 15 Oct 2011 12:06:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Slides and video of our talk at TYPO3 Conference (T3CON11) about Lazy development using the Extension Builder</title>
			<link>http://www.t3node.com/blog/slides-and-video-of-our-talk-at-typo3-conference-t3con11-about-lazy-development-using-the-extensio/</link>
			<description>Here are the slides and a video of our talk about Lazy development using the Extension Builder. The talk was held together with Nico de Haen at the TYPO3 Conference 2011 in Hanau.</description>
			<content:encoded><![CDATA[<h3>Extension Builder presentation at the TYPO3 Conference</h3><p><div style="font-family: Verdana, sans-serif; font-size: 12px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; background-color: rgb(255, 255, 255); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; "><p>In our talk,&nbsp;<a external="1" title="Nico is a freelancing TYPO3 developer in Freiburg/Germany" class="external-link" href="http://www.ndh-websolutions.de/">Nico de Haen</a>&nbsp;and I&nbsp;introduced&nbsp;and described&nbsp;how&nbsp;the&nbsp;<a external="1" title="Extension Builder project page on forge" class="external-link" href="http://forge.typo3.org/projects/show/extension-extension_builder">TYPO3 Extension Builder</a>&nbsp;works. We focused on&nbsp;the modeler and the remodeling abilities which support extension developers following the&nbsp;Domain Driven Design approach. It was held at the&nbsp;<a external="1" title="TYPO3 Conference Website" class="external-link" href="http://t3con11-frankfurt.typo3.org/">TYPO3 Conference</a>&nbsp;in Hanau&nbsp;on October, 7th of&nbsp;2011. You can also find an&nbsp;<a external="1" title="Abstract of the Lazy Developement talk at T3CON11" class="external-link" href="http://t3con11-frankfurt.typo3.org/sessions/acceptedpapers/paper/lazy_development_using_the_extension_builder.html">abstract of the session</a>&nbsp;at the conference website.</p><h3>Presentation slides at slideshare</h3>
<div style="width:425px" id="__ss_9616307"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/t3node/t3con11-lazy-development-using-the-extension-builder" title="T3CON11: Lazy Development using the Extension Builder">T3CON11: Lazy Development using the Extension Builder</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9616307" width="900" height="555" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></div>
<h3>Session Video</h3>
<p>A video was taken by a team around Kasper Skårhøj.</p>
<div><iframe width="900" height="488" src="http://www.youtube.com/embed/AvKb9WRJj8w?rel=0&amp;hd=1" frameborder="0" allowfullscreen></iframe></div>
<p>The video is also available for download from Felix Oertels CDN:</p><p style="margin-bottom: 0cm; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0cm; padding-right: 0cm; padding-bottom: 0cm; padding-left: 0cm; widows: 2; orphans: 2; "><span style="font-style: normal; "><span><span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; ">Video (HD):&nbsp;<a external="1" title="Download Video in HD" class="external-link" href="http://t3con11.chaoscdn.de/T3CON11FR-Coding-LazyDevelopmentUsingTheExtensionBuilder-HD.mp4">http://t3con11.chaoscdn.de/T3CON11FR-Coding-LazyDevelopmentUsingTheExtensionBuilder-HD.mp4</a></span></span></span></p><p style="margin-bottom: 0cm; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; padding-top: 0cm; padding-right: 0cm; padding-bottom: 0cm; padding-left: 0cm; widows: 2; orphans: 2; "><span style="font-style: normal; "><span><span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; ">Video (SD):&nbsp;<a external="1" title="Download Video in HD" class="external-link" href="http://t3con11.chaoscdn.de/T3CON11FR-Coding-LazyDevelopmentUsingTheExtensionBuilder.mp4">http://t3con11.chaoscdn.de/T3CON11FR-Coding-LazyDevelopmentUsingTheExtensionBuilder.mp4</a></span></span></span></p><h3>Extension Builder Resources</h3><p>The Extension Builder and it's documentation can be found in&nbsp;<a external="1" title="Download Extension Builder from TER" class="external-link" href="http://typo3.org/extensions/repository/view/extension_builder/current/">TYPO3 Extension Repository (TER) on typo3.org</a>. A draft of the latest&nbsp;documentation&nbsp;is located in the&nbsp;<a external="1" title="Extension Builder latest documentation" class="external-link" href="http://wiki.typo3.org/T3Doc/Extension_Builder">TYPO3 wiki</a>.&nbsp;</p></div></p>]]></content:encoded>
			
			
			<pubDate>Sat, 08 Oct 2011 21:42:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Hiding repeated segments with RealURL</title>
			<link>http://www.t3node.com/blog/hiding-repeated-segments-with-realurl/</link>
			<description>This article demonstrates how to remove parts of an URL in TYPO3 using RealURL. Especially the excessive use of getParams of Extbase plugins results in superfluous repeated parts in URLs. Guest author Tomaž Zaman will show you how to tackle that problem.</description>
			<content:encoded><![CDATA[<div><div></div>
<div></div>
<div>By now, everyone has probably heard of building extensions the 'new' way, with extbase and fluid.&nbsp;Numerous extensions build with those are poping up daily in the TER.&nbsp;</div>
<div></div>
<div>The only minor drawback (as I see it) is their URL generation, because URLs tend to fill up pretty much the whole width of the address bar in your browser (context, controller, action, cHash), which looks quite ugly - probably not the best solution from SEO perspective either.</div>
<div></div>
<div><link http://typo3.org/extensions/repository/view/realurl/current/ - external-link "RealURL extension in TER on typo3.org">RealURL</link> can be a great solution to this problem, but needs a bit of customizing, to get the optimal results. The extension I'll use to demonstrate this solution is called <link http://typo3.org/extensions/repository/view/yag/current/ - external-link "YAG Extension in TER on typo3.org">'YAG' (Yet another gallery) by Daniel Lienert and Michael Knoll</link> (thanx, guys!). It's worth noting, that the extension already includes some RealURL configuration functionality, but still lacks the final touch.</div>
<div></div>
<div>I've added the following snippet to my realurl_conf.php:</div></div>
<div><pre>'postVarSets' =&gt; array(<br />&nbsp; &nbsp; '_DEFAULT' =&gt; array(<br />&nbsp; &nbsp; &nbsp; &nbsp; 'album' =&gt; array(<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; array(<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'GETvar' =&gt; 'tx_yag_pi1[controller]',<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ),<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; array(<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'GETvar' =&gt; 'tx_yag_pi1[action]',<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ),<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; array(<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'GETvar' =&gt; 'tx_yag_pi1[context43][albumUid]',<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'lookUpTable' =&gt; array(<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'table' =&gt; 'tx_yag_domain_model_album',<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'id_field' =&gt; 'uid',<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'alias_field' =&gt; 'name',<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'addWhereClause' =&gt; ' AND deleted !=1 AND hidden !=1',<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'useUniqueCache' =&gt; 1,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'useUniqueCache_conf' =&gt; array(<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'strtolower' =&gt; 1,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'spaceCharacter' =&gt; '-',<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ),<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; array(<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'GETvar' =&gt; 'cHash',<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ),<br />&nbsp; &nbsp; &nbsp; &nbsp; )<br />&nbsp; &nbsp; ),<br />), </pre></div>
<div></div>
<div>This produced the following result (on the single album view):
<pre>http ://example.com/album/ItemList/submitFilter/my-album-title/cHash/</pre></div>
<div>Much better since the original output, but still had two unnecessary segments: ItemList and submitFilter. Not only are those not needed in my case (they were always the same), they don't 'fit' in my URLs where pretty much all other segments are always in Slovene.</div>
<div></div>
<div>After going through the code of the provided hooks (by YAG), I decided to write my own, which turned out to be much easier and faster way than I first thought it would be. First, the hooks (also in realurl_conf.php):</div>
<div></div>
<div><pre>function user_encodeSpURL_postProc(&amp;$params, &amp;$ref) {<br />&nbsp; &nbsp; $params['URL'] = str_replace('album/ItemList/submitFilter/', 'album/', $params['URL']);<br />}<br />function user_decodeSpURL_preProc(&amp;$params, &amp;$ref) {<br />&nbsp; &nbsp; $params['URL'] = str_replace('album/', 'album/ItemList/submitFilter/', $params['URL']);</pre></div>
<div>No rocket science here, I simply replaced the longer version of the URL with shortened one. I kept the word album in both functions, so I know what function does and I don't mistakenly rewrite some other URLs.</div>
<div>(In case you don't know, two functions are used because one is used for generating the URLs and the second one 'translates' the URL back to GET vars for TYPO3)</div>
<div></div>
<div>All we're left now is calling those two hooks from inside the RealURL configuration:</div>
<div></div>
<div><pre>$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl'] = array(<br />&nbsp; &nbsp; 'encodeSpURL_postProc' =&gt; array('user_encodeSpURL_postProc'),<br />&nbsp; &nbsp; 'decodeSpURL_preProc' =&gt; array('user_decodeSpURL_preProc'),<br />&nbsp; &nbsp; '_DEFAULT' =&gt; array(<br /><span style="white-space:pre">	</span>// the rest of your configuration</pre></div>
<div>And voila! My URLs look like this now:
<div><pre>http ://example.com/album/my-album-title/cHash/</pre>
which I like much better and I think google crawler will agree with me.</div></div>
<div>
<h3>About the author<span class="Apple-style-span" style="font-size: 12px; font-weight: normal; ">&nbsp;</span></h3>
<img src="fileadmin/user_upload/images/tomaz-zaman.jpg" width="137" height="160" style="padding-right: 8px; padding-bottom: 8px; float: left; " title="Tomaz Zaman" alt="" />&nbsp;<link http://optiss.si - external-link-new-window "Slovenian TYPO3 Freelancer">Tomaž Zaman</link> is a Slovenian freelancer with more than 7 years of experience with TYPO3. He has made numerous websites, from small 4-page portfolios, to educational, government and corporate websites and intranets for clients from all across Europe. Since 2011&nbsp;he is a certified TYPO3 integrator.<br /><br />OPTISS<br />@: <link mailto:tomaz@optiss.si>tomaz@optiss.si</link><br />W: <link http://optiss.si - external-link "Optiss Tomaž Zaman">http://optiss.si</link><br />T: +386 30 651 645
<div></div></div>
<div></div>]]></content:encoded>
			
			
			<pubDate>Sat, 30 Jul 2011 13:24:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Sample data to test performance of TYPO3 Extbase (Update)</title>
			<link>http://www.t3node.com/blog/sample-data-to-test-performance-of-typo3-extbase/</link>
			<description>At the time of writing this article, there's a lively discussion going on in the TYPO3 developer mailinglist about performance and architecture of TYPO3 Extbase Extension. This article tries to contribute something practical to the discussion by providing sample data for testing performance with the blog_example extension.</description>
			<content:encoded><![CDATA[Performance and architecture of TYPO3 Extbase is discussed very controversy.&nbsp;Some love it, some hate it (&quot;It does not scale&quot;, &quot;not useable for large setups&quot;). Some also&nbsp;complain about wrong communication (&quot;Extbase is marked&nbsp;as&nbsp;stable, but is alpha&quot;) and others ask for&nbsp;less complains and more&nbsp;contributions (&quot;Go scratch your itch and contribute!&quot;).&nbsp;If you need an example have a look at&nbsp;<link http://lists.typo3.org/pipermail/typo3-dev/2011-May/043180.html - external-link "Mailinglist discussion archived on lists.typo3.org">&quot;The extbase dilemma&quot; thread in the TYPO3-dev Mailinglist</link>.
<h3>The real dilemma I see</h3>
What irritates me is that we have &nbsp;more than&nbsp;120 postings in this dicsussion&nbsp;and noone has&nbsp;yet&nbsp;provided&nbsp;reproduceable&nbsp;tests,&nbsp;data or&nbsp;measurements results to tackle the mentioned&nbsp;problems.
<h3>Solution</h3>
For doing comparable&nbsp;tests, we need&nbsp;sample data. blog_example is the reference implementation for Extbase/Fluid, so I think&nbsp;we should use it for tests.
I provide the <link https://sourceforge.net/projects/typo3/files/Temporary%20Data/blog_example_sample_data.sql.bz2 - external-link "Download file at sourceforge">sample blog_example&nbsp;data as SQL file</link>. <b>(Download bzip compressed SQL file from sourceforge mirror,&nbsp;35MB)</b>
The data&nbsp;be used by anyone who wants to test Extbase issues using the blog_example extension.&nbsp;The sample data&nbsp;contains:&nbsp;
<ul><li>1 administrator</li><li>100 blogs</li><li>100 authors (1 for each blog)</li><li>10.000 posts (100 for each blog)</li><li>1.000.000 comments (100 for each post)</li><li>147 tags (between 1 and 5 for each post)</li></ul>
The data itself (post content, tags, names etc.) is randomly generated  with using shuffled lorem ispum blindtexts of various length.
The amount of data can't be handled with t3d-import/export. So I provide  raw sql data which has been exported via mysqldump. Some hints to make  it work:
<ul><li>The sql file contains only the blog_example tables. Pages, Plugin and  fe_user have to be set up manually.</li><li>The storagePid&nbsp;used when creating  the data was &quot;3&quot;. So you need to have a page with uid=3 and set  plugin.tx_blogexample.persistence.storagePid = 3.</li><li>The corresponding admin record (fe_user) has uid 4 and is of record type  &quot;Blog Admin&quot; (fe_users.tx_extbase_type =  Tx_BlogExample_Domain_Model_Administrator)&nbsp;</li></ul>
I also provide a <link https://sourceforge.net/projects/typo3/files/Temporary%20Data/full_typo3_db.sql.bz2 - external-link "Download file at sourceforge">complete TYPO3 DB dump</link> <b>(Download bzip2 compressed SQL file from sourceforge mirror,&nbsp;35MB)</b>.
It&nbsp;contains all TYPO3  tables, including the records for pages and fe_users. The dump is build  from a TYPO3 4.5 dummy installation. The username/password of the admin  be_user is admin/password
<h3>What's next?</h3>
Now it's up to anyone to set up testing environments, create test&nbsp;scenarios, provide and compare&nbsp;results. Then we have a basis to tackle the problems and push the TYPO3 project further.&nbsp;Happy testing!
<h3>Update</h3>
I have updated the sampla data to fix some validation issues they produce&nbsp;in Extbase. Using the data&nbsp;should work now without throwing validation errors.]]></content:encoded>
			
			
			<pubDate>Tue, 24 May 2011 14:30:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Debug Helper Extension for Extbase</title>
			<link>http://www.t3node.com/blog/debug-helper-extension-for-extbase/</link>
			<description>Extbase in TYPO3 4.5 LTS has no built-in possibility to debug model objects. Whenever you try to var_dump() a model object or log it to t3lib_div::devLog(), you'll probably end up in out-of-memory exceptions. This article introduces an extension as a temporary solution for that.</description>
			<content:encoded><![CDATA[<h3>What's wrong with var_dump()?</h3>
Because of circular dependencies in Extbase, dumps made with <link http://php.net/manual/en/function.var-dump.php - external-link "var_dump() function reference on php.net">var_dump()</link> will contain hugh amounts of useless object data of various framework classes. Your memory will probaly be exhausted and an exception is thrown. And you probably do not expect that with 1 GB of RAM reserved for PHP, do you?
A solution was backported from FLOW3 by Felix Oertel but it is still <link http://forge.typo3.org/issues/7784 - external-link "Related issue in the Extbase bugtracker">pending in the bugtracker</link>. So we probably won't see it in TYPO3 core until 4.6. To fill the gap between now and then, I merged the code into an extension and provide it for download.
<h3>Extension Download</h3>
The extension&nbsp;<link fileadmin/user_upload/ext/T3X_ext_debug.t3x - download "Download the TYPO3 extension ext_debug">ext_debug</link>&nbsp;can be downloaded.&nbsp;It is in early alpha state and not yet finished. This is why it is not yet available in forge or TER. Be patient.
<h3>Extension&nbsp;Usage</h3>
e.g. in BlogController.php
<pre>[...]<br /> public function indexAction() {<br />    $blogs = $this-&gt;blogRepository-&gt;findAll();<br />    foreach ($blogs as $blog) {<br />      Tx_ExtDebug::var_dump($blog);<br />    }<br /> }<br /> [...] </pre>
<h3>Result</h3>
<img height="583" width="722" src="fileadmin/user_upload/images/dump.png" alt="" />&nbsp;
<h3>Oops, an error occured!</h3>
Yes, I am aware of that. The debugger still needs some work. If you want to contribute, please do so and use the <link http://forge.typo3.org/issues/7784 - external-link "Related story in Extbase bugtracker">Extbase bugtracker on forge</link>.&nbsp;]]></content:encoded>
			
			
			<pubDate>Fri, 29 Apr 2011 01:27:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>TYPO3 caching framework throws CLIENT_ERROR with broken php5-memcache package from Debian Squeeze</title>
			<link>http://www.t3node.com/blog/typo3-caching-framework-throws-client-error-with-broken-php5-memcache-package-from-debian-squeeze/</link>
			<description>The TYPO3 caching framework in TYPO3 4.5.0 runs into troubles when using memcached backend on Debian Squeeze. It seems that Squeeze ships a broken php5-memcache package, which does not fit the API of memcached 1.4.4. Since Squeeze is already released, there will be no fix in the official stable repository. But I provide a fixed package for download.</description>
			<content:encoded><![CDATA[The&nbsp;php5-memcache package implements parts of outdated memcached API. Deleting entries with expiration time does not work properly. The memcache backend of the TYPO3 caching framework in 4.5.0 does so and runs into troubles. It throws an error:
<pre>CLIENT_ERROR bad command line format.&nbsp; Usage: delete &lt;key&gt; [noreply]</pre>
You can find details about this issue in the PECL bugtracker in bug <link http://pecl.php.net/bugs/bug.php?id=17566 - external-link "Bug report in PECL">#16927</link> and <link http://pecl.php.net/bugs/bug.php?id=17566 - external-link "bug report in PECL">#17566</link>.
Unfortunately Squeeze was released before I realized this issue. That means there will be no fixed package in the stable repository because of release policy. At the time of writing this article, I also could not find a fixed package somewhere else. The <link http://news.php.net/php.pecl.cvs/14325 - external-link "Revision log for pecl bug #17566">original patch</link> from upstream is a two-liner, so I took the chance to fix it and build a new package myself.
You can <link http://www.t3node.com/debian/php5-memcache_3.0.4-4+t3node-1_amd64.deb - external-link "php5-memcache package for Debian Squeeze">download the fixed php5-memcache package</link> and use it as-is. ATM there's only a built for amd64. If you need other ports, please leave a comment.  I am sorry that there's no &quot;real&quot; package repository, but I did not have&nbsp;the time to set it up properly. Maybe I find some later.
This is&nbsp;how to install the package:
<pre>$ cd /tmp/<br />$ wget http://www.t3node.com/debian/php5-memcache_3.0.4-4+t3node-1_amd64.deb<br />$ sudo dpkg --install /tmp/php5-memcache_3.0.4-4+t3node-1_amd64.deb</pre>
Use at your own risk since this package comes with NO WARRANTY and is provided AS-IS. There's also a  tarball with the  <link http://www.t3node.com/debian/php-memcache_3.0.4.orig.tar.gz - external-link "Source code of php5-memcache">source code available for download</link>.]]></content:encoded>
			
			
			<pubDate>Mon, 14 Feb 2011 18:19:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>Book review of &quot;TYPO3 4.3 Multimedia Cookbook&quot; by Dan Osipov</title>
			<link>http://www.t3node.com/blog/book-review-of-typo3-43-multimedia-cookbook-by-dan-osipov/</link>
			<description>&quot;TYPO3 4.3 Multimedia Cookbook&quot; by Dan Osipov is another book about TYPO3 published by Packt Publishing in January 2010. It's generally good to see more English books about TYPO3 in the market since there are still very few compared to German publications. The topic of cooking multimedia in TYPO3 is nowadays very relevant, since the demand to manage rich media in content management systems grows and there's no other publication in the English book market with the same focus. So let's see what's in...</description>
			<content:encoded><![CDATA[<link https://www.packtpub.com/typo3-4-3-multimedia-cookbook/book - external-link "Book in the Packt Publishing shop">Osipov, Dan (2010): &quot;TYPO3 4.3 Multimedia Cookbook&quot;. Birmingham: Packt Publishing</link>
<h3>Content</h3>
The first chapters flip through the setup of a basic TYPO3 system followed by an introduction to digital asset management (DAM) in TYPO3. This helps newbies to set up a working environment. Next, the facets of metadata in DAM are discussed and it clearly turns out that the author is very familiar with the insides of DAM. That's not very surprising, because Dan is the leader of the DAM project and has put a lot of work into the DAM extension. <img alt="Book cover image" style="padding-top: 8px; padding-bottom: 8px; padding-left: 8px; float: right;" src="fileadmin/user_upload/images/dan_book_cover.jpg" height="152" width="125" />
Chapter 4 &quot;Rendering Images&quot; gives an insight of different ways to handle images in TYPO3. It discusses common core features like the IMAGE cObject or the rich text editor (RTE) as well as the image handling by popular 3rd party extensions. In a similar way, video and audio content get discussed in chapter 5.
Chapter 6 is about connecting to external APIs like Amazon S3, Flickr and YouTube. The book now starts to take the reader into the insights of handling multimedia assets on a very professional level. It shows how to connect to 3rd party providers by coding TYPO3 extensions to use external webservices. This is good to see, because the use of webservices rapidly grows. Being able to connect to 3rd party APIs in the web becomes more and more essential.
In the next chapter, we learn how to tightly integrate assets in TYPO3 by writing services. The examples discuss how to extract metadata from OpenOffice and audio files by writing an importer extension. It also shows how to write on-the-fly-converter for FLV and audio files. Finally, we see how extJS is used as a framework to build modern user interfaces for TYPO3.
The last chapter discusses best practices to automatize tasks. It shows how to use the TYPO3 scheduler to download and index files from an FTP server on a regular basis. Dan finaly demonstrates the handling of geolocation information in images by extracting the country tag from the metadata and use it as a category.
<h3>Structure</h3>
The book is divided in 8 chapters with total of 212 pages. Its structure follows a common theme, starting with general  topics and ending with more complex and technically deeper questions. Although the book title  clearly promises cookbook recipes, the book itself does not entirely  fulfil this promise. It rather discusses its topics in continuous  chapters than in recipes. I would have expected some more independent  topics, since many other cookbooks in the market of technical books do  that.
The most annoying bug in the book is the lack of proper  numbering of chapters. The book is full of references to other chapters.  With the flat numbering scheme of one layer, you are forced to heavily  browse the table of contents to find the reference targets.  Unfortunately that seems to be common for books by Packt. Grrr.  Readability is also bad in some source code examples of the book. Half a  page of source code without emphasis or line breaks is simply an imposition (p. 113). Call me a nitpicker, but these issues appeared in each of the four Packt books I read so far.
<h3>What's missing?</h3>
The chapter on &quot;Rendering Images&quot; misses information about the GIFBUILDER, which is an essential and widely used multimedia feature of TypoScript. The same for ImageMagick, which is heavily used for image manipulation in TYPO3 and should not be missing in a TYPO3 multimedia book. Finally, the forthcoming media features of HTML5 are not included in the book, but could have been introduced as a peview for the multimedia web standard of the future.
<h3>Summary</h3>
The book helps to solve common real life problems by applying advanced and state-of-the-art techniques. It successfully manages to balance different degrees of difficulty from getting started to managing complex and specialized tasks in the multimedia web. That means in practice: handling the TYPO3 backend by using appropriate backend modules and 3rd party extensions, utilize TypoScript up to coding advanced extensions with PHP, extJS and 3rd party webservice integration. <br />The overall quality of the book suffers from Packts common structuring of the content. Although this is not the fault of the author or the book itself, it left an unpleasant spot on a generally well elaborated and profound book which is unique in its topic. So +1 from me if you are in need for a book on this special topic.]]></content:encoded>
			
			
			<pubDate>Mon, 09 Aug 2010 09:18:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Combining Fluid ViewHelpers and TypoScript in TYPO3 - 5 basic examples</title>
			<link>http://www.t3node.com/blog/combining-fluid-viewhelpers-and-typoscript-in-typo3-5-basic-examples/</link>
			<description>Here comes another blog article about TYPO3 after a long time of absence. This time I introduce the Fluid cObject ViewHelper, which brings together the power of TypoScript and Fluid. I will demonstrate the usage of this ViewHelper in five basic examples.</description>
			<content:encoded><![CDATA[<h3> 1. Simple usage of the cObject ViewHelper: A breadcrumb menu</h3>
Any website with hierarchical pages should have a breadcrumb menu.<br />The TypoScript in this example  creates a breadcrumb menu by using a HMENU of type rootline. The Fluid ViewHelper gets the result from this cObject and displays it in the template.
<h4>Fluid:</h4>
<pre>&lt;f:cObject typoscriptObjectPath=&quot;lib.breadcrumb&quot; /&gt;</pre>
<h4>TypoScript:</h4>
<pre>lib.breadcrumb = HMENU<br />lib.breadcrumb {<br />&nbsp; special = rootline<br />&nbsp; special.range = 0|-1<br />&nbsp; 1 = TMENU<br />&nbsp; 1 {<br />&nbsp;&nbsp;&nbsp; NO.linkWrap = | &gt;&gt;<br />&nbsp;&nbsp;&nbsp; CUR = 1<br />&nbsp;&nbsp;&nbsp; CUR.doNotLinkIt = 1<br />&nbsp; }<br />}</pre>
<h4>Result:</h4>
<pre>Home &gt;&gt; Learning TYPO3 &gt;&gt; Fluid examples </pre>
<h3>2. Passing static values from Fluid to TypoScript: Let TypoScript calculate some numbers</h3>
Let's assume that you have some math homework and need to calculate some numbers.<br />All we need to do is to tell Fluid our arithmetic problem in the &quot;data&quot; parameter. This value is passed to TypoScript as the current value, where we do the calculation. The result of this calculation is returned to the template.
<h4>Fluid:</h4>
<pre>20 + 22 = &lt;f:cObject typoscriptObjectPath=&quot;lib.math&quot; data=&quot;20+22&quot; /&gt;</pre>
<h4>TypoScript:</h4>
<pre>lib.math = TEXT<br />lib.math {<br />&nbsp; current = 1<br />&nbsp; prioriCalc = 1<br />}</pre>
<h4>Result:</h4>
<pre>20 + 22 = 42</pre>
This is a very simple demonstration. To make this more comfortable, you would probably use the form ViewHelper to have a form field to enter the calculation task.
<h3>3. Passing dynamic values from Fluid to TypoScript: Render a video with flashplayer, using an URL from an object property.</h3>
In this example we have a website with a video podcast. We want to show the video of each podcast episode using a flashplayer (like youtube does for example). The videos itself are stored as mp4 files somewhere in the cloud. So all we need to have is the URL of the video as a property of the episode object.
<h4>Fluid:</h4>
<pre>&lt;f:cObject typoscriptObjectPath=&quot;lib.flashPlayer&quot; data=&quot;{episode.url}&quot; /&gt;</pre>
<h4>TypoScript:</h4>
<pre>lib.flashPlayer = SWFOBJECT<br />lib.flashPlayer {<br />&nbsp; file.current = 1<br />&nbsp; width = 400<br />&nbsp; height = 300<br />&nbsp; type = video<br />&nbsp; layout = ###SWFOBJECT###<br />&nbsp; video.player = typo3/contrib/flashmedia/flvplayer.swf<br />&nbsp; forcePlayer = 1<br />}</pre>
<h4>Result:</h4>
<img alt="Video Player" style="padding: 8px;" src="fileadmin/user_upload/images/video.png" height="299" width="400" />&nbsp;
<h3>4. Alternative notations for passing dynamic data: Again a Flash video of a podcast</h3>
We use the same example like above, but introduce some alternative notations. This should help to get an idea about how Fluid notation can look like.
<h4>Fluid:</h4>
<pre>A. &lt;f:cObject typoscriptObjectPath=&quot;lib.flashPlayer&quot; data=&quot;{episode.url}&quot; /&gt;<br /><br />B. {episode.url -&gt; f:cObject(typoscriptObjectPath: 'lib.flashPlayer')}<br /><br />C. &lt;f:cObject typoscriptObjectPath=&quot;lib.flashPlayer&quot;&gt;{episode.url}&lt;/f:cObject&gt;<br /><br />D. &lt;f:cObject typoscriptObjectPath=&quot;lib.flashPlayer&quot;&gt;&lt;f:cObject typoscriptObjectPath=&quot;lib.alternativeVideoUrl&quot; /&gt;&lt;/f:cObject&gt;</pre>
<h4>TypoScript:</h4>
<pre>lib.flashPlayer = SWFOBJECT<br />lib.flashPlayer {<br />&nbsp; file.current = 1<br />&nbsp; width = 400<br />&nbsp; height = 300<br />&nbsp; type = video<br />&nbsp; layout = ###SWFOBJECT###<br />&nbsp; video.player = typo3/contrib/flashmedia/flvplayer.swf<br />&nbsp; forcePlayer = 1<br />}</pre>
<pre>lib.alternativeVideoUrl = TEXT<br />lib.alternativeVideoUrl.value = http://www.example.com/my_video.mp4</pre>
<h4>Explanation of the Fluid notation: </h4>
A. The first Fluid notation is taken from the above example. It represents the shorthand XML notation.
B. The second one looks a bit complicated on the first sight. But it should give you an impression that you can &quot;chain&quot; multiple ViewHelpers.
C. The third example represents the XML notation with starttag and endtag and the value in between.
D. The forth notation points to the fact, that you can pass nested ViewHelpers as data. (refered as the renderChildren feature). In our case, the data which is passed to the lib.flashPlayer TS object is taken from another TS object.  Take into account, that any spaces and linebreaks also get passed and could cause unwanted effects.
<h3>5. Passing whole objects to TypoScript: Show the price of a product only when the product is available.</h3>
In the last example, we have a product object with a some properties like price, availability, description etc. The two properties which are of interest here are price and availability. We only want to show the price, if the product is available.
<h4>Fluid:</h4>
<pre>&lt;f:cObject typoscriptObjectPath=&quot;lib.productPrice&quot; data=&quot;{product}&quot; /&gt;</pre>
<h4>TypoScript:</h4>
<pre>lib.productPrice = TEXT<br />lib.productPrice {<br />&nbsp; field = price<br />&nbsp; fieldRequired = available<br />&nbsp; wrap = Price: |<br />}</pre>
<h4>Result:</h4>
<pre>Price: 99,- $</pre>
What we do here is to pass the full object to the cObject ViewHelper instead of only one property. This makes it possible to use all properties of the product object in the TypoScript cObject. In the above example we check if there's a value in the &quot;product.available&quot; property. Only if this condition is true, we show the product.price. Of course this task could also be solved by using the if/then/else ViewHelper.
<h3>Summary</h3>
The cObject Viewhelper combines the power of Fluid with TypoScript. Before you think about writing your own ViewHelper to solve a task, you should think about solving this task with TypoScript. Especially if you york with people which are new to Fluid, but TypoScript gurus. Not to forget that TypoScript Objects are far more configurable for admins than PHP code of Fluid ViewHelpers are. If you know some more tricks with TypoScript and Fluid, please share it with us and write a comment.]]></content:encoded>
			
			
			<pubDate>Thu, 29 Jul 2010 17:42:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Apache authentication against TYPO3 using mod_auth_mysql</title>
			<link>http://www.t3node.com/blog/apache-authentication-against-typo3-using-mod-auth-mysql/</link>
			<description>Web applications often need user accounts to be able to authorize users. TYPO3 for example needs backend users which are stored in the be_users database table. Each application usually has its own user accounts and authorization schemes. But maintaining multiple accounts of the same user for each web application is a pain and should be avoided. Apache can deal with that situation by shipping plenty of authentication modules. Have a look at a little demonstration of mod_auth_mysql.</description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
If you are a provider of several web applications, most of them are probably served by Apache webserver. So chances are that you can use Apache authentication modules to connect the authentication mechanisms of all your applications. That would help  to avoid redundant user accounts. A prerequisite is that the applications support the <link http://httpd.apache.org/docs/2.2/howto/auth.html - external-link "Official Apache Auth Docs">Apache basic auth API</link>. I will now demonstrate how to authenticate against TYPO3 BE users from outside of the TYPO3 scope.
<h3>What software you need to have</h3>
TYPO3 is usually based on Apache and MySQL. So you almost have anything you need. What is missing is that you&nbsp;install the Apache module mod_auth_mysql. Use the favorite package / software manager of your OS distribution or get the latest version from the&nbsp;<link http://modauthmysql.sourceforge.net/ - external-link "mod_auth_mysql project on sourceforge">sourceforge project pages</link>.&nbsp;Please note that the software evolved the past years, resulting in several versions with different configuration parameters. 
<h3>Configuring mod_auth_mysql for authentication against TYPO3</h3>
The following configuration example is based on Apache 2.2 and mod_auth_mysql 4.3.9 from Debian Squeeze. Put the snippet code into your Apache config, for example inside a .htaccess or <i>&lt;Directory /path/to&gt;</i> directive. Please refer to the above mentioned Apache website, if you are not familiar with Apache configuration.
<pre>AuthType Basic<br />AuthName &quot;User Authentication&quot;<br />AuthBasicAuthoritative Off<br />AuthUserFile /dev/null<br />Auth_MySQL On<br />Auth_MySQL_Host localhost<br />Auth_MySQL_DB &lt;<i>$typo_db</i>&gt;<br />Auth_MySQL_User &lt;<i>$typo_db_username</i>&gt;<br />Auth_MySQL_Password &lt;<i>$typo_db_password</i>&gt;<br />Auth_MySQL_Password_Table be_users<br />Auth_MySQL_Username_Field username<br />Auth_MySQL_Password_Field password<br />Auth_MySQL_Encryption_Types PHP_MD5<br />Require valid-user</pre>
The three lines with parameters in &lt;&gt; refer to the values of your TYPO3 configuration which can be found in&nbsp;typo3conf/localconf.php
<h3>Usage</h3>
What does it do? When you&nbsp;request a page in a restricted area which needs Apache authentication you will be asked for a username and password:
<img src="fileadmin/user_upload/images/auth_prompt.png" height="153" width="530" alt="" />
The username and the MD5 hashed password are compared with the appropriate data from be_users table of your TYPO3 installation. If they match, you will get access to the restricted area.
<h3>Possible limitations</h3>
The auth will probably not work when you use the sysext saltedpasswords for BE users. Also keep in mind that you need the protect the user login data with SSL.
It also seems that the directive names have changed over the time. Some versions use underscores _, some not. The documentations in the web all slightly differ. If you use Debian, you should rely on the information in /usr/share/doc/libapache2-mod-auth-mysql/
<h3>Applications I have successfully tested</h3>
<ul><li><link http://trac.edgewall.org/ - external-link "Trac: Integrated software development suite">Trac</link></li><li><link http://subversion.apache.org/ - external-link "Subversion: Software version control system">Subversion</link></li><li><link http://httpd.apache.org/docs/2.2/mod/mod_dav.html - external-link "webdav implementation for the Apache server">Apache Webdav (mod_dav)</link></li></ul>
<h3>Other authentication modules</h3>
There are plenty of other authentication modules for Apache, for example: LDAP, PAM, SASL, openID, Radius, or Postgre. They all implement the same scheme, so&nbsp;the  usage is easy and&nbsp;compatibility is great.]]></content:encoded>
			
			
			<pubDate>Sat, 13 Mar 2010 23:50:00 +0100</pubDate>
			
		</item>
		
		<item>
			<title>Enhanced password recovery for Frontend users in TYPO3 4.3</title>
			<link>http://www.t3node.com/blog/enhanced-password-recovery-for-frontend-users-fe-user-in-typo3-43/</link>
			<description>Password recovery for frontend users before TYPO3 4.3 was poor and insecure: Passwords were sent by e-mail in plain text, the recovery form could be abused and revealed private information to public. While implementing the felogin sysext for a community website, I surprisingly found some fundamental changes in the recovery method in TYPO3 4.3.</description>
			<content:encoded><![CDATA[In <link http://wiki.typo3.org/index.php/TYPO3_4.3.0 - external-link "Feature list in the changelog of TYPO3 4.3">TYPO3 4.3</link>, the password recovery method was <link http://bugs.typo3.org/view.php?id=10017 - external-link "Bug report of the issue">refactored</link> by <link http://www.sk-typo3.de/ - external-link "Personal website of Steffen Kamper">Steffen Kamper</link> and now looks much better than before. Let me demonstrate it step by step.
<h3>How does FE-user password recovery work?</h3>
<h4>1) Send your e-mail or username to recover the account password:</h4>
<img src="fileadmin/user_upload/images/typo3_recover_password_1.jpg" height="266" width="509" alt="" /> 
<img src="fileadmin/user_upload/images/typo3_recover_password_2.jpg" height="170" width="508" alt="" />
<h4>2) If the e-mail or username exists, you'll get a mail with a tokenized link to create a new password.</h4>
Check your e-mail account and open the link within the limited timeframe. The link has a token, which combines the timestamp and a hash to identify the request:
<img src="fileadmin/user_upload/images/typo3_recover_password_mail.png" height="232" width="638" alt="" />
<h4>3) Enter the new password twice. There is a simple check for password lenght:</h4>
<img src="fileadmin/user_upload/images/typo3_recover_password_3.png" height="252" width="509" alt="" />
<h4>4) Finished. The new password has been saved to the database and you can proceed to login:</h4>
<img src="fileadmin/user_upload/images/typo3_recover_password_4.png" height="140" width="511" alt="" />
<h3>Problems I met</h3>
When trying the new recovery stuff, it first did not work. But after some debugging I found out, that some POST parameters were missing, because I used an outdated custom template file. If you use a custom template, make sure to update it accordingly.
<h3>Some further aspects</h3>
To configure the FE output and email text, have a look at the TypoScript of the extension with template analyzer. You could also override the content of the locallang files with TypoScript:
<pre>plugin.tx_felogin_pi1._LOCAL_LANG.[lang].label = text</pre>
Of course the password check could be enhanced by adding more complex checks. But anyway, felogin in 4.3 looks very good. The <link https://svn.typo3.org/TYPO3v4/Core/branches/TYPO3_4-3/typo3/sysext/saltedpasswords/doc/manual.sxw - external-link "saltedpasswords manual in the SVN repository">documentation</link> claims that recovery also works with saltedpasswords sysext. That's great, because the FE-user stuff now looks much more secure than before.&nbsp;Salted password for TYPO3 are explained in a&nbsp;<link http://secure.t3sec.info/blog/permalink/34/ - external-link "TYPO3 4.3 system extension saltedpasswords">blog article by Marcus Krause</link>. Unfortunately, the <link http://typo3.org/extensions/repository/view/sr_feuser_register/current/ - external-link "Front End User Registration in TER">sr_feuser_register extension</link> does not (yet) natively support saltedpasswords. But you can try the <link http://typo3.org/extensions/repository/view/srfeuserregister_t3secsaltedpw/current/ - external-link "Bridging saltedpasswords and sr_feuser_registration">extension srfeuserregister_t3secsaltedpw</link> from TER, which should work as a bridge. 
<h3>Lessons learned</h3>
<ul><li>If you use custom template files, have a look for changes in the original files of new releases. In case of felogin, there have been major changes from 4.2 to 4.3. It was neccessary to update my custom template manually.</li><li>No matter how hard you try to follow the core changelog, there's always the chance to find a feature by surprise.</li></ul>]]></content:encoded>
			
			
			<pubDate>Tue, 09 Feb 2010 16:45:00 +0100</pubDate>
			
		</item>
		
	</channel>
</rss>
