<?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>voodoo-media blog</title>
	<atom:link href="http://blog.voodoo-media.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.voodoo-media.de</link>
	<description>Hier gibts die gewisse Portion voodoo</description>
	<lastBuildDate>Wed, 04 Nov 2009 21:28:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Eigene Validatoren für Symfony Forms</title>
		<link>http://blog.voodoo-media.de/2009/11/eigene-validatoren-fur-symfony-forms/</link>
		<comments>http://blog.voodoo-media.de/2009/11/eigene-validatoren-fur-symfony-forms/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 17:23:01 +0000</pubDate>
		<dc:creator>Markus Ewert</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Propel]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Forms]]></category>

		<guid isPermaLink="false">http://blog.voodoo-media.de/?p=68</guid>
		<description><![CDATA[Symfony liefert von Haus aus eine Menge Validatoren mit, um Formulareingaben, die ein Nutzer tätigt, zu überprüfen, neudeutsch: zu validieren. Leider reichen diese sonst sehr mächtigen Validatoren nicht immer aus; so auch in einem aktuellen Projekt.
Für E-Mail-Templates gibt es eine ganze Reihe von vordefinierten Platzhaltern, die jeweils als regulärer Ausdruck vorliegen. So wird für die Anrede in einer E-Mail der Platzhalter {salutation} verwendet, der dann gemäß der ausgewählten Sprache ersetzt wird.

Diese Platzhalter sind zwingend notwendig und müssen deshalb nach dem Abschicken des Formular überprüft werden. Dazu haben wir die Validator-Klasse <i>PlaceholderValidator</i> erstellt.]]></description>
			<content:encoded><![CDATA[<p>Symfony liefert von Haus aus eine Menge Validatoren mit, um Formulareingaben, die ein Nutzer tätigt, zu überprüfen, neudeutsch: zu validieren. Leider reichen diese sonst sehr mächtigen Validatoren nicht immer aus; so auch in einem aktuellen Projekt.<br />
Für E-Mail-Templates gibt es eine ganze Reihe von vordefinierten Platzhaltern, die jeweils als regulärer Ausdruck vorliegen. So wird für die Anrede in einer E-Mail der Platzhalter {salutation} verwendet, der dann gemäß der ausgewählten Sprache ersetzt wird.</p>
<p>Diese Platzhalter sind zwingend notwendig und müssen deshalb nach dem Abschicken des Formular überprüft werden. Dazu haben wir die Validator-Klasse <i>PlaceholderValidator</i> erstellt.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> PlaceholderValidator <span style="color: #000000; font-weight: bold;">extends</span> sfValidatorBase
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> configure<span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$messages</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> doClean<span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

</p>
<p>Der Klassenrumpf ist einfach erklärt: Enthalten sind zwei Funktionen, <i>configure</i> und </i>doClean</i>. In der ersten Funktion haben wir die Möglichkeit, unserem Validator bestimmte Optionen und Nachrichten zu geben. Optionen werden benötigt, um den Validator bzw. dessen Überprüfungsroutine zu spezifizieren, und Nachrichten werden benötigt, um Fehlermeldungen vorzubereiten. Optionen gibt es bei einem Großteil der symfony-eigenen Validatoren. Mit ihnen können wir angeben, wieviele Zeichen ein String mindest haben muss, und ob ein Formularfeld ein Pflichtfeld ist oder nicht. Ein beispielhafter Funktionskörper könnte passend zum Beispiel des E-Mail-Template-Validators also wie folgt aussehen:</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> configure<span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$messages</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'patterns_required'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addMessage</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'patterns_required'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Your template must contain the placeholder &quot;%pattern%&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p>Als nächstes implementieren wir das Herzstück unseres Validators: die <i>doClean</i>-Methode. Der eingegebene Wert im Formularfeld wird von Symfony an die <i>doClean</i> übergeben. Hier erfolgt nun die Validierung dieses Wertes. Um unser E-Mail-Template zu überprüfen, müssen wir mit Hilfe von regulären Ausdrücken prüfen, ob die benötigen Platzhalter im übergeben Wert vorkommen. Dies realisieren wir in einer Schleife und werfen, sofern der reguläre Ausdruck keine Übereinstimmungen findet, einen Fehler. Dieser enthält den Namen der Fehlermeldung, die wir in der <i>configure</i>-Funktion definiert haben, sowie Namen des Platzhalters, der für diesen Fehler verantwortlich ist. Somit erhält der Nutzer eine Fehlermeldung, in dem ihm mitgeteilt wird, welcher Parameter fehlt.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> doClean<span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$patterns</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'patterns'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'patterns_required'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'patterns_required'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$patterns</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$pattern</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$pattern</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
                throw <span style="color: #000000; font-weight: bold;">new</span> sfValidatorError<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'patterns_required'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'pattern'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$pattern</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p>Um diesen Validator nun in Formularen zu verwenden, genügt es, dem Validator-Schema mitzuteilen, dass wir unseren Placeholder-Validator nutzen möchten.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setValidator</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template'</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">new</span> PlaceholderValidator<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'patterns_required'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'patterns'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$patterns</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

</p>
<p>Mit den Validatoren gibt Symfony dem Entwickler ein mächtiges Werkzeug in die Hand, welches einfach zu verwenden ist und in allen Formularen zum Einsatz kommen kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.voodoo-media.de/2009/11/eigene-validatoren-fur-symfony-forms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Runde Ecken und Schatten mit CSS 3.0</title>
		<link>http://blog.voodoo-media.de/2009/09/runde-ecken-und-schatten-mit-css/</link>
		<comments>http://blog.voodoo-media.de/2009/09/runde-ecken-und-schatten-mit-css/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 10:44:34 +0000</pubDate>
		<dc:creator>david.zgoll</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS 3.0]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Gestaltung]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Runde Ecken]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[Schatten]]></category>

		<guid isPermaLink="false">http://blog.voodoo-media.de/?p=25</guid>
		<description><![CDATA[Das leidige Thema der runden Ecken und  Schatten hat so manchen Webdesigner oder auch Programmierer schlaflose Nächte bereitet. Gerade wenn man den Anspruch hat, den Code möglichst schlank zu halten, musste man hier ungewollte Kompromisse eingehen.  Früher musste man mit Bildern und diversen Blockelementen komplexe Verschachtelungen aufbauen, dies gehört nun der Vergangenheit an. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Das leidige Thema der runden Ecken und  Schatten</strong> hat so manchen Webdesigner oder auch Programmierer schlaflose Nächte bereitet. Gerade wenn man den Anspruch hat, den Code möglichst schlank zu halten, musste man hier ungewollte Kompromisse eingehen.  Früher musste man mit Bildern und diversen Blockelementen komplexe Verschachtelungen aufbauen, dies gehört nun der Vergangenheit an. CSS 3.0 kann mit einfach anzuwendenden CSS Befehlen Schatten und runde Ecken realisieren. Auch wenn CSS 3.0 noch nicht der Standard ist, können die meisten fortschrittlichen Browser ( Firefox,  Safari also Webkit und Geckos, etc.) dies bereits jetzt umsetzen. Leider ist der Internet Explorer 8.0 wie gewohnt seinen Konkurrenten hinterher und  kann diese CSS-Deklarationen nicht unterstützen. Er ignoriert sie einfach. Wenn man dies in sein Design einbezieht kann man für die meisten anderen Browser runde Ecken und Schatten aber bereits jetzt einsetzen.</p>
<p><strong>Und so sehen die CSS-Deklarationen aus:</strong><br />
.meine_box {</p>
<p><em>/* Für die Webkitbrowser */</em><br />
-webkit-border-radius: 5px;</p>
<p><em>/* Für die Geckobrowser */</em><br />
-moz-border-radius: 5px;;</p>
<p><em>/* Für die KHTML-Browser */</em><br />
-khtml-border-radius: 5px;</p>
<p><em>/* Die zukünftige CSS 3.0 Deklaration */</em><br />
border-radius: 5px;</p>
<p><em>/* Und hier sind die Deklarationen für die Schatten.<br />
Der erste PX-Wert steht für die Y-Achse, der zweite Wert für die X-Achse und der dritte Wert für die Weichzeichnung des Schattens. Und der letzte Wert ist die Schattenfarbe. */<br />
</em><br />
-webkit-box-shadow: 5px 5px 10px #MeinFarbwert;<br />
-moz-box-shadow: 5px 5px 10px #MeinFarbwert;<br />
box-shadow: 5px 5px 10px #MeinFarbwert;<br />
}</p>
<p>Natürlich ist es auch möglich nur einzelne Ecken anzusprechen, da man ja nicht unbedingt immer überall runde Ecken haben möchte.</p>
<p><strong>Der reguläre Ausdruck, wie er unter CSS 3.0 verwendet wird baut sich wie folgt auf:</strong><br />
border-top-left-radius für die linke obere Ecke<br />
border-top-right-radius für die rechte obere Ecke<br />
border-bottom-left-radius für die linke untere Ecke<br />
border-bottom-right-radius für die rechte untere Ecke</p>
<p>Webkit und KHTML spezifisch setzt man die jeweiligen Bezeichnungen -webkit- oder -khtml- vorweg.<strong> </strong></p>
<p><strong> </strong></p>
<p><strong>Hier unterscheiden sich die Geckobrowser.<br />
Die -moz- Browser verlangen die Schreibweise wie folgt:</strong><br />
-moz-border-radius-topleft</p>
<p>Und dies kann wie folgt aussehen <a title="Link zu voodoo-media" href="http://www.voodoo-media.de" target="_self">voodoo-media.de</a>.<br />
Dort haben wir mit runden Ecken und dezenten Schatten gearbeitet.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.voodoo-media.de/2009/09/runde-ecken-und-schatten-mit-css/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>URLs mit .html-Suffix</title>
		<link>http://blog.voodoo-media.de/2009/09/symfony-urls-mit-html-suffix/</link>
		<comments>http://blog.voodoo-media.de/2009/09/symfony-urls-mit-html-suffix/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 17:06:13 +0000</pubDate>
		<dc:creator>Markus Ewert</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://blog.voodoo-media.de/?p=12</guid>
		<description><![CDATA[Standardmäßig bereitet Symfony die URLs in dem Format /module/action/parameter auf. Dies kann zum Beispiel in einem Blog die URL /article/read/1 sein. Um nun einer Suchmaschine eine statische HTML-Seite zu suggerieren, genügt es, in der Datei settings.yml im Konfigurationsordner einer Applikation folgende Zeilen hinzuzufügen:

1
2
3
prod:
.settings:
suffix:         .html

Symfony erweitert dann selbstständig [...]]]></description>
			<content:encoded><![CDATA[<p>Standardmäßig bereitet Symfony die URLs in dem Format /module/action/parameter auf. Dies kann zum Beispiel in einem Blog die URL /article/read/1 sein. Um nun einer Suchmaschine eine statische HTML-Seite zu suggerieren, genügt es, in der Datei settings.yml im Konfigurationsordner einer Applikation folgende Zeilen hinzuzufügen:</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="yml" style="font-family:monospace;">prod:
.settings:
suffix:         .html</pre></td></tr></table></div>

<p>Symfony erweitert dann selbstständig die URLs, sodass sie aussehen, als läge dort eine statische HTML-Datei. Die Endung wird nur für die produktive Umgebung aktiviert. Damit alle Umgebungen mit Suffixen arbeiten, genügt es, das &#8216;prod&#8217; durch &#8216;all&#8217; zu ersetzen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.voodoo-media.de/2009/09/symfony-urls-mit-html-suffix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony, Propel, PHP und die weite Welt</title>
		<link>http://blog.voodoo-media.de/2009/08/symfony_propel_php/</link>
		<comments>http://blog.voodoo-media.de/2009/08/symfony_propel_php/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 15:35:30 +0000</pubDate>
		<dc:creator>Jens Vielhaben</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://blog.voodoo-media.de/?p=1</guid>
		<description><![CDATA[Dies ist der voodoo-media-Firmen-Blog! Yehaww!
In Zukunft werden hier von Mitarbeitern der Firma voodoo-media relevante Inhalte zum Thema Programmierung mit den verschiedensten Werkzeugen und Sprachen gepostet.
Derzeit befindet sich ein großes Projekt bei dem wir auf das Symfony-Framework zurückgreifen in Arbeit. Daher wird sich ein großer Teil dieses Blogs sich zunächst mit Symfony und Propel auseinander setzen. [...]]]></description>
			<content:encoded><![CDATA[<h2><span style="color: #000000;"><strong><em>Dies ist der voodoo-media-Firmen-Blog! Yehaww!</em></strong></span></h2>
<p>In Zukunft werden hier von Mitarbeitern der Firma voodoo-media relevante Inhalte zum Thema <strong>Programmierung</strong> mit den verschiedensten Werkzeugen und Sprachen gepostet.</p>
<p>Derzeit befindet sich ein großes Projekt bei dem wir auf das <a href="http://www.symfony-project.org/">Symfony-Framework</a> zurückgreifen in Arbeit. Daher wird sich ein großer Teil dieses Blogs sich zunächst mit <strong>Symfony</strong> und <strong>Propel</strong> auseinander setzen. Aber auch andere <strong>PHP</strong>-Themen werden nicht zu Kurz kommen. Das Thema <strong>Flex</strong> und <strong>Flash</strong> wird genauso Erwähnung finden, wie <strong>CSS</strong>, <strong>JavaScript</strong> und andere eher das Erscheinungsbild einer Site betreffende Themen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.voodoo-media.de/2009/08/symfony_propel_php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

