<?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>Agentur münster-webdesign.net &#187; Typo3</title>
	<atom:link href="http://www.muenster-webdesign.net/blog/kategorie/typo3/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.muenster-webdesign.net/blog</link>
	<description>Blog zum Thema Webdesign, Webentwicklung, Web 2.0 und Content Management Systeme</description>
	<lastBuildDate>Sat, 28 Jan 2012 08:58:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Typo3-Weihnachtskalender-Extension auf Extbase/Fluid-Basis</title>
		<link>http://www.muenster-webdesign.net/blog/typo3-weihnachtskalender-extension-auf-extbasefluid-basis/</link>
		<comments>http://www.muenster-webdesign.net/blog/typo3-weihnachtskalender-extension-auf-extbasefluid-basis/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 07:28:24 +0000</pubDate>
		<dc:creator>münster-webdesign</dc:creator>
				<category><![CDATA[Aktuelle Projekte]]></category>
		<category><![CDATA[Extbase & Fluid]]></category>
		<category><![CDATA[Typo3]]></category>

		<guid isPermaLink="false">http://www.muenster-webdesign.net/blog/?p=1845</guid>
		<description><![CDATA[Unsere neue Typo3-Extension &#8220;cgadventcalendar&#8221; implementiert einen einfachen Weihnachtskalender mit 24 Kläppchen. Der Clou: Klickt man mehrmals auf ein Kläppchen zukünftigen Datums, wird eine von fünf Audiodateien abgespielt. Beim ersten Klick wird jeweils per Zufall eine Datei aus den ersten drei Audiofiles ausgewählt. Beim zweiten und dritten Klick gibt es dann eine dramaturgische Steigerung. Die Umsetzung [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1846" class="wp-caption alignright" style="width: 220px"><a href="http://www.muenster-webdesign.net/blog/wp-content/uploads/2011/12/typo3-weihnachtskalender-extension-frontend.gif" rel="shadowbox[sbpost-1845];player=img;" title="Typo3-Weihnachstkalener-Extension auf Extbase/Fluid-Basis"><img class="size-thumbnail wp-image-1846" title="Typo3-Weihnachstkalener-Extension auf Extbase/Fluid-Basis" src="http://www.muenster-webdesign.net/blog/wp-content/uploads/2011/12/typo3-weihnachtskalender-extension-frontend-210x175.gif" alt="Typo3-Weihnachstkalener-Extension auf Extbase/Fluid-Basis" width="210" height="175" /></a><p class="wp-caption-text">Typo3-Weihnachstkalener-Extension auf Extbase/Fluid-Basis</p></div>
<p>Unsere neue Typo3-Extension &#8220;cgadventcalendar&#8221; implementiert einen einfachen Weihnachtskalender mit 24 Kläppchen.</p>
<p>Der Clou: Klickt man mehrmals auf ein Kläppchen zukünftigen Datums, wird eine von fünf Audiodateien abgespielt. Beim ersten Klick wird jeweils per Zufall eine Datei aus den ersten drei Audiofiles ausgewählt. Beim zweiten und dritten Klick gibt es dann eine dramaturgische Steigerung.</p>
<p>Die Umsetzung der Typo3-Weihnachtskalender-Extension erfolgte auf Extbase/Fluid-Basis. Für die Umsetzung der Audio-Funktionalität setzten wir auf &#8220;<a href="http://www.schillmania.com/projects/soundmanager2/" target="_blank">Soundmanager 2</a>&#8220;.</p>
<p>Die einzelnen Kläppchen lassen sich im Backend komfortabel per IRRE (Inline Relational Record Editing) mit zwei Zustandsgrafiken für die Kläppchen sowie beliebigen Typo3-Content-Elementen bestücken.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muenster-webdesign.net/blog/typo3-weihnachtskalender-extension-auf-extbasefluid-basis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neue Website auf Typo3-Basis: Alte Villa Ling</title>
		<link>http://www.muenster-webdesign.net/blog/neue-website-auf-typo3-basis-alte-villa-ling/</link>
		<comments>http://www.muenster-webdesign.net/blog/neue-website-auf-typo3-basis-alte-villa-ling/#comments</comments>
		<pubDate>Sat, 10 Sep 2011 06:44:37 +0000</pubDate>
		<dc:creator>münster-webdesign</dc:creator>
				<category><![CDATA[Aktuelle Projekte]]></category>
		<category><![CDATA[Typo3]]></category>
		<category><![CDATA[Typo3-Projektreferenzen]]></category>
		<category><![CDATA[Webdesign-Referenzen]]></category>

		<guid isPermaLink="false">http://www.muenster-webdesign.net/blog/?p=1814</guid>
		<description><![CDATA[Mit dem Relaunch der Website der Alten Villa Ling wurde nicht nur das alte Webdesign gegen ein neues und modernes Webdesign ausgetauscht, auch wurde die vormals statische Website durch ein modernes Content Management System auf Basis von Typo3 ersetzt. Trotz des geringen zur Verfügung stehenden Budgets konnten wir kleinere Gimmicks umsetzen, wie beispielsweise die Möglichkeit, [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1816" class="wp-caption alignright" style="width: 220px"><a href="http://www.muenster-webdesign.net/blog/wp-content/uploads/2011/09/webdesign_typo3_alte_villa_ling.gif" rel="shadowbox[sbpost-1814];player=img;" title="Die Website der Alten Villa Ling in neuem Webdesign-Glanz und auf Typo3-Basis"><img class="size-thumbnail wp-image-1816" title="Die Website der Alten Villa Ling in neuem Webdesign-Glanz und auf Typo3-Basis" src="http://www.muenster-webdesign.net/blog/wp-content/uploads/2011/09/webdesign_typo3_alte_villa_ling-210x161.gif" alt="Die Website der Alten Villa Ling in neuem Webdesign-Glanz und auf Typo3-Basis" width="210" height="161" /></a><p class="wp-caption-text">Die Website der Alten Villa Ling in neuem Webdesign-Glanz und auf Typo3-Basis</p></div>
<p>Mit dem Relaunch der Website der <a href="http://www.alte-villa-ling.de/" target="_blank">Alten Villa Ling</a> wurde nicht nur das alte Webdesign gegen ein neues und modernes Webdesign ausgetauscht, auch wurde die vormals statische Website durch ein modernes Content Management System auf Basis von Typo3 ersetzt.</p>
<p>Trotz des geringen zur Verfügung stehenden Budgets konnten wir kleinere Gimmicks umsetzen, wie beispielsweise die Möglichkeit, den Hauptinhaltsbereich per Klick hinter das Menü gleiten zu lassen, um die hochwertigen Fotografien und Hintergrundbilder besser betrachten zu können.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muenster-webdesign.net/blog/neue-website-auf-typo3-basis-alte-villa-ling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Test-Driven Development unter Typo3: Extbase-Controller testen</title>
		<link>http://www.muenster-webdesign.net/blog/test-driven-development-unter-typo3-extbase-controller-testen/</link>
		<comments>http://www.muenster-webdesign.net/blog/test-driven-development-unter-typo3-extbase-controller-testen/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 15:11:53 +0000</pubDate>
		<dc:creator>münster-webdesign</dc:creator>
				<category><![CDATA[Extbase & Fluid]]></category>
		<category><![CDATA[Test-Driven Development]]></category>
		<category><![CDATA[Typo3]]></category>

		<guid isPermaLink="false">http://www.muenster-webdesign.net/blog/?p=1779</guid>
		<description><![CDATA[Um Controller-Klassen unter dem Typo3-Extbase-Framework testen zu können, gilt es einige Unwegsamkeiten zu bewältigen: Bestimmte zu testende Member-Variablen der Controller-Klasse wie beispielsweise die &#8216;view&#8217;-Variable sind als &#8220;geschützt&#8221; deklariert und sind zunächst weder über Setter/Getter noch per Dependency-Injection erreichbar Von Haus unterstützt PHPUnit weder das &#8220;Stubben&#8221; noch &#8220;Mocken&#8221; von Methoden, die als privat, geschützt oder statisch [...]]]></description>
			<content:encoded><![CDATA[<p>Um Controller-Klassen unter dem Typo3-Extbase-Framework testen zu können, gilt es einige Unwegsamkeiten zu bewältigen:</p>
<ul>
<li>Bestimmte zu testende Member-Variablen der Controller-Klasse wie beispielsweise die &#8216;view&#8217;-Variable sind als &#8220;geschützt&#8221; deklariert und sind zunächst weder über Setter/Getter noch per Dependency-Injection erreichbar</li>
<li> Von Haus unterstützt PHPUnit weder das &#8220;Stubben&#8221; noch &#8220;Mocken&#8221; von Methoden, die als privat, geschützt oder statisch definiert sind</li>
</ul>
<p>Glücklicherweise erweitert die PHPUnit-Extension für Typo3 das PHPUnit-Framework um die nötigen Methoden, um &#8220;Accessible Mocks&#8221; zu erzeugen. Die entsprechende Methode <em>getAccessibleMock()</em> ermöglicht so den Zugriff auf geschützte Methoden und Eigenschaften des Mock-Objekts.</p>
<p>Ein Setup für eine Extbase-Controller-Testklasse könnte wie folgt aufgebaut sein:</p>
<pre class="brush:php">/**
* @var Tx_Cgfaq_Controller_FaqController
*/
protected $fixture;

public function setUp() {
  $mockFaqRepository = $this-&gt;getMock(
    'Tx_Cgfaq_Domain_Repository_FaqRepository', array(), array(), '', FALSE
 );
  $this-&gt;fixture = $this-&gt;getAccessibleMock(
    'Tx_Cgfaq_Controller_FaqController', array('dummy'), array(), '', FALSE
  );

  $this-&gt;fixture-&gt;injectFaqRepository($mockFaqRepository);
  $this-&gt;fixture-&gt;_set('view', $this-&gt;getMock('Tx_Fluid_View_TemplateView', array(), array(), '', FALSE));
}</pre>
<p>Hierbei erzeugen wir zunächst die benötigten Mock-Objekte; eines für die Repository- und eines für die Controller-Klasse. Das Mock-Objekt für die Controller-Klasse erzeugen wir lediglich, um die geschützten Methoden und Eigenschaften per <em>getAccessibleMock()</em> durch öffentliche zu ersetzen. Damit PHPUnit nicht alle Methoden der Controller-Klasse durch Stubs ersetzt (was die Vorteile mit einem Schlage wieder wett machen würde), muss mit dem Aufruf der <em>getAccessibleMock()-Methode</em> zwingen eine Dummy-Methode übergeben werden (hier: array(&#8216;dummy&#8217;)).</p>
<p>Die <em>getAccessibleMock()-Methode </em>erweitert die angegebene Klasse um drei Funktionen, mit denen der Zugriff auf die vormals geschützten Eigenschaften und Methoden möglich wird:</p>
<ol>
<li>_set($propertyName, $value)</li>
<li>_setRef($propertyName, &amp;$value)</li>
<li>_get($propertyName)</li>
</ol>
<p>Ist die setUp()-Methode geschrieben, sind die nachfolgenden Testfälle schnell getippt:</p>
<pre class="brush:php">/**
* @test
*/
public function listActionFindsDemandedFaqs() {
  $mockQueryResult = $this-&gt;getMock('Tx_Extbase_Persistence_QueryResult', array(), array(), '', FALSE);

  $this-&gt;fixture-&gt;_get('faqRepository')-&gt;expects($this-&gt;once())
        -&gt;method('fetchByFeUserAndGroup')
        -&gt;will($this-&gt;returnValue($mockQueryResult));

  $this-&gt;fixture-&gt;_get('view')-&gt;expects($this-&gt;once())
        -&gt;method('assign')
        -&gt;with($this-&gt;equalTo('faqs'),
                $this-&gt;equalTo($mockQueryResult)
        );

  $this-&gt;fixture-&gt;listAction();
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.muenster-webdesign.net/blog/test-driven-development-unter-typo3-extbase-controller-testen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Test-Driven Development unter Typo3: Extbase-Repositories testen</title>
		<link>http://www.muenster-webdesign.net/blog/test-driven-development-unter-typo3-extbase-repositories-testen/</link>
		<comments>http://www.muenster-webdesign.net/blog/test-driven-development-unter-typo3-extbase-repositories-testen/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 06:57:20 +0000</pubDate>
		<dc:creator>münster-webdesign</dc:creator>
				<category><![CDATA[Extbase & Fluid]]></category>
		<category><![CDATA[Test-Driven Development]]></category>
		<category><![CDATA[Typo3]]></category>

		<guid isPermaLink="false">http://www.muenster-webdesign.net/blog/?p=1747</guid>
		<description><![CDATA[Mit der Einführung des &#8220;Testing Framework&#8221; in die Typo3-PHPUnit-Extension hat sich das Testen von Repositories ausgesprochen vereinfacht. Neben dem testweisen Schreiben von Datensätzen in die Datenbank bietet die Tx_Phpunit_Framework-Klasse eine Vielzahl weiterer nützlicher Funktionen wie beipspielsweise das testweise Anlegen von Front- und Backend-Usern oder das Ein- und Ausloggen von Nutzern. Einen Überblick über die Möglichkeiten [...]]]></description>
			<content:encoded><![CDATA[<p>Mit der Einführung des &#8220;Testing Framework&#8221; in die Typo3-PHPUnit-Extension hat sich das Testen von Repositories ausgesprochen vereinfacht. Neben dem testweisen Schreiben von Datensätzen in die Datenbank bietet die Tx_Phpunit_Framework-Klasse eine Vielzahl weiterer nützlicher Funktionen wie beipspielsweise das testweise Anlegen von Front- und Backend-Usern oder das Ein- und Ausloggen von Nutzern.</p>
<p>Einen Überblick über die Möglichkeiten des Testing Frameworks findet sich in der <a href="http://typo3.org/documentation/document-library/extension-manuals/phpunit/3.5.14/view/1/3/" target="_blank">Doku der Typo3-PHPunit-Extension</a>.</p>
<p>Wie bei jeder PHPUnit-Testklasse schreiben wir zunächst die setUp()-Methode in der wir neben dem Fixture auch eine Instanz des Testing Frameworks instantiieren sowie die tearDown()-Methode. Da beim Testen der Repository-Klassen zwangsläufig externe Ressourcen einbezogen werden (Datenbank), ist die tearDown-Methode von besonderer Wichtigkeit, um nach jedem Test die externen Ressourcen wieder in den Ausgangszustand zurückzuversetzen:</p>
<pre class="brush:php">/**
* @var Tx_Phpunit_Framework
*/
protected $testingFramework;

/**
* @var Tx_Cgfaq_Domain_Repository_FaqRepository
*/
protected $fixture;

public function setUp() {
  $this-&gt;testingFramework = new Tx_Phpunit_Framework('tx_cgfaq');
  $this-&gt;fixture = $this-&gt;objectManager-&gt;get('Tx_Cgfaq_Domain_Repository_FaqRepository');
}

public function tearDown() {
  $this-&gt;testingFramework-&gt;cleanUp();
  unset($this-&gt;testingFramework, $this-&gt;fixture);
}</pre>
<p>In den einzelnen Tests generieren wir zunächst einige Dummy-Datenbankeinträge, führen die entsprechenden Repository-Methoden aus und prüfen schlussendlich das Rückgabeergebnis:</p>
<pre class="brush:php">/**
* @test
* @return void
*/
public function fetchByFeUserAndGroup_testing_SingleUserConstraint() {
  $pid = 0;
  $mockCustomerRelatedService = $this-&gt;getMock('Tx_Cgfaq_Service_CustomerRelatedService');
  $this-&gt;fixture-&gt;injectCustomerRelatedService($mockCustomerRelatedService);

// create some dummy records
$this-&gt;testingFramework-&gt;createRecord('tx_cgfaq_domain_model_faq', array(
'pid'         =&gt; $pid,
'type'        =&gt; Tx_Cgfaq_Controller_FaqController::SIMPLE_FAQ,
'question'    =&gt; 'OKAY',
'answer'    =&gt; 'OKAY',
'front_user'=&gt; 99
));
$this-&gt;testingFramework-&gt;createRecord('tx_cgfaq_domain_model_faq', array(
'pid'         =&gt; $pid,
'type'        =&gt; Tx_Cgfaq_Controller_FaqController::SIMPLE_FAQ,
'question'    =&gt; 'AHA',
'answer'    =&gt; 'AHA',
'front_user'=&gt; 99
));
$this-&gt;testingFramework-&gt;createRecord('tx_cgfaq_domain_model_faq', array(
'pid'         =&gt; $pid,
'type'        =&gt; Tx_Cgfaq_Controller_FaqController::SIMPLE_FAQ,
'question'    =&gt; 'ERROR',
'answer'    =&gt; 'ERROR',
'front_user'=&gt; 88
));

$mockCustomerRelatedService-&gt;expects($this-&gt;any())
-&gt;method('isGroupMember')
-&gt;will($this-&gt;returnValue(FALSE));

$mockCustomerRelatedService-&gt;expects($this-&gt;any())
-&gt;method('getCalculatedFeUser')
-&gt;will($this-&gt;returnValue(99));

$this-&gt;assertEquals(2, (int)$this-&gt;fixture-&gt;fetchByFeUserAndGroup()-&gt;count());
}</pre>
<p><strong>Tipp:</strong> Beim Testen von Repository-Methoden, die den Inhalt der Datenbank verändern (z.B. per remove() oder update()),  müssen vor der Fomulierung der Annahmen ($this-&gt;assert&#8230;..) die durch die Repository-Methoden eingeleiteten Änderungen persistiert werden. Dazu genügen die folgenden beiden Zeilen:</p>
<pre class="brush:php">$persistanceManager = t3lib_div::makeInstance('Tx_Extbase_Persistence_Manager');
$persistanceManager-&gt;persistAll();</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.muenster-webdesign.net/blog/test-driven-development-unter-typo3-extbase-repositories-testen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Test-Driven Development unter Typo3: Extbase-Models testen</title>
		<link>http://www.muenster-webdesign.net/blog/test-driven-development-extbase-models-testen/</link>
		<comments>http://www.muenster-webdesign.net/blog/test-driven-development-extbase-models-testen/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 08:30:46 +0000</pubDate>
		<dc:creator>münster-webdesign</dc:creator>
				<category><![CDATA[Extbase & Fluid]]></category>
		<category><![CDATA[Test-Driven Development]]></category>
		<category><![CDATA[Typo3]]></category>

		<guid isPermaLink="false">http://www.muenster-webdesign.net/blog/?p=1709</guid>
		<description><![CDATA[In diesem und den folgenden Beiträgen möchten wir unsere Erfahrungen für die testgetriebene Entwicklung (TDD) unter Typo3 Extbase/Fluid beschreiben sowie einige &#8220;Best Practice&#8221; vermitteln. Für das Testen von Models hat sich folgende Herangehensweise bewährt: Zunächst erfolgt das Aufsetzen des Testobjekts (&#8220;fixture&#8221;): /** * @var Tx_Cgfaq_Domain_Model_Faq */ protected $fixture; public function setUp() { $this-&#62;fixture = new [...]]]></description>
			<content:encoded><![CDATA[<p>In diesem und den folgenden Beiträgen möchten wir unsere Erfahrungen für die testgetriebene Entwicklung (TDD) unter Typo3 Extbase/Fluid beschreiben sowie einige &#8220;Best Practice&#8221; vermitteln.</p>
<p>Für das Testen von Models hat sich folgende Herangehensweise bewährt:</p>
<p>Zunächst erfolgt das Aufsetzen des Testobjekts (&#8220;fixture&#8221;):</p>
<pre class="brush:php">/**
* @var Tx_Cgfaq_Domain_Model_Faq
*/
protected $fixture;

public function setUp() {
  $this-&gt;fixture = new Tx_Cgfaq_Domain_Model_Faq();
}</pre>
<p>Solange keine externen Ressourcen für die Erstellung des Testobjekts benötigt werden, kann auf eine explizite tearDown()-Methode verzichtet werden.</p>
<p>Setter und Getter für einfache Objekteingenschaften testen wir wie folgt. Dabei greifen wir wann immer es sinnvoll ist auf &#8220;assertSame&#8221; statt auf &#8220;asserEquals&#8221; zurück. So können wir sicher sein, dass sowohl der Typ der Eigenschaft als auch deren Wert auf Gleichheit geprüft werden. Zusätzlich prüfen wir, dass jede Eigenschaft den von uns erwarteten Ausgangswert besitzt:</p>
<pre class="brush:php">/**
* Test if getTitle() returns inital value for title
*
* @test
* @return void
*/
public function getTitleReturnsInitialValueForTitle() {
$this-&gt;assertSame('', $this-&gt;fixture-&gt;getTitle());
}

/**
* Test if a title can be set
*
* @test
* @return void
*/
public function aTitleCanBeSet() {
  $this-&gt;fixture-&gt;setTitle('Hello World');
  $this-&gt;assertSame('Hello World', $this-&gt;fixture-&gt;getTitle());
}</pre>
<p>Objekteigenschaften, die als ObjectStorage dienen, testen wir wie folgt. Dabei testen wir neben den Setter- und Getter-Methoden auch die Möglichkeit, Objekte hinzuzufügen (add/attach) respektive zu löschen (remove/detach).</p>
<p>Im ersten Schritt stellen wir zunächst sicher, dass die Eigenschaft, die als Object Storage dient, korrekt initalisiert wird, sprich ein Objekt der Klasse &#8220;Tx_Extbase_Persistence_ObjectStorage&#8221; ist und der Objektspeicher leer ist:</p>
<pre class="brush:php">/**
* Test if getCategories() returns inital value for object storage
*
* @test
* @return void
**/
public function getCategoriesReturnsInitialValueForCategories() {
  $this-&gt;assertSame('Tx_Extbase_Persistence_ObjectStorage', get_class($this-&gt;fixture-&gt;getCategories()));
  $this-&gt;assertEquals(0, count($this-&gt;fixture-&gt;getCategories()));
}</pre>
<p>Als Nächstes prüfen wir die Setter-Methode. Wichtig ist in diesem Zusammenhang die Verwendung von Mock-Objekten. Nur so lässt sich das TDD-Paradigma &#8220;loosely coupled objects&#8221;, der locker verbundenen Objekte, umsetzen:</p>
<pre class="brush:php">/**
* Test if a category can be set
*
* @test
* @return void
**/
public function aCategoryCanBeSet() {
  $mockObjStorage = $this-&gt;getMock('Tx_Extbase_Persistence_ObjectStorage', array('contains'));
  $mockObjStorage-&gt;expects($this-&gt;any())-&gt;method('contains')-&gt;with('foo')-&gt;will($this-&gt;returnValue(TRUE));
  $this-&gt;fixture-&gt;setCategories($mockObjStorage);

  $this-&gt;assertTrue($this-&gt;fixture-&gt;getCategories()-&gt;contains('foo'));
}</pre>
<p>Zu guter Letzt folgen die Tests für die addCategory()- und removeCategory()-Methoden:</p>
<pre class="brush:php">/**
* Test if a category can be added
*
* @test
* @return void
**/
public function aCategoryCanBeAdded() {
  $category = new Tx_Cgfaq_Domain_Model_Categories();
  $this-&gt;fixture-&gt;addCategory($category);

  $this-&gt;assertTrue($this-&gt;fixture-&gt;getCategories()-&gt;contains($category);

/**
* Test if a category can be removed
*
* @test
* @return void
**/
public function aCategoryCanBeRemoved() {
  $category = new Tx_Cgfaq_Domain_Model_Categories();
  $this-&gt;fixture-&gt;addCategory($category);
  $this-&gt;assertEquals(1, count($this-&gt;fixture-&gt;getCategories()));
  $this-&gt;fixture-&gt;removeCategory($category);

  $this-&gt;assertFalse($this-&gt;fixture-&gt;getCategories()-&gt;contains($category));
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.muenster-webdesign.net/blog/test-driven-development-extbase-models-testen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Typo3 Advanced FAQs (cgfaq): FAQ-Extension für Typo3 auf Extbase/Fluid-Basis</title>
		<link>http://www.muenster-webdesign.net/blog/typo3-advanced-faqs-cgfaq-faq-extension-fuer-typo3-auf-extbasefluid-basis/</link>
		<comments>http://www.muenster-webdesign.net/blog/typo3-advanced-faqs-cgfaq-faq-extension-fuer-typo3-auf-extbasefluid-basis/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 14:19:51 +0000</pubDate>
		<dc:creator>münster-webdesign</dc:creator>
				<category><![CDATA[Extbase & Fluid]]></category>
		<category><![CDATA[Typo3]]></category>

		<guid isPermaLink="false">http://www.muenster-webdesign.net/blog/?p=1660</guid>
		<description><![CDATA[Mit unserer neuen Typo3-Extension Advanced FAQs (cgfaq) lassen sich FAQs komfortabel über das Typo3-Frontend verwalten und nutzen. FAQ-SUCHE: Zentraler Bestandteil der auf Extbase/Fluid basierenden Typo3-Extension ist unser FAQ-Suchmodul. Die integrierte Autovervollständigung des eingegebenen Suchausdrucks sowie die Vorfilterung per Stoppwortliste ermöglichen eine schnelle und zielgerichtete Suche in der FAQ-Datenbank. Die Listenansicht der gefundenen FAQs unterstützt zusätzlich [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1663" class="wp-caption alignright" style="width: 220px"><a href="http://www.muenster-webdesign.net/blog/wp-content/uploads/2011/07/typo3-faq-extension-faq-suche.gif" rel="shadowbox[sbpost-1660];player=img;" title="typo3-faq-extension-faq-suche"><img class="size-thumbnail wp-image-1663 " title="typo3-faq-extension-faq-suche" src="http://www.muenster-webdesign.net/blog/wp-content/uploads/2011/07/typo3-faq-extension-faq-suche-210x110.gif" alt="Dank Autovervollständigung und Stoppwortfilterung sind FAQs schnell gefunden" width="210" height="110" /></a><p class="wp-caption-text">Dank Autovervollständigung und Stoppwortfilterung sind FAQs schnell gefunden</p></div>
<p>Mit unserer neuen Typo3-Extension <em><strong>Advanced FAQs (cgfaq) </strong></em>lassen sich FAQs komfortabel über das Typo3-Frontend verwalten und nutzen.</p>
<p><em><strong>FAQ-SUCHE:</strong></em> Zentraler Bestandteil der auf Extbase/Fluid basierenden Typo3-Extension ist unser FAQ-Suchmodul. Die integrierte Autovervollständigung des eingegebenen Suchausdrucks sowie die Vorfilterung per Stoppwortliste ermöglichen eine schnelle und zielgerichtete Suche in der FAQ-Datenbank. Die Listenansicht der gefundenen FAQs unterstützt zusätzlich eine seitenweise Ausgabe der Treffer mit variabler Trefferanzahl pro Seite inklusive Pagebrowser sowie eine spaltenweise Sortierfunktion.</p>
<p>&nbsp;</p>
<div id="attachment_1668" class="wp-caption alignright" style="width: 220px"><a href="http://www.muenster-webdesign.net/blog/wp-content/uploads/2011/07/typo3-faq-extension-faq-anlegen.gif" rel="shadowbox[sbpost-1660];player=img;" title="typo3-faq-extension-faq-anlegen"><img class="size-thumbnail wp-image-1668 " title="typo3-faq-extension-faq-anlegen" src="http://www.muenster-webdesign.net/blog/wp-content/uploads/2011/07/typo3-faq-extension-faq-anlegen-210x110.gif" alt="&quot;Einfache&quot; FAQs bestehen aus einer Frage und der dazugehörigen Antwort" width="210" height="110" /></a><p class="wp-caption-text">&quot;Einfache&quot; FAQs bestehen aus einer Frage und der dazugehörigen Antwort</p></div>
<p><em><strong>FAQ ANLEGEN:</strong></em> Unsere Typo3-Extension unterscheidet zwischen einfachen FAQs und FAQ-Fragebäumen. Das Modul zum Anlegen einfacher FAQs bietet Anwendern die Möglichkeit, jeweils eine FAQ-Frage sowie die dazugehörige Antwort einzugeben. Der integrierte Rich-Text-Editor bietet zusätzlich vielfältige Formatierungsmöglichkeiten und -freiheiten.</p>
<p>[Anmerkung: Wir haben in diesem Zusammenhang mit verschiedenen RTEs experimentiert, um Anwendern bei der Eingabe der FAQs maximalen Komfort und Funktionsumfang bieten zu können - unter anderem auch mit <a href="http://www.aloha-editor.org/" target="_blank">Aloha</a>. Letztlich entschlossen wir uns für die Integration des <a href="http://ckeditor.com/" target="_blank">CKEditor</a>, der für unser Anwedungsszenario die besten Voraussetzungen und Features bot.]<span id="more-1660"></span></p>
<p>&nbsp;</p>
<div id="attachment_1686" class="wp-caption alignright" style="width: 220px"><em><strong><a href="http://www.muenster-webdesign.net/blog/wp-content/uploads/2011/07/typo3-faq-extension-faq-fragebaum-anlegen.gif" rel="shadowbox[sbpost-1660];player=img;" title="typo3-faq-extension-faq-fragebaum-anlegen"><img class="size-thumbnail wp-image-1686 " title="typo3-faq-extension-faq-fragebaum-anlegen" src="http://www.muenster-webdesign.net/blog/wp-content/uploads/2011/07/typo3-faq-extension-faq-fragebaum-anlegen-210x150.gif" alt="FAQ-Fragebäume ermöglichen die Darstellung komplexer Entscheidungsbäume die pro Frage mehrere Antwortmöglichkeiten bieten" width="210" height="150" /></a></strong></em><p class="wp-caption-text">FAQ-Fragebäume ermöglichen die Darstellung komplexer Entscheidungsbäume die pro Frage mehrere Antwortmöglichkeiten bieten</p></div>
<p><em><strong>FAQ FRAGEBAUM ANLEGEN:</strong></em> Der zweite unterstützte FAQ-Typ (FAQ-Fragebaum) ermöglicht den Aufbau komplexer FAQ-Entscheidungsbäume, die auf eine Frage mehrere Antwortmöglichkeiten bieten können. An diese können sich wiederum weitere Entscheidungsmöglichkeiten respektive Fragen anschließen.</p>
<p>Letztlich können so auch komplexe Problemstellungen, die nicht mit einer einzelnen Frage/Antwort auskommen, über unsere FAQ-Extension komfortabel abgewickelt werden.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><em><strong>FAQ BEARBEITEN / LÖSCHEN:</strong></em> Das Modul zum Löschen und Bearbeiten von FAQs bietet eine integrierte Suche sowie zusätzlich alle Listenfunktionen, wie sie auch die FAQ-Suche implementiert.</p>
<p>&nbsp;</p>
<div id="attachment_1697" class="wp-caption alignright" style="width: 220px"><a href="http://www.muenster-webdesign.net/blog/wp-content/uploads/2011/07/typo3-faq-extension-faq-teilbaum-loeschen.gif" rel="shadowbox[sbpost-1660];player=img;" title="typo3-faq-extension-faq-teilbaum-loeschen"><img class="size-thumbnail wp-image-1697" title="typo3-faq-extension-faq-teilbaum-loeschen" src="http://www.muenster-webdesign.net/blog/wp-content/uploads/2011/07/typo3-faq-extension-faq-teilbaum-loeschen-210x110.gif" alt="Bei FAQ-Fragebäumen können gezielt bestimmte Teilbäume gelöscht werden" width="210" height="110" /></a><p class="wp-caption-text">Bei FAQ-Fragebäumen können gezielt bestimmte Teilbäume gelöscht werden</p></div>
<p>Weiterhin ist es möglich, bei umfangreichen FAQ-Fragebäumen gezielt bestimmte FAQ-Teilfragebäume zu löschen, was erheblich zur einfachen und effizienten Bearbeitung der FAQ-Fragebäume beiträgt.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muenster-webdesign.net/blog/typo3-advanced-faqs-cgfaq-faq-extension-fuer-typo3-auf-extbasefluid-basis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

