<?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>webdemar.com &#187; Tutorial</title>
	<atom:link href="http://webdemar.com/tag/tutorial/feed/" rel="self" type="application/rss+xml" />
	<link>http://webdemar.com</link>
	<description>WordPress Theme Blog</description>
	<lastBuildDate>Tue, 17 Aug 2010 07:00:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>WordPress jQuery Lightbox prettyPhoto ohne Plugin</title>
		<link>http://webdemar.com/wordpress/wordpress-jquery-lightbox-prettyphoto-ohne-plugin/</link>
		<comments>http://webdemar.com/wordpress/wordpress-jquery-lightbox-prettyphoto-ohne-plugin/#comments</comments>
		<pubDate>Tue, 18 May 2010 07:30:56 +0000</pubDate>
		<dc:creator>Simon [webdemar]</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery Plugin]]></category>
		<category><![CDATA[Lightbox]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://webdemar.com/?p=1799</guid>
		<description><![CDATA[<p><img width="280" height="210" src="http://webdemar.com/wp-content/uploads/2010/05/wordpress-jquery-lightbox.jpg" class="attachment-dv-full wp-post-image" alt="wordpress-jquery-lightbox" title="wordpress-jquery-lightbox" /></p>Eine beliebte und weitverbreitete Methode Bilder, Videos oder andere Inhalte einer Website darzustellen ist die sogenannte Lightbox. Diese &#246;ffnet den gew&#252;nschten Inhalt in einem extra Fenster und verdunkelt derweil den Hintergrund. Im Folgenden m&#246;chte ich zeigen, wie man ohne Plugin die jQuery Lightbox prettyPhoto in ein WordPress-Theme einbaut. jQuery Lightbox prettyPhoto In vielen meiner Themes [...]]]></description>
			<content:encoded><![CDATA[<p><img width="280" height="210" src="http://webdemar.com/wp-content/uploads/2010/05/wordpress-jquery-lightbox.jpg" class="attachment-dv-full wp-post-image" alt="wordpress-jquery-lightbox" title="wordpress-jquery-lightbox" /></p><p>Eine beliebte und weitverbreitete Methode Bilder, Videos oder andere Inhalte einer Website darzustellen ist die sogenannte Lightbox. Diese &#246;ffnet den gew&#252;nschten Inhalt in einem extra Fenster und verdunkelt derweil den Hintergrund. Im Folgenden m&#246;chte ich zeigen, wie man ohne Plugin die jQuery Lightbox prettyPhoto in ein WordPress-Theme einbaut.<span id="more-1799"></span></p>
<h3 class="clear">jQuery Lightbox prettyPhoto</h3>
<p>In vielen meiner Themes ist die jQuery Lightbox <a href="http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/">prettyPhoto </a> bereits eingebaut. Pers&#246;nlich finde ich prettyPhoto eines der schickesten jQuery-Lightbox-Plugins (nicht WordPress-Plugin!) und m&#246;chte daher zeigen, wie man es auf korrekte Weise und ohne WordPress-Plugin in ein Theme integriert.</p>
<p class="laboratory"><a href="http://webdemar.com/wp-content/uploads/2010/05/wordpress-lightbox.jpg" rel="prettyPhoto">Dr&#252;ck mich f&#252;r eine Demo</a></p>
<p>Folgender Content kann von prettyPhoto in der Lightox dargestellt werden:</p>
<ul style="margin-bottom:40px">
<li>Einzelbild</li>
<li>Bildergelerie (mit Navigation)</li>
<li>Flash</li>
<li>YouTube-Videos</li>
<li>Vimeo-Videos</li>
<li>QuickTime-Videos</li>
<li>iFrames (externe Websites)</li>
<li>Inline Content (HTML-Elemente)</li>
<li>Galerie aus gemischten Inhalten</li>
</ul>
<h3>Herunterladen von prettyPhoto</h3>
<p>Zun&#228;chst laden wir uns das Original-Skript von der Website des Plugin-Autors <a href="http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/">Stephane Caron</a>.</p>
<p class="download"><a href="http://www.no-margin-for-errors.com/demos/prettyPhoto-jquery-lightbox-clone/prettyPhoto_uncompressed_2.5.6.zip">komprimierte Version</a> | <a href="http://www.no-margin-for-errors.com/demos/prettyPhoto-jquery-lightbox-clone/prettyPhoto_compressed_2.5.6.zip">unkomprimierte Version</a></p>
<p class="space">Den heruntergeladenen ZIP-Ordner entpacken wir und laden die darin enthaltenen Ordner <code>/css</code>, <code>/images</code> und <code>/js</code> in einen Ordner unseres WordPress-Themes z. B. <code>/wp-content/themes/**dein-theme**/pretty/</code>.</p>
<h3>Einbinden von jQuery</h3>
<p>Um die prettyPhoto-Lightbox nutzen zu k&#246;nnen, m&#252;ssen wir zun&#228;chst die Javascript-Bibliothek jQuery aktivieren bzw. in userem Theme-Header laden.</p>
<p>Jede WordPress-Installation bringt jQuery, da es sehr h&#228;ufig verwendet wird, von Haus mit. Folgender Aufruf in der <code>functions.php</code> des Themes l&#228;d die n&#246;tige Datei:</p>
<pre><code>&lt;?php
add_action('wp_enqueue_scripts', 'wdm_scripts');
function wdm_scripts() {
    wp_enqueue_script('jquery');
}
?&gt;</code></pre>
<p class="space">Eine &#220;bersicht aller in WordPress bereits enthaltenen Skripte findet Ihr im <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script#Default_scripts_included_with_WordPress">WordPress-Codex</a>.</p>
<h3>Einbinden von prettyPhoto</h3>
<p>Auch um die Skripte von prettyPhoto in den Head-Bereich unseres WordPress-Themes in der <code>functions.php</code> zu laden, behelfen wir uns wie bei dem allgemeinen jQuery-Skript der Funktionen <code>wp_enqueue_script()</code> und <code>wp_enqueue_style()</code>.</p>
<p>Es m&#252;ssen zwei Dateien eingebunden werden. Eine davon ist die Javascript-Datei <code>/wp-content/themes/**dein-theme**/pretty/js/jquery.prettyPhoto.js</code> und die andere ist das Stylesheet <code>/wp-content/themes/**dein-theme**/pretty/css/prettyPhoto.css</code> (s. a.  Ordnerstruktur beim Upload).</p>
<pre><code>&lt;?php
add_action('wp_enqueue_scripts', 'wdm_scripts');
function wdm_scripts() {
    wp_enqueue_script('jquery');
    wp_enqueue_script('pretty', get_bloginfo('template_url').'/pretty/js/jquery.prettyPhoto.js', array('jquery'), '2.5.6', false);
    wp_enqueue_style('pretty', get_bloginfo('template_url').'/pretty/css/prettyPhoto.css', false, '2.5.6', 'all' );
}
?&gt;</code></pre>
<p class="space">Im WordPress-Codex gibt es weitere Informationen zu <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script">wp_enqueue_script()</a> und <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_style">wp_enqueue_style()</a>.</p>
<h3>Konfiguration von prettyPhoto</h3>
<p>Alle n&#246;tigen Skripte sind bereits eingebunden. Nun muss die jQuery-Lightbox noch gesagt bekommen, wie, wann und wo sie funktionieren soll. Auf der Seite der <a href="http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/documentation/">Dokumentation</a> von prettyPhoto finden wir, dass folgendes Skript in den Head-Bereich eingebunden werden muss:</p>
<pre><code>&lt;script type="text/javascript"&gt;
    $(document).ready(function(){
        $("a[rel^='prettyPhoto']").prettyPhoto();
    });
&lt;/script&gt;</code></pre>
<p class="alert"><strong>Achtung!</strong> Beim Einbinden in WordPress ist zu beachten, dass jQuery im sogenannten <em>no conflict mode</em> geladen wird. Das ist bei der Konfiguration von prettyPhoto wichtig.</p>
<h4>prettyPhoto im <em>no conflict mode</em></h4>
<p>Der Javscript-Aufruf muss daher um sogenannte <em>no conflict wrapper</em> erweitert werden, damit die Lightbox funktioniert:</p>
<pre><code>&lt;script type="text/javascript"&gt;
(function($) {
    $(document).ready(function(){
        $("a[rel^='prettyPhoto']").prettyPhoto();
    });
})(jQuery);
&lt;/script&gt;</code></pre>
<p>Weitere Informationen zu der Methode der <em>no conflict wrapper</em> gibt es im <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script#jQuery_noConflict_wrappers">WordPress-Codex</a>.</p>
<h4>Einbinden in der <em>functions.php</em></h4>
<p>Um das Theme nicht direkt in die <code>header.php</code> des WordPress-Themes einzuf&#252;gen, behelfen wir uns der WordPress-Action <code>wp_head</code>, mit der man in der <code>functions.php</code> den Theme-Header erweitern kann:</p>
<pre><code>&lt;?php
add_action('wp_head','wdm_theme_head');
function wdm_theme_head() { ?&gt;
&lt;script type="text/javascript"&gt;
(function($) {
    $(document).ready(function(){
        $("a[rel^='prettyPhoto']").prettyPhoto();
    });
})(jQuery);
&lt;/script&gt;
&lt;?php } ?&gt;</code></pre>
<p class="space">Weitere Informationen zu Optionen und der Anpassung von prettyPhoto findet Ihr in der <a href="http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/documentation/">Dokumentation</a>.</p>
<h3>Aufruf von prettyPhoto</h3>
<p>Mit der obigen Konfiguration der jQuery-Lightbox l&#228;sst sich diese mit jedem <code>a</code>-Tag mit <code>rel="prettyPhoto"</code> &#246;ffnen. Der zu verwendene Code im Post-Content oder in einem Theme-Template k&#246;nnte also wie folgt aussehen:</p>
<pre><code>&lt;a href="http://domain.de/dein/bild.jpg" rel="prettyPhoto"&gt;Lightbox aufrufen&lt;/a&gt;</code></pre>
<p class="laboratory"><a href="http://webdemar.com/wp-content/uploads/2010/05/wordpress-lightbox.jpg" rel="prettyPhoto">Dr&#252;ck mich f&#252;r eine Demo</a></p>
<p class="space">Weitere M&#246;glichkeiten Inhalte in die prettyPhoto-Lightbox zu laden, findet Ihr in den <a href="http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/">Demos</a> des Skriptes.</p>
<h3>Fazit</h3>
<p>Letztlich muss jeder selbst wissen, ob es einfacher ist ein Plugin zu installieren oder das Skript <em>zu Fu&#223;</em> einzubinden. Ich verzichte gerne auf Plugins, wenn diese m&#246;glich ist und ich das Wissen habe, den Code selbst einzubauen.</p>
<p class="space">Den ThemeShift-Kunden gef&#228;llt dieses eingebaute Feature auf jeden Fall. In Kombination mit WordPress-Funktionen lassen sich mit dieser jQuery-Lightbox umfangreiche und vor allem ansprechende Galerien bauen.</a></p>
<h3>Relevante Links</h3>
<ul>
<li><a href="http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/">jQuery Lightbox prettyPhoto</a> | <a href="http://www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/documentation/">Dokumentation</a></li>
<li>WordPress Codex: <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script#Default_scripts_included_with_WordPress">wp_enqueue_script()</a></li>
<li>WordPress Codex: <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_style">wp_enqueue_style()</a></li>
<li>WordPress Codex: <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script#jQuery_noConflict_wrappers">no conflict wrapper</a>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://webdemar.com/wordpress/wordpress-jquery-lightbox-prettyphoto-ohne-plugin/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Tutorial: WordPress-Themes lokalisieren</title>
		<link>http://webdemar.com/wordpress/tutorial-wordpress-themes-lokalisieren/</link>
		<comments>http://webdemar.com/wordpress/tutorial-wordpress-themes-lokalisieren/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 11:47:33 +0000</pubDate>
		<dc:creator>Simon [webdemar]</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WordPress Funktionen]]></category>
		<category><![CDATA[Lokalisierung]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Übersetzung]]></category>
		<category><![CDATA[WordPress Themes]]></category>

		<guid isPermaLink="false">http://webdemar.com/?p=666</guid>
		<description><![CDATA[<p><img width="280" height="210" src="http://webdemar.com/wp-content/uploads/2009/11/wordpress.jpg" class="attachment-dv-full wp-post-image" alt="wordpress" title="wordpress" /></p>Die Lokalisierung / &#220;bersetzung von WordPress-Themes ist eine von mir bisher str&#228;flich wenig beachtete Funktion von WordPress. Dabei kann man mit einem relativ geringen Mehraufwand einen geh&#246;rigen Mehrwert in Sachen Interantionalisierung von Themes schaffen. Warum lokalisieren? Die Vorteile, den kleinen Mehraufwand bei der Erstellung eines WordPress-Themes in Kauf zu nehmen und dieses zu lokalisieren, liegen [...]]]></description>
			<content:encoded><![CDATA[<p><img width="280" height="210" src="http://webdemar.com/wp-content/uploads/2009/11/wordpress.jpg" class="attachment-dv-full wp-post-image" alt="wordpress" title="wordpress" /></p><p>Die Lokalisierung / &#220;bersetzung von WordPress-Themes ist eine von mir bisher str&#228;flich wenig beachtete Funktion von WordPress. Dabei kann man mit einem relativ geringen Mehraufwand einen geh&#246;rigen Mehrwert in Sachen Interantionalisierung von Themes schaffen.<span id="more-666"></span></p>
<h3 class="clear">Warum lokalisieren?</h3>
<p>Die Vorteile, den kleinen Mehraufwand bei der Erstellung eines WordPress-Themes in Kauf zu nehmen und dieses zu lokalisieren, liegen auf der Hand. Mit gesonderten Sprachdateien l&#228;sst sich das Theme unabh&#228;ngig vom Quellcode, den man daf&#252;r dann nicht mehr anr&#252;hren muss, in beliebig viele Sprachen &#252;bersetzen.</p>
<p>Die WordPress-Installation selbst ist in Sachen Intarnationalisierung und &#220;bersetzung schon weit gediehen und es gibt bereits <a href="http://codex.wordpress.org/WordPress_in_Your_Language">unz&#228;hlige &#220;bersetzungen</a> f&#252;r den WordPress-Admin. Dann sollten wir beim Theme nicht aufh&#246;ren.</p>
<h3>WordPress verwendet GetText:</h3>
<p>Um WordPress-Themes zu lokalisieren verwendet WordPress eine &#220;bersetzungsanwendung namens GetText. Mit dieser Anwendung ist es relativ einfach, WordPress zusagen, was wo und womit &#252;bersetzt werden soll. Mehr dazu im Detail.</p>
<h3>HTML-Strings &#252;bersetzbar machen:</h3>
<p>Nehmen wir an, wir wollen in userem Theme einen Titel der Sidebar &#252;bersetzen. Dort steht im Quellcode folgendes:</p>
<pre><code>&lt;h4&gt;Recent Articles&lt;/h4&gt;</code></pre>
<p>Um diesen HTML-String nun per GetText &#252;bersetzbar zu machen, m&#252;ssen wir ihn in einen GetText-Call packen, den viele Theme-Designer von Euch sicherlich schon gesehen haben und der wie folgt aussieht:</p>
<pre><code>&lt;h4&gt;&lt;?php _e('Recent Articles', my_theme_name); ?&gt;&lt;/h4&gt;</code></pre>
<p>Bemerkung:<br />
Hiermit rufen wir die GetText-Funktion _e() auf und sagen ihr, was womit &#252;bersetzt werden soll und dass die &#220;bersetzung an dieser Stelle ausgegeben werden soll (PHP: echo). Der erste Parameter in der Klammer sagt, was &#252;bersetzt werden soll und der zweite (my_theme_name) sagt WordPress, wo die &#220;bersetzung zu finden ist (dazu sp&#228;ter mehr),</p>
<h3>GetText in WordPress-Funktionen:</h3>
<p>Sicherlich sind Euch auch schon WordPress-Funktionen bekannt, in denen verschiedene Strings verarbeitet werden. Ein Beispiel ist der Aufruf der Anzahl der Kommentare:</p>
<pre><code>&lt;?php comments_number(__('No comments',my_theme_name), __('One comment',my_theme_name), __( '% comments',my_theme_name) );?&gt;</code></pre>
<p>Bemerkung:<br />
In der Funktion comments_number() k&#246;nnen wir drei Strings f&#252;r drei m&#246;gliche F&#228;lle &#252;bergeben (kein, 1 und x Kommentare). Wie ihr vielleicht seht, rufen wir jedoch jetzt die GetText-Funktion __() auf. Auch diese sagt WordPress was womit &#252;bersetzt werden soll, doch nun wird die &#220;bersetzung an dieser Stelle nicht ausgegeben (PHP: kein echo), sondern kann als String von PHP weiterverarbeitet werden.</p>
<h3>Text-Domains:</h3>
<p>Der Name ist ein wenig irref&#252;hrend. Es geht um den zweiten Parameter in den GetText-Calls (my_theme_name). Dieser ist optional und hilft WordPress die richtige &#220;bersetzung zu finden. Es kann n&#228;mlich vorkommen, dass z. B. in einem Plugin, das wir verwenden, der gleiche String &#252;bersetzt werden soll. Mit unserer eindeutigen Text-Domain k&#246;nnen wir klar bestimmen, welche &#220;bersetzung gew&#228;hlt werden soll. Die Text-Domain kann der Theme-Name sein, mit dem man auch den Theme-Ordner benannt hat (z. B. &#8216;decoder&#8217; oder &#8216;my_theme_name&#8217;).</p>
<h3>Vorbereiten und Erstellen der Sprachdatei:</h3>
<p>Angenommen wir haben jetzt &#252;berall in unseren Theme diese zu &#252;bersetzenden Strings verteilt. Als n&#228;chstes wollen wir diese in einer Liste ausgeben, um sie weiterverarbeiten zu k&#246;nnen.</p>
<div id="attachment_676" class="wp-caption aligncenter" style="width: 560px"><img src="http://webdemar.com/wp-content/uploads/2009/02/php-to-po.jpg" alt="PHP to .po extractor" title="PHP to .po extractor" width="550" height="200" class="size-full wp-image-676" /><p class="wp-caption-text">PHP to .po extractor</p></div>
<p>Diese Liste, mit der wir auch die &#220;bersetzung machen ist eine .po-Datei (Portable Object). Um nun aus den php-Dateien unseres Themes die Liste in der .po-Datei zu erstellen, gibt es <em><a href="http://www.icanlocalize.com/tools/php_scanner">PHP to .po extractor</a></em>, mit denen wir einzelne Dateien aber auch Zip-Archive verarbeiten k&#246;nnen. Dieser sucht alle Strings, die in _e() und __() Funktionen gepackt sind und gibt uns die .po-Datei zur&#252;ck.</p>
<h3>&#220;bersetzen aller Strings in der .po-Datei:</h3>
<p>Um .po-Dateien verarbeiten zu k&#246;nnen, solltet Ihr Euch das Programm <a href="http://www.poedit.net/">Poedit</a> herunterladen. Mit diesem Programm lassen sich die &#220;bersetzungen einfach und &#252;bersichtlich anfertigen. Beim Abspeichern unserer .po-Datei wird automatisch eine .mo-Datei erstellt, die letztlich die Sprachdatei ist, die WordPress ben&#246;tigt. Die .po-Datei ist sozusagen nur die Bearabeitungsdatei.</p>
<div id="attachment_677" class="wp-caption aligncenter" style="width: 560px"><img src="http://webdemar.com/wp-content/uploads/2009/02/poedit.jpg" alt="Sprachdateien bearbeiten mit Poedit" title="Sprachdateien bearbeiten mit Poedit" width="550" height="200" class="size-full wp-image-677" /><p class="wp-caption-text">Sprachdateien bearbeiten mit Poedit</p></div>
<p>Wichtig beim Erstellen der Sprachdateien sind noch die <a href="http://www.gnu.org/software/autoconf/manual/gettext/Locale-Names.html">Sprach- und L&#228;ndercodes</a>, mit denen wir die Sprachfiles benennen. Eine Sprachdatei f&#252;r Deutsch aus Deutschland m&#252;sste also de_DE.po / de_DE.mo hei&#223;en. F&#252;r Schweizer Deutsch dementsprechend de_CH.po / de_CH.mo.</p>
<h3>Laden der Text-Domain:</h3>
<p>Wenn wir die .po/.mo-Dateien in unserem Theme-Ordner platziert haben, sagen wir WordPress, dass in unserem Theme eine &#220;bersetzung geladen werden soll. </p>
<pre><code>&lt;?php load_theme_textdomain(my_theme_name); ?&gt;</code></pre>
<p>Bemerkung:<br />
Diesen Aufruf platzieren wir am besten in der header.php, da diese bei jedem Seitenaufruf angesprochen wird.</p>
<p>Wenn WordPress nun das Sprachfile f&#252;r die Sprache findet, die in der wp-config.php angegeben ist, wird das Theme mit allen &#220;bersetzungen richtig angezeigt.</p>
<pre><code>define ('WPLANG', 'de_DE');</code></pre>
<p><em>// edit:</em></p>
<h3>Alternative per Plugin:</h3>
<p>Wenn einem das Installieren von Poedit und das externe Scannen der PHP-Dateien zum umst&#228;ndlich ist, kann man das Ganze auch WordPress-intern l&#246;sen. Das WordPress-Plugin <a href="http://www.code-styling.de/deutsch/entwicklungen/wordpress-plugin-codestyling-localization">Codestyling Localization</a> scheint mir daf&#252;r eine starke Alternative zu sein. Ich habe es selbst noch nicht getestet, werde das aber auf jeden Fall nachholen.</p>
<p>Danke an <a href="#comment-1728">sokai</a> f&#252;r den Tipp!</p>
<p><em>// end edit;</em></p>
<h3>Fazit:</h3>
<p>Die Lokalisierung von WordPress-Themes sollte f&#252;r Theme-Autoren zum Standard geh&#246;ren. Wenn man diese Routine einmal durchlaufen ist, h&#228;lt sich der Mehraufwand tats&#228;chlich in Grenzen und das Theme wird dem internationalen Charakter von WordPress gerecht.</p>
<h3>Relevante Links:</h3>
<ul>
<li><a href="http://codex.wordpress.org/Translating_WordPress">WordPress Codex Translating WordPress</a></li>
<li><a href="http://codex.wordpress.org/WordPress_in_Your_Language">WordPress Codex WordPress in You Language</a></li>
<li><a href="http://www.poedit.net/">Poedit</a> zum Verarbeiten von .po-Dateien</li>
<li><a href="http://www.icanlocalize.com/tools/php_scanner">PHP Text-Scanner</a> zum Erstellen der .po-Dateien</li>
<li><a href="http://blog-en.icanlocalize.com/installing-wordpress-for-multiple-language-blogs/how-to-localize-wordpress-themes-and-plugins-with-gettext/">How to localize WordPress themes and plugins with GetText</a></li>
<li><a href="http://www.zyblog.de/2006/01/06/wordpress-themes-lokalisieren/">WordPress Themes lokalisieren /// ZyBlog</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://webdemar.com/wordpress/tutorial-wordpress-themes-lokalisieren/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Tutorial: Automatische Thumbnails mit TimThumb</title>
		<link>http://webdemar.com/wordpress/tutorial-automatische-thumbnails-mit-timthumb/</link>
		<comments>http://webdemar.com/wordpress/tutorial-automatische-thumbnails-mit-timthumb/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 09:59:01 +0000</pubDate>
		<dc:creator>Simon [webdemar]</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Image Resizing]]></category>
		<category><![CDATA[Thumbnails]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://webdemar.com/?p=583</guid>
		<description><![CDATA[<p><img width="280" height="210" src="http://webdemar.com/wp-content/uploads/2009/01/timthumb.jpg" class="attachment-dv-full wp-post-image" alt="timthumb" title="timthumb" /></p>Im Webdesign allgemein und in WordPress-Themes ist es sehr praktisch, automatische Thumbnails eines Fotos zu erstellen und es in der Gr&#246;&#223;e an das Layout anzupassen. So kann man z. B. auf der Startseite einen Thumb anzeigen und im Post selbst eine Gro&#223;ansicht &#8211; und alles mit einer Bilddatei. Das Ganze h&#246;rt sich kompliziert an, ist [...]]]></description>
			<content:encoded><![CDATA[<p><img width="280" height="210" src="http://webdemar.com/wp-content/uploads/2009/01/timthumb.jpg" class="attachment-dv-full wp-post-image" alt="timthumb" title="timthumb" /></p><p>Im Webdesign allgemein und in WordPress-Themes ist es sehr praktisch, automatische Thumbnails eines Fotos zu erstellen und es in der Gr&#246;&#223;e an das Layout anzupassen. So kann man z. B. auf der Startseite einen Thumb anzeigen und im Post selbst eine Gro&#223;ansicht &#8211; und alles mit einer Bilddatei.<span id="more-583"></span></p>
<p>Das Ganze h&#246;rt sich kompliziert an, ist aber dank n&#252;tzlicher Open-Source-Skripte heller K&#246;pfe relativ einfach in eine Website zu integrieren.</p>
<p>Besagtes Skript, das ich h&#228;ufig zum Image-Resizing nehme, hei&#223;t <a href="http://code.google.com/p/timthumb/">TimThumb</a> und wurde urspr&#252;nglich f&#252;r das WordPress-Theme <a href="http://prothemedesign.com/themes/mimbo/">Mimbo Pro</a> geschrieben und letztes Jahr als Open-Source-Projekt f&#252;r jedermann zug&#228;nglich gemacht.</p>
<p>Dem Skript TimThumb muss man lediglich sagen, welche Datei bearbeitet und wie diese ausgegeben werden soll. Folgende Parameter stehen daf&#252;r zur Verf&#252;gung.</p>
<h3>Parameter:</h3>
<ul>
<li><strong>w</strong>: width &#8211; Breite des Bildes</li>
<li><strong>h</strong>: height &#8211; H&#246;he des Bildes</li>
<li><strong>zc</strong>: zoom crop (0 oder 1) &#8211; Beschneidung des Bildes (wenn n&#246;tig)</li>
<li><strong>q</strong>: quality (default ist 75 und max ist 100) &#8211; Ausgabequalit&#228;t</li>
</ul>
<h3>Anwendung</h3>
<pre><code>&lt;img src='/skripte/timthumb.php?src=/img/bild.jpg&amp;h=180&amp;w=180&amp;zc=1&amp;q=95' alt='' /&gt;</code></pre>
<p><em>Bemerkung:</em><br />
Im obigen Beispiel nehmen wir an, dass wir z. B. in einer index.html ein Bild eingef&#252;gt werden soll. Der Bilderordner ist /img/ und das Skript TimThumb liegt im Ordner /skripte/. Wir sprechen das Skript an und &#252;bergeben die n&#246;tigen Parameter.</p>
<h3>Installation</h3>
<ul>
<li>Herunterladen des Skriptes &#8211; <a href="http://timthumb.googlecode.com/svn/trunk/timthumb.php">TimThumb</a></li>
<li>Erzeugen des Ordners /cache/ &#8211; muss im selben Ordner liegen wie timthumb.php und volle Schreibrechte (777) besitzen</li>
<li>Auch der Ordner, der TimThumb enth&#228;lt, sollte volle Schreibrechte (777) besitzen</li>
<li>Optional: Um die Performance zu verbessern, kann die <a href="http://timthumb.googlecode.com/svn/trunk/.htaccess">.htaccess</a> noch erweitert werden</li>
</ul>
<h3>Automatische Thumbnails in einem WordPress-Theme</h3>
<p>Unser Ziel ist es nun, einen Post mit einer Bilddatei zu erstellen und zum Einen einen Thumbnail und zum Anderen eine Gro&#223;ansicht dieses Bildes zu erzeugen.</p>
<p>Voraussetzungen sind:</p>
<ul>
<li>Das Bild liegt im Ordner /img/ im Hauptverzeichnis der WordPress-Installation</li>
<li>timthumb.php liegt im Order (Chmod 777) /skripte/ des WordPress-Theme-Ordners</li>
<li>Der Ordner /skripte/ enth&#228;lt den Unterordner (Chmod 777) /cache/</li>
</ul>
<p>Damit wir das Bild mit dem Skript erfassen k&#246;nnen, legen wir uns einen Post mit einem <a href="http://codex.wordpress.org/Using_Custom_Fields">Spezialfeld</a> namens &#8216;post-img&#8217; an. Als Wert bekommt dieses Spezialfeld die URL des zu verarbeitenden Bildes (z. B. &#8216;http://webdemar.com/img/bild.jpg&#8217;).</p>
<p>Den Spezialfeld des Posts k&#246;nnen wir innerhalb des <a href="http://codex.wordpress.org/The_Loop">Loops</a> in unserem WordPress-Theme ausgeben &#8211; z. B. in der home.php (genauer m&#246;chte ich darauf an dieser Stelle nicht eingehen, da dies zu weit f&#252;hren w&#252;rde).</p>
<pre><code>&lt;?php echo get_post_meta($post-&gt;ID, 'post-img', true) ?&gt;</code></pre>
<p><em>Bemerkung:</em><br />
Mit diesem Aufruf w&#252;rde die URL des Bildes ausgegeben. Das machen wir uns zunutze und konstruieren damit die erforderliche Ausgabe (s. Anwendung) zum Ansprechen von TimThumb.</p>
<pre><code>&lt;img src='&lt;?php bloginfo('template_url'); ?&gt;/skripte/timthumb.php?src=&lt;?php echo get_post_meta($post-&gt;ID, 'post-img', true); ?&gt;&amp;w=120&amp;h=80&amp;zc=1&amp;q=95' width='120' height='80' alt='&lt;?php the_title(); ?&gt;' /&gt;</code></pre>
<p><em>Bemerkung:</em><br />
Hiermit geben wir das Bild, das wir im Spezialfeld des Posts angegeben haben, als Thumbnail 120x80px, wenn n&#246;tig zugeschnitten und in einer Qualit&#228;t von 95 (von 100) aus.</p>
<p>Breite und H&#246;he lassen sich nun <em>beliebig</em> anpassen, so dass z. B. in der single.php des Themes dasselbe Bild mit einer Gr&#246;&#223;e von 240x160px ausgegeben werden kann. Wichtig ist dabei, dass width und height des img-Tags ebenfalls angepasst werden.</p>
<p>Man kann das Ganze nun noch einen Schritt verbessern, indem man vor dem Aufruf des Bildes mit der URL aus dem Spezialfeld zun&#228;chst abfragt, ob dieses auch vorhanden ist. Wenn das Spezialfeld in einem Post leer bleibt, w&#252;rde sonst ein img-Tag ohne src erzeugt.</p>
<pre><code>&lt;?php if(get_post_meta($post-&gt;ID, 'post-img', true)) { ?&gt;
    &lt;img src='&lt;?php bloginfo('template_url'); ?&gt;/skripte/timthumb.php?src=&lt;?php echo get_post_meta($post-&gt;ID, 'post-img', true); ?&gt;&amp;w=120&amp;h=80&amp;zc=1&amp;q=95' width='120' height='80' alt='&lt;?php the_title(); ?&gt;' /&gt;
&lt;?php } // endif post-img ?&gt;</code></pre>
<p><em>Bemerkung:</em><br />
Bei einem leeren Spezialfeld wird nun einfach nichts ausgegeben.</p>
<h3>Fazit:</h3>
<p>Mit TimThumb lassen sich also automatisch &#252;ber das Theme gesteuert beliebig viele Thumbnails eines einzigen Bildes erstellen.</p>
<h3>Relevante Links:</h3>
<ul>
<li><a href="http://code.google.com/p/timthumb/">Google-Code Projektseite von TimThumb</a></li>
<li><a href="http://timthumb.googlecode.com/svn/trunk/timthumb.php">Quellcode timthumb.php</a></li>
<li><a href="http://www.darrenhoyt.com/2008/04/02/timthumb-php-script-released/">Release-Post von Darren Hoyt</a></li>
<li><a href="http://www.darrenhoyt.com/support/forum/timthumb">Support-Forum f&#252;r TimThumb</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://webdemar.com/wordpress/tutorial-automatische-thumbnails-mit-timthumb/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Tutorial: Sliding-Content mit jFlow</title>
		<link>http://webdemar.com/webdesign/tutorial-sliding-content-mit-jflow/</link>
		<comments>http://webdemar.com/webdesign/tutorial-sliding-content-mit-jflow/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 13:32:48 +0000</pubDate>
		<dc:creator>Simon [webdemar]</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[sliding content]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://webdemar.com/?p=394</guid>
		<description><![CDATA[<p><img width="280" height="210" src="http://webdemar.com/wp-content/uploads/2008/12/jquery-slider-jflow.jpg" class="attachment-dv-full wp-post-image" alt="jquery-slider-jflow" title="jquery-slider-jflow" /></p>Sliding-Content sieht man im Webdesign und WordPress Themes heute sehr h&#228;ufig. Durch jQuery und kluge K&#246;pfe, die Plugins daf&#252;r schreiben, ist dies auch ohne gro&#223;e Programmierkenntnisse m&#246;glich. In diesem Tutorial beschreibe die Verwendung von jFlow &#8211; ein einfach zu verwendendes jQuery-Plugin. Was soll am Ende dabei herauskommen? Damit wir wissen, worum es geht, sollten wir [...]]]></description>
			<content:encoded><![CDATA[<p><img width="280" height="210" src="http://webdemar.com/wp-content/uploads/2008/12/jquery-slider-jflow.jpg" class="attachment-dv-full wp-post-image" alt="jquery-slider-jflow" title="jquery-slider-jflow" /></p><p>Sliding-Content sieht man im Webdesign und WordPress Themes heute sehr h&#228;ufig. Durch jQuery und kluge K&#246;pfe, die Plugins daf&#252;r schreiben, ist dies auch ohne gro&#223;e Programmierkenntnisse m&#246;glich. In diesem Tutorial beschreibe die Verwendung von <strong>jFlow</strong> &#8211; ein einfach zu verwendendes jQuery-Plugin.<span id="more-394"></span></p>
<h3 class="clear">Was soll am Ende dabei herauskommen?</h3>
<p>Damit wir wissen, worum es geht, sollten wir uns zun&#228;chsts erstmal ein &rsaquo; <a href="http://webdemar.com/beispiel/jFlow/">Beispiel ansehen</a>.</p>
<h3>Download jFlow 1.2</h3>
<p>Die n&#246;tigen Dateien laden wir uns im Gesamtpaket <a href="http://www.gimiti.com/kltan/wordpress/?p=46">jFlow 1.2</a> herunter.</p>
<h3>Einbinden der Skripte</h3>
<p>Zun&#228;chst legen wir uns eine neue html-Datei an (z. B. index.html) und binden im Head-Bereich dieser Datei die n&#246;tigen Skripte ein.</p>
<p>Als erstes laden wir die <strong>jQuery-Library</strong> per Google-Api. Ebenfalls k&#246;nnte man sich aber auch die letzte <a href="http://jquery.com/">jQuery-Version</a> herunterladen und diese einbinden.</p>
<pre><code>&lt;script language='javascript' type='text/javascript'
src='http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js'&gt;&lt;/script&gt;</code></pre>
<p>Der zweite Schritt ist das Einbinden des jFlow-Skriptes. In diesem Beispiel liegt die index.html im Root-Verzeichnis und das Skript im Order /js.</p>
<pre><code>&lt;script src='js/jquery.flow.1.2.js' type='text/javascript'&gt;&lt;/script&gt;</code></pre>
<h3>Anlegen des Contents</h3>
<p>Wir erzeugen drei div-Container, die nachher <em>geslidet</em> werden sollen. In jedem Slide ist ein Bild (aus dem Ordner /img), eine &#220;berschrift und ein wenig Text enthalten.</p>
<p>Diese drei divs packen wir der Ordnung halber in einen weiteren div mit der ID <em>content-slider</em>. So k&#246;nnen wir das Ganze &#252;ber CSS besser formatieren und positionieren und auch f&#252;r jFlow ist dies wichtig.</p>
<pre><code>&lt;div id='content-slider'&gt;

  &lt;div id='slide1'&gt;
    &lt;img src='img/slide1.jpg' alt='slide1' width='425' height='282'/&gt;
    &lt;h1&gt;Slide1&lt;/h1&gt;
    &lt;p&gt;Inceptos elit, vitae et. Eget eget nec, lectus nisl, vehicula est feugiat. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad &lt;/p&gt;
  &lt;/div&gt;

  &lt;div id='slide2'&gt;
    &lt;img src='img/slide2.jpg' alt='slide2' width='425' height='282'/&gt;
    &lt;h1&gt;Slide2&lt;/h1&gt;
    &lt;p&gt;Inceptos elit, vitae et. Eget eget nec, lectus nisl, vehicula est feugiat. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad &lt;/p&gt;
  &lt;/div&gt;

  &lt;div id='slide3'&gt;
    &lt;img src='img/slide3.jpg' alt='slide3' width='425' height='282'/&gt;
    &lt;h1&gt;Slide3&lt;/h1&gt;
    &lt;p&gt;Inceptos elit, vitae et. Eget eget nec, lectus nisl, vehicula est feugiat. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad &lt;/p&gt;
  &lt;/div&gt;

&lt;/div&gt;&lt;!-- end content-slider --&gt;</code></pre>
<p>Wir haben also jetzt die Skripte eingebunden und unseren Content angelegt. Als n&#228;chstes werden wir jFlow nun beibringen, wo unser Content liegt und wie er <em>geslidet</em> werden soll.</p>
<p>Im Head der Datei machen wir daher folgende Angaben:</p>
<pre><code>&lt;script type='text/javascript'&gt;
$(function() {
	$('div#content-slider').jFlow({
	slides: '#slides',
	width: '425px',
	height: '425px'
	});
});
&lt;/script&gt;</code></pre>
<p>Bemerkung:<br />
Wir sagen dem Skript hiermit, dass unser Content im Container mit der ID <em>content-slider</em> liegt, dass die Slides innerhalb des Containers <em>slides</em> (m&#252;ssen wir noch anlegen) liegen und welche Ma&#223;e dieser haben soll.</p>
<p>In unserer Beispieldatei legen wir also innerhalb des Containers mit der ID <em>content-slider</em> einen weiteren Container <em>slides</em> um unsere Content-divs. Au&#223;erdem lege ich innerhalb von <em>div#content-slider</em> noch einen weiteren mit der ID <em>panel</em> an. Dort kommen unsere Steuerelemente (vor, zur&#252;ck etc.) hinein.</p>
<pre><code>&lt;div id='content-slider'&gt;

  &lt;div id='panel'&gt;

    &lt;div id='controller'&gt;
      &lt;span class='jFlowControl'&gt;Slide #1&lt;/span&gt; |
      &lt;span class='jFlowControl'&gt;Slide #2&lt;/span&gt; |
      &lt;span class='jFlowControl'&gt;Slide #3&lt;/span&gt;
    &lt;/div&gt;
    &lt;div id='prev-next'&gt;
      &lt;img src='img/prev.png' alt='prev' width='16' height='16' class='jFlowPrev'/&gt;
      &lt;img src='img/next.png' alt='next' width='16' height='16' class='jFlowNext'/&gt;
    &lt;/div&gt;

  &lt;/div&gt;&lt;!-- end panel --&gt;

  &lt;div id='slides'&gt;

    &lt;div id='slide1'&gt;
      &lt;img src='img/slide1.jpg' alt='slide1' width='425' height='282'/&gt;
      &lt;h1&gt;Slide1&lt;/h1&gt;
      &lt;p&gt;Inceptos elit, vitae et. Eget eget nec, lectus nisl, vehicula est feugiat. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad &lt;/p&gt;
    &lt;/div&gt;

    &lt;div id='slide2'&gt;
      &lt;img src='img/slide2.jpg' alt='slide2' width='425' height='282'/&gt;
      &lt;h1&gt;Slide2&lt;/h1&gt;
      &lt;p&gt;Inceptos elit, vitae et. Eget eget nec, lectus nisl, vehicula est feugiat. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad &lt;/p&gt;
    &lt;/div&gt;

    &lt;div id='slide3'&gt;
      &lt;img src='img/slide3.jpg' alt='slide3' width='425' height='282'/&gt;
      &lt;h1&gt;Slide3&lt;/h1&gt;
      &lt;p&gt;Inceptos elit, vitae et. Eget eget nec, lectus nisl, vehicula est feugiat. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad &lt;/p&gt;
    &lt;/div&gt;

  &lt;/div&gt;&lt;!-- end slides --&gt;

&lt;/div&gt;&lt;!-- end content-slider --&gt;</code></pre>
<p>Bemerkung:<br />
Im Container <em>div#panel</em> haben wir jetzt den <em>controller</em> mit drei Spans, die uns als Links zu den verschiedenen Slides dienen. <strong>Achtung!</strong> Die Anzahl der Spans muss immer der Anzahl der Sliding-Div (in unserem Beispiel 3) &#252;bereinstimmen, sont funktioniert jFlow nicht richtig. Im div <em>prev-next</em> finden wir die Bilder (kann auch Text sein), um vor oder zur&#252;ck zu sliden. Durch die Klassen jFlowPrev und jFlowNext wei&#223; jFlow, was bei einem Klick darauf zu tun ist.</p>
<p>Ab jetzt funkioniert unser Sliding-Content bereits und wir k&#246;nnen uns mit CSS daran austoben. Da dies jeder anders macht und mag, gehe ich auf die Formatierungen nicht im Einzelnen ein.</p>
<h3>Download Beispiel <small>&rsaquo; <a href="http://webdemar.com/beispiel/jFlow/">ansehen</a></small></h3>
<p>Wer mag, kann sich die Beispiele in dem Paket <a href="http://www.gimiti.com/kltan/wordpress/?p=46">jFlow 1.2</a> ansehen und anpassen oder sich das <a href="http://webdemar.com/download/tutorials/jFlow.zip">Beispiel aus diesem Tutorial herunterladen</a>.</p>
<h3>Relevante Links:</h3>
<ul>
<li><a href="http://www.gimiti.com/kltan/wordpress/?p=46">jFlow 1.2</a> &#8211; The Ultra-lightweight Fluid Content Slider for jQuery</li>
<li>Offizielle Website von <a href="http://jquery.com/">jQuery</a></li>
<li><a href="http://webdemar.com/beispiel/jFlow/">Beispiel</a> aus diesem Tutorial</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://webdemar.com/webdesign/tutorial-sliding-content-mit-jflow/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>
