<?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>StarSt0rm Design</title>
	<atom:link href="http://www.starstormdesign.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.starstormdesign.de</link>
	<description>PHP, MySQL, Sicherheit Internet, Suchmaschinenoptimierung, meine Projekte, Tipps, Trick und Zahlreiche Tutorials.</description>
	<lastBuildDate>Sat, 24 Jan 2015 11:49:34 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.10</generator>
	<item>
		<title>&#8222;Generator&#8220; Meta-Tag entfernen &#8211; Drupal 8</title>
		<link>http://www.starstormdesign.de/generator-meta-tag-entfernen-drupal-8/</link>
		<pubDate>Sat, 24 Jan 2015 10:08:22 +0000</pubDate>
		<dc:creator><![CDATA[Alexander Bogomolov]]></dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Drupal 8]]></category>
		<category><![CDATA[Meta-Tag]]></category>

		<guid isPermaLink="false">http://www.starstormdesign.de/?p=520</guid>
		<description><![CDATA[Fast jedes CMS schreibt innerhalb des head-Elements den eigenen Namen und im schlimmsten Fall sogar die Versionsnummer in einen Meta-Tag. Das große Problem an der Angabe: Die potenziellen Angreifer wissen sofort welches CMS und in welcher Version verwendet wird. Das macht die Suche nach einer Sicherheitslücke natürlich viel einfacher. Aus diesem Grund empfehle ich jedem, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Fast jedes CMS schreibt innerhalb des head-Elements den eigenen Namen und im schlimmsten Fall sogar die Versionsnummer in einen Meta-Tag. Das große Problem an der Angabe: Die potenziellen Angreifer wissen sofort welches CMS und in welcher Version verwendet wird. Das macht die Suche nach einer Sicherheitslücke natürlich viel einfacher. Aus diesem Grund empfehle ich jedem, diese Informationen zu unterdrücken.<span id="more-520"></span></p>
<p>Auch <a title="Alle Artikel zu Drupal 8" href="/tag/drupal-8/">Drupal 8</a> generiert einen Meta-Tag mit diesen Angaben. Dieser lässt sich jedoch mit wenigen Zeilen entfernen. Dazu eignet sich der Hook *_preprocess_page(&amp;$variables) in der *.theme Datei. Das Sternchen steht dabei für den aktuellen Theme- oder Modulnamen. (In dem kommenden Beispiel &#8222;my_theme&#8220;.)</p>
<script src="https://gist.github.com/99072e08d483a8969139.js?file=my_theme.theme"></script>
<p>In den Zeilen 6-7 werden alle Meta-Tags selektiert und anschließend in einer Schleife durchlaufen. Entspricht eins der Namen dem Wort &#8222;Generator&#8220;, so wird dieses Element aus dem Array entfernt.</p>
]]></content:encoded>
			</item>
		<item>
		<title>VarDumper &#8211; Neue Komponente in Symfony 2.6</title>
		<link>http://www.starstormdesign.de/vardumper-neue-komponente-symfony-2-6/</link>
		<pubDate>Sat, 27 Dec 2014 11:12:00 +0000</pubDate>
		<dc:creator><![CDATA[Alexander Bogomolov]]></dc:creator>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[Komponente]]></category>
		<category><![CDATA[Symfony2]]></category>
		<category><![CDATA[VarDumper]]></category>

		<guid isPermaLink="false">http://www.starstormdesign.de/?p=512</guid>
		<description><![CDATA[Die in der VarDumper-Komponente enthaltene dump() Funktion soll das übliche und native var_dump() in PHP ablösen. Mit dump() können alle Variablen übersichtlich ausgegeben werden. Die Ausgabe lässt sich einfach auf- und zuklappen. Ebenso werden die Sichtbarkeiten der Attribute gut visualisiert. Diese Komponente wird in Zukunft wohl das LadybugBundle komplett ersetzen. Die Funktion dump() ist intelligent genug [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Die in der <a href="http://symfony.com/blog/new-in-symfony-2-6-vardumper-component">VarDumper</a>-Komponente enthaltene <code>dump()</code> Funktion soll das übliche und native <code>var_dump()</code> in PHP ablösen. Mit <code>dump()</code> können alle Variablen übersichtlich ausgegeben werden. Die Ausgabe lässt sich einfach auf- und zuklappen. Ebenso werden die Sichtbarkeiten der Attribute gut visualisiert. Diese Komponente wird in Zukunft wohl das <a href="https://github.com/raulfraile/LadybugBundle">LadybugBundle</a> komplett ersetzen.<span id="more-512"></span></p>
<p>Die Funktion <code>dump()</code> ist intelligent genug und erkennt, ob anschließend ein <code>die()</code> kommt. Sollte klein <code>die()</code> folgen, so wird die Ausgabe in der Web Debug Toolbar unter dem Reiter &#8222;Dump()&#8220; angezeigt. Wird anschließen die <code>die()</code> Funktion benutzt, so ist die Ausgabe wie bei <code>var_dump()</code>.</p>
<script src="https://gist.github.com/58fed13de507c8bb67f3.js?file=DefaultController.php"></script>
<figure id="attachment_515" class="aligncenter"><a href="http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-Web-Debug-Toolbar.png"><img class="size-medium wp-image-515" src="http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-Web-Debug-Toolbar-680x256.png" alt="Ausgabe von VarDumper in der Web Debug Toolbar" width="680" height="256" srcset="http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-Web-Debug-Toolbar-680x256.png 680w, http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-Web-Debug-Toolbar-1024x386.png 1024w, http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-Web-Debug-Toolbar.png 1265w" sizes="(max-width: 680px) 100vw, 680px" /></a> Ausgabe von VarDumper in der Web Debug Toolbar</figure>
<figure id="attachment_514" class="aligncenter"><a href="http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-Web-Debug-Panel.png"><img class="size-medium wp-image-514" src="http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-Web-Debug-Panel-680x389.png" alt="Ausgabe von VarDumper in der Web Debug Toolbar Panel" width="680" height="389" srcset="http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-Web-Debug-Panel-680x389.png 680w, http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-Web-Debug-Panel-1024x586.png 1024w, http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-Web-Debug-Panel.png 1600w" sizes="(max-width: 680px) 100vw, 680px" /></a> Ausgabe von VarDumper in der Web Debug Toolbar Panel</figure>
<p>Die Komponente ist unter anderem auch in Twig nutzbar. Es wird das Tag <code>{% dump %}</code> sowie die Funktion <code>{{ dump() }}</code> zur Verfügung gestellt. Der Unterschied liegt bei dem Ausgabeort: <code>{% dump my_var %}</code> erzeugt die Ausgabe in der Web Debug Toolbar, während <code>{{ dump() }}</code> die von <code>var_dump(my_var)</code> gewohnte Ausgabe erzeugt.</p>
<script src="https://gist.github.com/58fed13de507c8bb67f3.js?file=index.html.twig"></script>
<figure id="attachment_513" class="aligncenter"><a href="http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-twig.png"><img class="size-medium wp-image-513" src="http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-twig-680x251.png" alt="Ausgabe von VarDumper im Inhaltsbereich" width="680" height="251" srcset="http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-twig-680x251.png 680w, http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-twig-1024x378.png 1024w, http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-twig.png 1437w" sizes="(max-width: 680px) 100vw, 680px" /></a> Ausgabe von VarDumper im Inhaltsbereich</figure>
<h2>Installation &#8211; Symfony &gt;= 2.6</h2>
<p>Ab Symfony 2.6 ist die Komponente standardmäßig vorhanden und muss nur unter Umständen aktiviert werden. Dazu muss lediglich das <code>DebugBundle</code> in der <code>AppKernel.php</code> eingebunden werden:</p>
<script src="https://gist.github.com/58fed13de507c8bb67f3.js?file=AppKernel.php"></script>
<h2>Installation &#8211; Symfony &lt; 2.6</h2>
<p>Wird eine ältere Version von Symfony verwendet, so kann das Bundle bequem über Composer nachinstalliert werden.</p>
<p>Anschließend ebenfalls das <code>DebugBundle</code> in der <code>AppKernel.php</code> einbinden.</p>
<script src="https://gist.github.com/58fed13de507c8bb67f3.js?file=composer-install-debug-bundle.sh"></script>
<script src="https://gist.github.com/58fed13de507c8bb67f3.js?file=AppKernel.php"></script>
<h2>Verwendung außerhalb von Symfony</h2>
<p>Wie jede Symfony Komponente, kann auch der VarDumper in jedem PHP-Projekt verwendet werden. Das Full-Stack Framework Symfony ist keine Voraussetzung für die Nutzung.</p>
<p>Die Bibliothek wird einfach per Composer installiert.</p>
<script src="https://gist.github.com/58fed13de507c8bb67f3.js?file=composer-install-var-dumper.sh"></script>
<script src="https://gist.github.com/58fed13de507c8bb67f3.js?file=standalone.php"></script>
<figure id="attachment_516" class="aligncenter"><a href="http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-plain.png"><img class="size-full wp-image-516" src="http://www.starstormdesign.de/wp-uploads/2014/12/VarDumper-plain.png" alt="Ausgabe von VarDumper im Inhaltsbereich" width="382" height="213" /></a> Ausgabe von VarDumper im Inhaltsbereich</figure>
<h2>Fazit</h2>
<p>Die neue VarDumper-Komponente ist eine super Möglichkeit etwas schnell und unkompliziert zu debuggen, da es überall einsetzbar ist.</p>
]]></content:encoded>
			</item>
		<item>
		<title>Drupal Modul für Backlinkseller.de</title>
		<link>http://www.starstormdesign.de/drupal-modul-fuer-backlinkseller-de/</link>
		<comments>http://www.starstormdesign.de/drupal-modul-fuer-backlinkseller-de/#comments</comments>
		<pubDate>Sat, 11 Oct 2014 14:29:32 +0000</pubDate>
		<dc:creator><![CDATA[Alexander Bogomolov]]></dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Drupal 7]]></category>
		<category><![CDATA[Modul]]></category>

		<guid isPermaLink="false">http://www.starstormdesign.de/?p=503</guid>
		<description><![CDATA[Bereits vor einigen Jahren habe ich über den Service Backlinkseller.de geschrieben. Dabei habe ich die Möglichkeiten und Risiken von dem Service berichtet. Was mich aber immer gestört hat, war die Tatsache, dass die Einbindung des Codes nicht so einfach war. Es gab keine Module oder Plugins für die gängigen Content-Management-Systeme (CMS). Der Benutzer musste den [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Bereits vor einigen Jahren habe ich über den <a title="Mit Backlinkseller.de Geld verdienen oder Links erwerben" href="http://www.starstormdesign.de/links-erwerben-oder-geld-verdienen-mit-backlinkseller-de/">Service Backlinkseller.de geschrieben</a>. Dabei habe ich die Möglichkeiten und Risiken von dem Service berichtet. Was mich aber immer gestört hat, war die Tatsache, dass die Einbindung des Codes nicht so einfach war. Es gab keine Module oder Plugins für die gängigen Content-Management-Systeme (CMS). Der Benutzer musste den PHP-Code in die Templates einfügen. Das ist aber oft nicht ohne Fachwissen möglich. Außerdem ist das Auffinden der richtigen Stelle in einem fremden (kostenlosen oder gekauften) Theme nicht immer einfach.<span id="more-503"></span> Ich beschäftige mich nun seit mehr als 5 Jahren mit Drupal und habe zahlreiche Module für das CMS geschrieben. Diese waren aber immer für Kunden und konnten somit nicht veröffentlicht werden.</p>
<p>Diese man ich zum Anlass und entwickelte ein <a href="https://www.drupal.org/project/backlinkseller">einfaches Drupal Modul</a>, dass die Einbindung von <a href="http://www.backlinkseller.de/?referrer=586362171">Backlinkseller.de</a>* erheblich vereinfacht. Das Modul stellt zwei Blöcke zur Verfügung: Einen für die Backlinks und einen für das Affiliate-Programm. Alle Parameter können bequem im Backend verwaltet werden.</p>
<p><a href="http://www.starstormdesign.de/wp-uploads/2014/10/backlinkseller-settings.png"><img class="aligncenter wp-image-507 size-medium" src="http://www.starstormdesign.de/wp-uploads/2014/10/backlinkseller-settings-680x265.png" alt="Einstellungen des Backlinkseller.de Drupal Modul " width="680" height="265" srcset="http://www.starstormdesign.de/wp-uploads/2014/10/backlinkseller-settings-680x265.png 680w, http://www.starstormdesign.de/wp-uploads/2014/10/backlinkseller-settings-1024x399.png 1024w" sizes="(max-width: 680px) 100vw, 680px" /></a>  <a href="http://www.starstormdesign.de/wp-uploads/2014/10/backlinkseller-affiliate-settings.png"><img class="aligncenter wp-image-504 size-medium" src="http://www.starstormdesign.de/wp-uploads/2014/10/backlinkseller-affiliate-settings-680x319.png" alt="Affiliate-Einstellungen" width="680" height="319" srcset="http://www.starstormdesign.de/wp-uploads/2014/10/backlinkseller-affiliate-settings-680x319.png 680w, http://www.starstormdesign.de/wp-uploads/2014/10/backlinkseller-affiliate-settings-1024x480.png 1024w" sizes="(max-width: 680px) 100vw, 680px" /><img class="aligncenter wp-image-506 size-medium" src="http://www.starstormdesign.de/wp-uploads/2014/10/backlinkseller-output-570x400.png" alt="Ausgabe im Frontend vom Backlinkseller.de Drupal Module" width="570" height="400" srcset="http://www.starstormdesign.de/wp-uploads/2014/10/backlinkseller-output-570x400.png 570w, http://www.starstormdesign.de/wp-uploads/2014/10/backlinkseller-output.png 770w" sizes="(max-width: 570px) 100vw, 570px" /></a></p>
<p>Drupal nutzt normalerweise den Modulnamen für alle Klassen und IDs. Diese Ausgaben würden jedoch Goolge und den AdBlockern sofort auffallen. Somit werden alle Anzeichen (Pfade, Klasse und IDs) von dem Modul unterdrückt. So ist die Nutzung nicht im HTML erkennbar. Zusätzlich kann der Benutzer selbst Klassen und IDs definieren.</p>
<div class="message info">Projekt: <a href="https://www.drupal.org/project/backlinkseller">Backlinkseller</a></div>
<p>Aktuell gibt es das Modul nur für Drupal 7. Die Version für Drupal 8 ist schon in Arbeit und wird bald veröffentlicht. Sollte der Wunsch für eine Drupal 6 Version vorliegen, dann kontaktiert mich einfach. Das sollte dann zügig umsetzbar sein.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.starstormdesign.de/drupal-modul-fuer-backlinkseller-de/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Symfony2 BeSimpleSoapBundle verwenden</title>
		<link>http://www.starstormdesign.de/symfony2-besimplesoapbundle-verwenden/</link>
		<pubDate>Mon, 07 Apr 2014 07:10:00 +0000</pubDate>
		<dc:creator><![CDATA[Alexander Bogomolov]]></dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Symfony2]]></category>

		<guid isPermaLink="false">http://www.starstormdesign.de/?p=489</guid>
		<description><![CDATA[In einem vorherigen Artikel beschrieb ich, wie man einen SOAP-Service mit der BeSimpleSoap Bibliothek anspricht. Ein weiterer Bestandteil der Bibliothek ist ein Bundle für Symfony2. Um diesem Artikel folgen zu können, empfehle ich das Lesen von dem vorher angesprochenen Artikel. Kurz zusammengefasst stellt das Bundle eine Möglichkeit zur Verfügung SOAP Clients über die config.yml zu [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>In einem <a title="SOAP Service mit einem SOAP Client in PHP nutzen" href="http://www.starstormdesign.de/soap-service-mit-einem-soap-client-php-nutzen/">vorherigen Artikel</a> beschrieb ich, wie man einen SOAP-Service mit der <em>BeSimpleSoap</em> Bibliothek anspricht. Ein weiterer Bestandteil der Bibliothek ist ein Bundle für Symfony2. Um diesem Artikel folgen zu können, empfehle ich das Lesen von dem vorher angesprochenen Artikel. Kurz zusammengefasst stellt das Bundle eine Möglichkeit zur Verfügung SOAP Clients über die <code>config.yml</code> zu registrieren. Dabei wird gleich für jede WSDL-Datei ein Symfony Service angelegt. Doch fangen wir ganz von vorne an.<span id="more-489"></span></p>
<h2>Installation</h2>
<p>Die Installation läuft genauso ab, <a title="SOAP Service mit einem SOAP Client in PHP nutzen" href="http://www.starstormdesign.de/soap-service-mit-einem-soap-client-php-nutzen/">wie bei dem BeSimpleSoapClient</a>. Alle Komponenten von <em>BeSimpleSoap</em> sind in einem Repository zusammengefasst.</p>
<script src="https://gist.github.com/10015809.js?file=BeSimpleSoapBundle-install.json "></script>
<h2>SOAP Clients erzeugen</h2>
<p>Musste man bei dem Einsatz von dem SOAP-Client händisch Instanzen erzeugen und Parameter übergeben, so wird dieses von dem Bundle vereinfacht. Das Bundle stellt eine sehr gute Möglichkeit zur Verfügung, die Clients über die Konfiguration zu definieren.</p>
<p>Dabei wird in dem Namensraum <code>be_simple_soap</code> als Erstes das Caching konfiguriert.</p>
<p>Anschließend können die SOAP-Clients, inklusive der Classmap in einem Array unter <code>be_simple_soap.clients</code> registriert werden.</p>
<script src="https://gist.github.com/10015809.js?file=BeSimpleSoapBundle-config.yml "></script>
<p>Alle SOAP-Clients werden dabei gleich als Services registriert und können somit von überall verwendet werden.</p>
<script src="https://gist.github.com/10015809.js?file=BeSimpleSoapBundle-service.php "></script>
<p>Ab hier ist die Arbeit genauso wie bei der Nutzung des Clients ohne das Bundle.</p>
<p>Ich wünsche euch viel Erfolg beim Ausprobieren! <img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
			</item>
		<item>
		<title>Tage im jQuery UI Datepicker hervorheben</title>
		<link>http://www.starstormdesign.de/tage-im-jquery-ui-datepicker-hervorheben/</link>
		<comments>http://www.starstormdesign.de/tage-im-jquery-ui-datepicker-hervorheben/#comments</comments>
		<pubDate>Tue, 01 Apr 2014 08:37:26 +0000</pubDate>
		<dc:creator><![CDATA[Alexander Bogomolov]]></dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Datepicker]]></category>
		<category><![CDATA[jQuery UI]]></category>

		<guid isPermaLink="false">http://www.starstormdesign.de/?p=485</guid>
		<description><![CDATA[Manchmal möchte man in einem Datepicker einzelne Tage besonders hervorheben. In einem aktuellen Projekt habe ich eine Übersicht von Veranstaltungen. Diese sind in einer Tabelle aufgeführt. Über der Tabelle befinden sich einige Filtermöglichkeiten. So kann der Besucher die Veranstaltungen nach Ort, Thema und Datum filtern. Das Datum für die Filterung kann über einen Datepicker von [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Manchmal möchte man in einem Datepicker einzelne Tage besonders hervorheben. In einem aktuellen Projekt habe ich eine Übersicht von Veranstaltungen. Diese sind in einer Tabelle aufgeführt. Über der Tabelle befinden sich einige Filtermöglichkeiten. So kann der Besucher die Veranstaltungen nach Ort, Thema und Datum filtern. Das Datum für die Filterung kann über einen Datepicker von jQuery UI vorgenommen werden. Da nicht an jedem Tag etwas stattfindet, bräuchte man eine kleine Hilfestellung für den Benutzer. Die Tage mit Veranstaltungen sollen farblich hervorgehoben sein und andere nicht klickbar.<span id="more-485"></span></p>
<h2>Vorbereitungen</h2>
<p>Als erstes muss natürlich jQuery und jQuery UI eingebunden werden.</p>
<script src="https://gist.github.com/9908102.js?file=jquery-ui-datepicker-einbinden.html"></script>
<p>Anschließend der Datepicker an einem Eingabefeld initiiert. Zusätzlich haben ich in diesem Beispiel alle Tage, an denen Veranstaltungen sind, in einem Array hinterlegt. (Natürlich macht es so in der Realität wenig Sinn, da es sehr viele Daten sein werden. Idealerweise holt man sich die Daten per Ajax.)</p>
<script src="https://gist.github.com/9908102.js?file=jquery-ui-datepicker-init.js"></script>
<h2>Tage hervorheben</h2>
<p>Nun geht es an die eigentliche Aufgabe. Um die Tage hervorzuheben, müsste man den aktuell gerenderten Tag mit dem Array abgleichen. Ist der Tag im Array vorhanden, dann bekommt dieser eine zusätzliche Klasse für die Hervorhebung.</p>
<p>Dem Datepicker von jQuery UI kann ein Array mit Optionen übergeben werden. Darunter findet man auch die Option <code>beforeShowDay</code>. Dieser Option wird eine Funktion übergeben, die als Parameter den aktuellen Tag, der gerendert wird, übergeben bekommt. Nun ist es ein Leichtes zu prüfen, ob dieser Tag in dem Array mit den Veranstaltungen ist.</p>
<script src="https://gist.github.com/9908102.js?file=jquery-ui-datepicker-render.js"></script>
<p>Anbei natürlich eine kleine <a href="http://jsfiddle.net/abogomolov/H3qv3/">Demo auf jsfiddle</a>.</p>
<h2>Fazit</h2>
<p>Die Usability kann in den meisten Fällen durch sehr wenig Aufwand stark verbessert werden. So sieht der Benutzer gleich, an welchen Tagen Veranstaltungen stattfinden und an welchen nicht.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.starstormdesign.de/tage-im-jquery-ui-datepicker-hervorheben/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SOAP Service mit einem SOAP Client in PHP nutzen</title>
		<link>http://www.starstormdesign.de/soap-service-mit-einem-soap-client-php-nutzen/</link>
		<comments>http://www.starstormdesign.de/soap-service-mit-einem-soap-client-php-nutzen/#comments</comments>
		<pubDate>Mon, 24 Mar 2014 06:27:28 +0000</pubDate>
		<dc:creator><![CDATA[Alexander Bogomolov]]></dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<category><![CDATA[SOAP]]></category>

		<guid isPermaLink="false">http://www.starstormdesign.de/?p=482</guid>
		<description><![CDATA[Ich habe in den letzten Wochen sehr viel Zeit damit verbracht SOAP Schnittstellen anzubinden. Verwendet wurde dabei der SOAP-Client BeSimpleSoap. An sich nicht Dramatisches, jedoch machte die fehlende Dokumentation der Komponente einiges schwerer als es sein müsste. In diesem Artikel möchte ich meine Erkenntnisse und Lösungen vorstellen und somit einen Teil zu der fehlenden Dokumentation beitragen. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ich habe in den letzten Wochen sehr viel Zeit damit verbracht SOAP Schnittstellen anzubinden. Verwendet wurde dabei der SOAP-Client <a href="https://github.com/BeSimple/BeSimpleSoap">BeSimpleSoap</a>. An sich nicht Dramatisches, jedoch machte die fehlende Dokumentation der Komponente einiges schwerer als es sein müsste. In diesem Artikel möchte ich meine Erkenntnisse und Lösungen vorstellen und somit einen Teil zu der fehlenden Dokumentation beitragen.</p>
<p>Für die folgenden Beispiele verwende ich den <a href="http://predic8.de/soap/blz-webservice.htm">Bankleitzahlen Web Service</a>. Dieser Service ermittelt zu einer Bankleitzahl den Namen des Kreditinstitutes, die Postleitzahl und den Ort. Wenn die BLZ nicht gefunden wird, dann wird ein Fehler zurückgegeben.<span id="more-482"></span></p>
<h2>Installation</h2>
<p>Am besten verwendet man, wie bei den meisten Komponenten, Composer für die Installation. Einfach die <code>composer.json</code> erweitern und ein Update ausführen. Anschließend die <code>autoload.php</code> aus dem <code>vendor</code> Verzeichnis einbinden. Schon kann man loslegen.</p>
<script src="https://gist.github.com/9702508.js?file=soap-client-composer.json"></script>
<h2>SOAP Client</h2>
<p>Jetzt können wir eine neue Instanz von <code>SoapClient</code> erzeugen. Als ersten Parameter erwartet die Klasse die URL zu der WSDL-Datei.</p>
<script src="https://gist.github.com/9702508.js?file=soap-client-instance.php"></script>
<p>Mit der Methode <code>__getFunctions()</code> kann man schnell alle verfügbaren Methoden des Services ausgeben lassen. In unserem Fall erhalten wir nur die Methode <code>getBank()</code>.</p>
<script src="https://gist.github.com/9702508.js?file=soap-client-get-functions.php"></script>
<p>Die Methode <code>getBank()</code> erwartet als Parameter eine Variable vom Typ <code>getBankType</code>. Schauen wir in die WSDL-Datei und suchen nach der Definition von <code>getBankType</code>, finden wir Folgendes:</p>
<script src="https://gist.github.com/9702508.js?file=soap-client-get-bank-type.xml"></script>
<p>Das bedeutet, dass die Methode <code>getBank()</code> ein Objekt mit dem Attribut <code>blz</code> als ersten Parameter erwartet. Dabei ist das <code>blz</code> Attribut ein String. Probieren wir es doch mal aus.</p>
<script src="https://gist.github.com/9702508.js?file=soap-client-get-bank.php"></script>
<p>Nach der Ausführung erhalten wir ein Objekt, das auch die Informationen zu unserer Bank enthält.</p>
<script src="https://gist.github.com/9702508.js?file=soap-client-get-bank-response.php"></script>
<h2>Wieso ein Objekt?</h2>
<p>Trotzdem fällt etwas auf: Wir erhalten ein Objekt. Eigentlich würde man an der Stelle doch XML erwarten. Und auch der Request sollte XML beinhalten und wir haben eine Klasse übergeben.</p>
<p>Das liegt daran, dass der SOAP Client das XML anhand der WSDL-Datei automatisch in Objekte umwandelt. Dabei werden Instanzen von stdClass, mit den in der WSDL-Datei definierten Attributen, verwendet.</p>
<script src="https://gist.github.com/9702508.js?file=soap-client-wsdl-response-type.xml"></script>
<h2>Eigene Klassen für das Mapping</h2>
<p>Die zurückgegebenen Objekte sind wirklich super und man kann damit viel besser arbeiten als mit XML, jedoch wäre es ganz praktisch, wenn man auch gegen eigene Klassen &#8222;mappen&#8220; könnte. So könnte man z.B. den Namen der Bank im Getter modifizieren oder gleich neue Methoden angeben, um einen Link zu der Google Suche (<code>getGoogleSearchLink</code>) auszugeben. (Mit ist an der Stelle kein besseres Beispiel eingefallen. In einem Fall bekam ich immer einen langen Beschreibungstext. Für die Ausgabe im Frontend brauchte ich aber zusätzlich eine gekürzte Version als Vorschau.)</p>
<p>Der SOAP Client ermöglicht auch das. Als Erstes können alle komplexe Knoten als Klasse angelegt werden. In unserem Beispiel wären es GetBankResponseType und DetailsType.</p>
<ul>
<li><code>GetBankResponseType</code> &#8211; Mit dem Attribut <code>details (DetailsType)</code></li>
<li><code>DetailsType</code> &#8211; Mit den Attributen <code>bezeichnung (string)</code>, <code>bic (string)</code>, <code>ort (string)</code> und <code>plz (string)</code></li>
</ul>
<script src="https://gist.github.com/9702508.js?file=soap-client-wsdl-response-type-GetBankResponseType.php"></script>
<script src="https://gist.github.com/9702508.js?file=soap-client-wsdl-response-type-DetailsType.php"></script>
<p>Nachdem die Klassen angelegt worden sind, muss man nur das Mapping definierten. Dafür muss man beim Initiieren der <code>SoapClient</code> Instanz die Option <code>classmap</code> übergeben. Die Option muss ein Array mit den WSDL-Typen als Schlüssel und den PHP-Klassennamen als Wert sein.</p>
<script src="https://gist.github.com/9702508.js?file=soap-client-mapping.php"></script>
<p>Nun erhalten wir nicht mehr eine &#8222;anonyme&#8220; Objektstruktur und können gleich zusätzliche Methoden definieren.</p>
<script src="https://gist.github.com/9702508.js?file=soap-client-mapped-result.php"></script>
<p>Das sollte für den Anfang reichen. Im kommenden Artikel werde ich auf das BeSimpleSoapBundle für Symfony2 eingehen. Da ist die Verwendung teilweise noch einfacher.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.starstormdesign.de/soap-service-mit-einem-soap-client-php-nutzen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web Notification API</title>
		<link>http://www.starstormdesign.de/web-notifications-api/</link>
		<comments>http://www.starstormdesign.de/web-notifications-api/#comments</comments>
		<pubDate>Tue, 18 Mar 2014 07:01:37 +0000</pubDate>
		<dc:creator><![CDATA[Alexander Bogomolov]]></dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Web Notifications]]></category>

		<guid isPermaLink="false">http://www.starstormdesign.de/?p=464</guid>
		<description><![CDATA[Mit Web Notifications lassen sich standardisierte Nachrichten durch den Browser an den Benutzer ausgeben. Diese unterscheiden sich von den üblichen Popups dadurch, dass der Benutzer diese explizit erlauben muss. Außerdem können die Benachrichtigungen mit Titel, Inhalt und Icon angereichert werden. Bevor eine Benachrichtigung angezeigt wird, erscheint eine ähnliche Abfrage wie bei dem Geolocation API. Erst [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Mit <a href="http://www.w3.org/TR/notifications/">Web Notifications</a> lassen sich standardisierte Nachrichten durch den Browser an den Benutzer ausgeben. Diese unterscheiden sich von den üblichen Popups dadurch, dass der Benutzer diese explizit erlauben muss. Außerdem können die Benachrichtigungen mit Titel, Inhalt und Icon angereichert werden. Bevor eine Benachrichtigung angezeigt wird, erscheint eine ähnliche Abfrage wie bei dem <a title="Geolocation API von HTML5 – Einführung" href="http://www.starstormdesign.de/geolocation-api-html5/">Geolocation API</a>. Erst nach der erfolgten Genehmigung können die Benachrichtigung ausgegeben werden.<span id="more-464"></span></p>
<h2>Browserunterstützung</h2>
<p>Das Web Notifications API wird im Moment nur von Chome &gt;=22 (ab &gt;= 5 mit Vendor-Präfix), Fitefox &gt;= 22 und Safari &gt;= 6.0 unterstützt.</p>
<p>Mit dem folgendem Code lässt sich herausfinden, ob der Browser das Web Notifications API unterstützt:</p>
<script src="https://gist.github.com/4ad825054139ba097e07.js?file=web-notifications-support.js"></script>
<h2>Zugriffserlaubnis einholen</h2>
<p>Bevor die Benachrichtigungen angezeigt werden, muss der Benutzer die Erlaubnis dafür erteilen. Dies verhält sich genauso wie bei dem Geolocation API.</p>
<p>Der aktuelle Zustand ist in dem Attribut <code>Notification.permission</code> hinterlegt. Dieser kann dabei eines der drei Werte haben:</p>
<ul>
<li><code>denied</code> &#8211; Der Benutzer hat den Zugriff auf das API abgelehnt.</li>
<li><code>granted</code> &#8211; Der Benutzer hat den Zugriff auf das API genehmigt.</li>
<li><code>default</code> &#8211; Es gab noch keine Entscheidung oder der Benutzer wurde noch nicht gefragt. (Verhält sich sonst wie denied.)</li>
</ul>
<p>Um die Erlaubnis von dem Benutzer einzuholen, genügt der Aufruf der Notification.requestPermission() Methode:</p>
<script src="https://gist.github.com/4ad825054139ba097e07.js?file=web-notifications-permission.js"></script>
<h2>Benachrichtigung ausgeben</h2>
<p>Nun kann man Benachrichtigungen ausgeben. Dazu genügt es eine neue Instanz von <code>Notification</code> zu erzeugen und dem Konstruktor die Parameter <code>title</code> und <code>options</code> zu übergeben. Dabei muss der Parameter <code>title</code> übergeben werden. Der Parameter <code>options</code> ist optional und beinhaltet eine Reihe an zusätzlichen Informationen, die auch in der Benachrichtigung ausgegeben werden können:</p>
<ul>
<li><code>dir</code> &#8211; Die Ausrichtung der Benachrichtigung. Folgende Optionen sind möglich: auto, ltr, rtl</li>
<li><code>lang</code> &#8211; Die Sprache der anzuzeigenden Benachrichtigung nach <a href="http://tools.ietf.org/html/bcp47">BCP 47</a>.</li>
<li><code>body</code> &#8211; Ein, zum Titel, zusätzlicher Text.</li>
<li><code>tag</code> &#8211; Eine ID für die Benachrichtigung, um diese zu modifizieren.</li>
<li><code>icon</code> &#8211; Eine URL zu einem Icon, dass i.d.R. neben dem Text ausgegeben wird.</li>
</ul>
<script src="https://gist.github.com/4ad825054139ba097e07.js?file=web-notifications-notify.js"></script>
<h2>Events</h2>
<p>Selbstverständlich kann man auf Events reagieren. So ist es z.B. möglich die Klicks auf Benachrichtigungen zu tracken, in dem man auf das onclick-Event lauscht. Oder man markiert die Benachrichtigung in der Datenbank als gelesen, wenn diese angezeigt wird. Dazu steht eine Reihe an Events zur Verfügung:</p>
<ul>
<li><code>Notification.onclick</code> &#8211; Wird jedes Mal ausgelöst, wenn auf die Benachrichtigung geklickt wird.</li>
<li><code>Notification.onshow</code> &#8211; Wird ausgelöst, wenn die Benachrichtigung eingeblendet wird.</li>
<li><code>Notification.onerror</code> &#8211; Wird ausgelöst, wenn es bei der Ausgabe der Benachrichtigung zu einem Fehler kommt.</li>
<li><code>Notification.onclose</code> &#8211; Wird ausgelöst, wenn die Benachrichtigung ausgeblendet wird.</li>
</ul>
<h2>jQuery Plugin</h2>
<p>Das Arbeiten mit solchen APIs ist immer etwas mühsam, da man immer die alten Implementierungen und Verdor-Präfixe berücksichtigen muss. Zum Glück gibt es fast immer eine kleine Bibliothek, die die Verwendung normalisiert und vereinfacht. So auch im Fall von Web Notifications.</p>
<p>Mikhail Davydov, ein Yandex Mitarbeiter, hat einen <a href="https://github.com/azproduction/jquery.notification/">Webkit Notification API jQuery Wrapper</a> geschrieben, der ein einfaches Interface für das API bietet:</p>
<script src="https://gist.github.com/4ad825054139ba097e07.js?file=web-notifications-wrapper.js"></script>
<h2> Fazit</h2>
<p>Das Web Notifications API ist eine gute Möglichkeit die Web Anwendung noch ein Stück näher an eine Desktop  Anwendung zu bringen. So könnte man eine Intranet Anwendung im <a title="Fullscreen API – HTML5 APIs" href="http://www.starstormdesign.de/fullscreen-api-html5/">Vollbild Modus</a> laufen lassen und durch die Web Notifications das Gefühl einer Desktop  Anwendung verstärken.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.starstormdesign.de/web-notifications-api/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fullscreen API &#8211; HTML5 APIs</title>
		<link>http://www.starstormdesign.de/fullscreen-api-html5/</link>
		<pubDate>Mon, 10 Mar 2014 07:42:19 +0000</pubDate>
		<dc:creator><![CDATA[Alexander Bogomolov]]></dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Fullscreen]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://www.starstormdesign.de/?p=468</guid>
		<description><![CDATA[Das Fullscreen API erlaubt es einzelne Elemente im Vollbild anzuzeigen. Dabei ist es egal, ob man ein Bild, Video oder sogar einen Container mit einer ganzen Anwendung (z.B. ein Spiel) nimmt. Der Vollbild-Modus kann in den meisten Browsern mit F11 gestartet werden. Wenn der Modus eingeschaltet wird, erhält der Benutzer eine Abfrage, ob dieses Verhalten [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Das Fullscreen API erlaubt es einzelne Elemente im Vollbild anzuzeigen. Dabei ist es egal, ob man ein Bild, Video oder sogar einen Container mit einer ganzen Anwendung (z.B. ein Spiel) nimmt. Der Vollbild-Modus kann in den meisten Browsern mit F11 gestartet werden. Wenn der Modus eingeschaltet wird, erhält der Benutzer eine Abfrage, ob dieses Verhalten gewünscht ist. Gleichzeitig wird man darüber informiert, dass man den Vollbild-Modus mit der ESC-Taster verlassen kann.<span id="more-468"></span></p>
<h2>Browserunterstützung</h2>
<p>Das API wird in allen modernen Desktop Browsern, inklusive Internet Explorer 11, unterstützt. (Firefox &gt;= 10, Chrome &gt;= 20, Opera &gt;= 12.10, Safari &gt;= 5.1) Bei mobilen Browsern sieht es ganz anders aus. Wenige (Chrome &gt;= 28, Firefox &gt;= 10) unterstützen das Fullscreen API. Das ist aber auch nicht weiter tragisch, da die meisten mobilen Browser sowieso im Vollbild laufen.</p>
<p>Alle Methoden der Fullscreen API sind im Moment noch mit Vendor-Präfixen versehen.</p>
<p>Mit dem folgendem Code lässt sich herausfinden, ob der Browser das Fullscreen API unterstützt:</p>
<script src="https://gist.github.com/9425900.js?file=fullscreen-support.js"></script>
<h2>Vollbild Modus aufrufen</h2>
<p>Mit der Methode <code>requestFullscreen</code> kann man das gewünschte Element in Vollbild anzeigen lassen:</p>
<script src="https://gist.github.com/9425900.js?file=fullscreen-launching.js"></script>
<h2> Vollbild Modus verlassen</h2>
<p>Mit der Methode <code>exitFullscreen</code> wird der Vollbild Modus beendet. Dabei ist wichtig anzumerken, dass <code>exitFullscreen</code> auf das <code>document </code>Objekt anwenden lässt. Eine Übergabe des Elements ist nicht notwendig.</p>
<script src="https://gist.github.com/9425900.js?file=fullscreen-exiting.js"></script>
<h2>Eigenschaften und Events</h2>
<p>Auch die Eigenschaften des APIs sind mit Vendor-Präfixen versehen.</p>
<ul>
<li><code>document.fullscreenEnabled</code> &#8211; Diese Eigenschaft gibt <code>true</code> zurück, wenn das API verfügbar ist.</li>
<li><code>document.fullscreenElement</code> &#8211; Diese Eigenschaft gibt das Element zurück, das gerade im Vollbild angezeigt wird.</li>
<li><code>fullscreenchange</code> &#8211; Dieses Event wird gefeuert, wenn der Vollbild-Modus gestartet oder verlassen wird.</li>
<li><code>fullscreenerror</code> &#8211; Diese Event wird gefeuert, wenn ein Element nicht im Vollbild angezeigt werden kann. Zum Beispiel ein IFrame ohne ein <code>allowfullscreen</code> Attribut.</li>
</ul>
<script src="https://gist.github.com/9425900.js?file=fullscreen-events.js"></script>
<h2>CSS</h2>
<p>Mit CSS kann man die Optik ein wenig verändern. Dabei stehen einem die folgenden Selektoren zur Verfügung.</p>
<ul>
<li><code>:fullscreen</code> &#8211; Mit diesem Selektor kann das Aussehen des Elements, im Vollbild, verändert werden.</li>
<li><code>::backdrop</code> &#8211; Mit diesem Selektor kann der Hintergrund im Vollbild verändert werden.</li>
</ul>
<script src="https://gist.github.com/9425900.js?file=fullscreen-css.css"></script>
<h2>Fazit</h2>
<p>Durch die vielen HTML5 APIs (z.B. <a title="Battery Status API – HTML5 APIs" href="http://www.starstormdesign.de/html5-battery-status-api/">Battery Status API</a>,  <a title="Page Visibility API – HTML5 APIs" href="http://www.starstormdesign.de/html5-page-visibility-api/">Page Visibility API</a>, <a title="Vibration API – HTML5 APIs" href="http://www.starstormdesign.de/vibration-api-html5/">Vibration API</a>) wird die tägliche Arbeit immer abwechslungsreicher und macht somit deutlich mehr Spaß. Die Kunden profitieren von schnelleren Umsetzungszeiten und die Entwickler vom wartbaren Code.</p>
<p>Ich wünsche euch viel Spaß beim Ausprobieren und hinterlasst gerne eure Meinungen in den Kommentaren.</p>
]]></content:encoded>
			</item>
		<item>
		<title>Vibration API &#8211; HTML5 APIs</title>
		<link>http://www.starstormdesign.de/vibration-api-html5/</link>
		<pubDate>Mon, 03 Mar 2014 07:00:18 +0000</pubDate>
		<dc:creator><![CDATA[Alexander Bogomolov]]></dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://www.starstormdesign.de/?p=465</guid>
		<description><![CDATA[Immer mehr Menschen verwenden ihr Smartphone oder Table, um Inhalte im Internet zu Konsumieren. Diese Geräte beinhalten inzwischen unzählige Sensoren, auf die native Apps Zugriff  haben. Doch dank HTML5 kann man die meisten Sensoren auch mit JavaScript ansprechen. Es ist also möglich Web-Apps zu entwickeln, die sich wie native Apps verhalten. Wie wäre es, wenn [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Immer mehr Menschen verwenden ihr Smartphone oder Table, um Inhalte im Internet zu Konsumieren. Diese Geräte beinhalten inzwischen unzählige Sensoren, auf die native Apps Zugriff  haben. Doch dank HTML5 kann man die meisten Sensoren auch mit JavaScript ansprechen. Es ist also möglich Web-Apps zu entwickeln, die sich wie native Apps verhalten.</p>
<p>Wie wäre es, wenn man den Benutzer über etwas per Vibration informiert? Zum Beispiel, wenn eine neue Nachricht (PM) ankommt. Hier kommt das <a href="http://www.w3.org/TR/vibration/">Vibration API</a> zum Einsatz.<span id="more-465"></span></p>
<h2>Browserunterstützung</h2>
<p>Im Moment unterstützen nur die letzten Versionen von Firefox (ab Version 16) und Chrome das Vibration API. Frühere Versionen (Firefox ab Version 11) verwendeten den <code>webkit</code>, bzw. <code>moz</code> Präfix.</p>
<p>Mit dem folgendem Code lässt sich herausfinden, ob der Browser oder das Gerät das Vibration API unterstützt:</p>
<script src="https://gist.github.com/9267089.js?file=vibration-api-support.js"></script>
<h2>Anwendung</h2>
<p>Die Dauer der Vibration kann in Millisekunden an die <code>vibrate()</code> Methode übergeben werden.</p>
<script src="https://gist.github.com/9267089.js?file=vibration-api-single.js"></script>
<p>Alternativ kann auch ein Array mit Werten übergeben werden. Dabei wird die Vibrationsdauer und Pause in Millisekunden abwechselnd angegeben. In dem Folgebeispiel vibriert das Gerät 300ms, macht 200ms Pause und vibriert weitere 800ms.</p>
<script src="https://gist.github.com/9267089.js?file=vibration-api-pattern.js"></script>
<p>Eine Vibration abbrechen kann man, indem man eine Null an die Methode übergibt.</p>
<script src="https://gist.github.com/9267089.js?file=vibration-api-reset.js"></script>
<p>Die Vibrationen blockieren dabei die Ausführung von JavaScript nicht.</p>
<h2>Fazit und Demo</h2>
<p>Mit HTML5 bekommen die Webentwickler immer mehr Möglichkeiten für die Realisierung von Web-Apps. Dabei ist das Vibration API von HTML5 nur ein keiner Bestandteil. (<a title="Battery Status API – HTML5 APIs" href="http://www.starstormdesign.de/html5-battery-status-api/">Battery Status API</a>)</p>
<p>Auch wenn wir solche Möglichkeiten bekommen, sollte man immer stets überlegen, ob das Feature wirklich notwendig ist. Benutzer könnten sich belästigt fühlen, wenn Webseiten anfangen die Geräte vibrieren zu lassen. Außerdem darf der zusätzliche Stromverbrauch nicht außer Acht gelassen werden. Solche Features sollten Web-Apps und Online-Spielen vorbehalten bleiben.</p>
<p>Demo: <a href="http://jsfiddle.net/abogomolov/4RN4e/">http://jsfiddle.net/abogomolov/4RN4e/</a></p>
<p>Ich wünsche euch viel Spaß beim Ausprobieren und hinterlasst gerne eure Meinungen in den Kommentaren.</p>
]]></content:encoded>
			</item>
		<item>
		<title>Symfony2 Finder im Einsatz</title>
		<link>http://www.starstormdesign.de/symfony2-finder-im-einsatz/</link>
		<pubDate>Wed, 26 Feb 2014 07:37:26 +0000</pubDate>
		<dc:creator><![CDATA[Alexander Bogomolov]]></dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Finder]]></category>
		<category><![CDATA[Symfony2]]></category>

		<guid isPermaLink="false">http://www.starstormdesign.de/?p=474</guid>
		<description><![CDATA[Symfony2 bringt einige Komponenten mit, die sich auch eigenständig, ohne das Symfony2 Full-Stack Framework, nutzen lassen. Eins davon ist die Finder-Komponente. Wie der Name es schon vermuten lässt, bittet der Finder ein Fluent Interface, mit dem wir Dateien und Verzeichnisse einfach und schnell suchen können. Installieren lässt sich der Finder über Composer oder man entnimmt [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Symfony2 bringt einige Komponenten mit, die sich auch eigenständig, ohne das Symfony2 Full-Stack Framework, nutzen lassen. Eins davon ist die <a title="The Finder Component" href="http://symfony.com/doc/current/components/finder.html">Finder-Komponente</a>. Wie der Name es schon vermuten lässt, bittet der Finder ein Fluent Interface, mit dem wir Dateien und Verzeichnisse einfach und schnell suchen können. Installieren lässt sich der Finder über Composer oder man entnimmt den Code aus dem GitHub Repository.<br />
<span id="more-474"></span></p>
<h2>Installation</h2>
<p>Die Installation erfolgt an schnellsten mit Composer. Einfach die folgende Zeile zu den Requirements hinzufügen und <code>composer update</code> aufrufen.</p>
<script src="https://gist.github.com/9205022.js?file=composer.json"></script>
<p>Anschließend nur noch die <code>autoload.php</code> im <code>vendors</code> Verzeichnis einbinden und es kann losgehen.</p>
<h2>Verwendung</h2>
<p>Als Nächstes erzeugen wir eine neue Instanz der Finder-Klasse. Der Rest ist durch das Fluent Interface recht selbsterklärend. Man kann auswählen, ob man nach Dateien oder Verzeichnissen suchen möchte und nach welchen Kriterien gefiltert und sortiert werden soll.</p>
<h3>Filter</h3>
<p>Die Finder-Komponente bietet eine Menge an Filterkriterien, wie Ort, Name, Dateiinhalt, Dateigröße und Änderungsdatum. Die Filter können dabei auch mit Ausnahmen definiert werden. So ist es möglich, die Dateien der Versionskontrolle im Vorfeld auszuschließen.</p>
<script src="https://gist.github.com/9205022.js?file=index.php"></script>
<h3>Tiefe</h3>
<p>Die Suche wird standardmäßig immer rekursiv durchgeführt. Dieses Verhalten kann mit dem Tiefenfilter (Depth) verändert werden. Es kann sowohl die Anfangsebene als auch die maximale Tiefe definiert werden.</p>
<script src="https://gist.github.com/9205022.js?file=depth.php"></script>
<h3>Sortierung</h3>
<p>Die Ergebnisse lassen sich dabei auch nach Dateinamen, Änderungsdatum und Dateityp sortieren. Weitere Sortier- oder Filterfunktionen können recht simpel hinzugefügt werden.</p>
<script src="https://gist.github.com/9205022.js?file=sort.php"></script>
<h2>Fazit</h2>
<p>Mit dieser Komponente kann man schnell und einfach Dateien suchen und den Inhalt ausgeben. Für Anwendungen, die viel mit Dateien arbeiten, sollte der Symfony2 Finder ein Muss sein.</p>
]]></content:encoded>
			</item>
	</channel>
</rss>
