<?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>Matu´s Blog - Webprogrammierung und jede Menge Tipps &#38; Tricks &#187; WordPress</title>
	<atom:link href="http://einmal-am-tag.de/category/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://einmal-am-tag.de</link>
	<description>Das Weblog zum Thema Webprogrammierung &#38; Design:(X)HTML und CSS, PHP, mySQL, CMS u.v.m.</description>
	<lastBuildDate>Sat, 10 Apr 2010 14:37:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>WordPress memory_limit erhöhen</title>
		<link>http://einmal-am-tag.de/2009-06/wordpress-memory-limit-erhoehen/</link>
		<comments>http://einmal-am-tag.de/2009-06/wordpress-memory-limit-erhoehen/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 01:12:20 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[memory_limit]]></category>
		<category><![CDATA[php.ini]]></category>
		<category><![CDATA[Webserver]]></category>
		<category><![CDATA[WP_MEMORY_LIMIT]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=1501</guid>
		<description><![CDATA[

In den letzten Tagen nach Erscheinen der neuen WordPress-Version häuften sich in den Blogs die Artikel zum Thema Speichererhöhung in Verbindung mit der Fehlermeldung 
Fatal error: Allowed memory size of &#8230; bytes exhausted &#8230; 
WordPress Deutschland hat dazu am 16. Juni 2009 eine gute Erklärung in den FAQ veröffentlicht. Besonders der Trick mit der Sprachdatei [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>In den letzten Tagen nach Erscheinen der neuen WordPress-Version häuften sich in den Blogs die Artikel zum Thema Speichererhöhung in Verbindung mit der Fehlermeldung </p>
<blockquote><p><strong>Fatal error: Allowed memory size of &#8230; bytes exhausted &#8230; </strong></p></blockquote>
<p>WordPress Deutschland hat dazu am 16. Juni 2009 eine gute Erklärung in den <a href='http://faq.wordpress-deutschland.org/exhausted-php-memory/' title='WordPress-Speicher erhöhen'><acronym title='frequently asked questions/häufig gestellte Fragen'>FAQ</acronym></a> veröffentlicht. Besonders der Trick mit der Sprachdatei ist interessant (senkt bei mir den Speicherverbrauch um 13%).<br />
Am gleichen Tag wurde dazu ebenfalls ein kleiner Beitrag auf <a href='http://bueltge.de/mehr-speicher-fuer-wordpress/957/' title='Mehr Speicher für WordPress'>bueltge.de</a> veröffentlicht.<br />
Beide weisen auf das Plugin „WP-Memory-Usage“ von Alex Rabe hin, das </p>
<ul>
<li>die Version</li>
<li>den verfübaren Speicher</li>
<li>sowie den aktuellen Speicherbedarf der WordPress-Installation</li>
</ul>
<p> anzeigt.<br />
Dieses Plugin ermittelt mit den PHP-Funktionen <a href='http://us2.php.net/manual/en/function.memory-get-usage.php' title='PHP-Funktion memory_get_usage'><em>memory_get_usage()</em></a> den aktuellen Speicherverbrauch und mit <a href='http://us2.php.net/manual/en/function.ini-get.php' title='Funktion ini_get'><em>ini_get(&#8217;memory_limit&#8217;)</em></a> die Lokal zugewiesene Speichergröße. </p>
<p>An dieser Stelle möchte ich Ihnen gerne einen tieferen Einblick in die Materie bieten. <span id="more-1501"></span></p>
<p>Der Arbeitspeicher (memory_limit) für die einzelnen Hosts auf dem Webserver wird an 2 Stellen festgelegt. Die erste allumfassende Einstellung erfolgt durch den Webhoster in der <strong><em>php.ini</em></strong>.<br />
In dieser wichtigen Konfigurationsdatei sind sämtliche Einstellungen für den PHP-Server hinterlegt. Verständlicherweise unterbinden Web-Hoster den Zugriff auf diese Datei, da sich viele Benutzer einen Server teilen. Mietet man sich einen sogenannten Root-Server sieht das natürlich anders aus.<br />
Dort wird (unter vielen anderen Einstellungen) der <strong><em>memory_limit</em></strong> eingestellt, welcher dann als sogenannter <strong><em>master value</em></strong> für den gesamten Server und den darauf befindlichen einzelnen Hosts die maximal zur Verfügung stehende Speichergröße für PHP-Scripte vorgibt.</p>
<p>Dieser Wert bzw. die gesamte <strong><em>php.ini</em></strong> kann mit der PHP-Funktion <strong><em>phpinfo()</em></strong> ausgelesen werden. Wenn Sie das gerne machen möchten, dann führen Sie folgende Schritte aus:</p>
<ul>
<li>Legen Sie im Backend-Bereich von Wordpress eine neue Seite mit dem Titel <strong><em>Backend</em></strong> und einem kurzen Text an</li>
<li>Stellen Sie die Sichtbarkeit rechts oben in der &#8220;Veröffentlichen-Box&#8221; auf Privat (dadurch kann die Seite erstens nur von Ihnen und zweitens nur wenn Sie <strong>eingeloggt</strong> sind aufgerufen werden. Die php.ini sollte aus Sicherheitsgründen nur von Ihnen einsehbar sein)</li>
<li>
Fügen Sie nach dem Speichern der Seite folgendes in die <strong><em>page.php</em></strong> unterhalb des &#8220;Loop&#8221; Ihres Theme-Ordners ein:</p>
<pre>
<span style='color:#aaa'> /* .../wp-content/themes/ihr_theme/page.php */</span>
&lt;?php
if(is_page('backend')){
phpinfo();
}
?&gt;
<span style='color:#aaa'> /* Speichern nicht vergessen!
Anmerkung: Anstatt die page.php zu verändern,
kann diese auch kopiert und umbenannt werden
(backend.php).
Diese kann dann als Template beim Neuanlegen
der Seite ausgewählt werden.
Dadurch halten Sie die page.php "sauber"
und können in Zukunft noch weitere php-Scripte
einfügen ...*/</span>
</pre>
</li>
<li>
Rufen Sie nun die zuvor angelegte Seite auf, in dem Sie deren Permalink (z.B. http://ihre_domain/backend) in die Adresszeile Ihres Browser eingeben. Dazu müssen Sie sich wie schon erwähnt vorher eingeloggt haben (der Browser speichert das als Cookie ab).
</li>
</ul>
<p>Nun sollte die Seite mit der gesamten php.ini angezeigt werden. Suchen Sie dort (STRG+F) nach <strong><em>memory_limit</em></strong>. Es werden 3 Spalten angezeigt:</p>
<ul>
<li>Directive &#8211;> gibt den Namen an</li>
<li>Local Value &#8211;> gibt den lokal verfügbaren maximalen Speicher an (&#8230; der Ihrer WordPress-Installation in Ihrem Host-Verzeichnis zur Verfügung steht)</li>
<li>Master Value &#8211;> gibt den durch Ihren Webhoster freigegebenen bzw. vorgegebenen maximalen Speicher an (dieser Wert gildet auf dem gesamten Server für alle Hosts)</li>
</ul>
<p>Somit wären wir auch schon bei der zweiten Einstellungsmöglichkeit, dem <em>local value</em>. Local value &#8230; master value? Etwas verwirrend, oder?! Ging mir zuerst genauso. Vor allem das Zusammenspiel bzw. die Abhängigkeit brachte mich etwas ins Grübeln. </p>
<p>Wenn der Webhoster das maximale Speicherlimit für alle Hosts auf dem Server schon durch den <strong><em>master value</em></strong> in der <strong><em>php.ini</em></strong> festgelegt hat (auf die ich keinen Zugriff habe), kann ich diesen Wert etwa Lokal in meinem eigenen Verzeichnis hochschrauben und mir so mehr Speicher zuschieben, als alle anderen zur Verfügung haben?</p>
<p><strong><em>Richtig, genau so ist es!</em></strong></p>
<p>Aber nür, wenn der Webhoster das auch zuläßt.<br />
Dazu gibt es verschiedene Möglichkeiten. Eine wäre, in der <strong><em>wp-config.php</em></strong> die globale Variable <strong><em>WP_MEMORY_LIMIT</em></strong> neu zu setzen und ihr einen Wert zuzuweisen, der höher liegt als die Grundeinstellung von 32 MB (definiert in der <strong><em>wp-settings.php</em></strong>).</p>
<pre>
&lt;?php
...
define('WP_MEMORY_LIMIT', '64M');
...
?&gt;
</pre>
<p>Wobei die 65 MB nur ein Beispiel sind, ich konnte den Wert bei mir auch höher schrauben, &#8230;</p>
<p><img src="http://einmal-am-tag.de/wp-content/uploads/2009/06/memory_limit1.jpg" alt="Memory Limit1 in " width="645" height="49" /></p>
<p> &#8230; was mich etwas stutzig machte. Also habe ich mal bei meinem Webhoster nachgefragt und bekam folgende Antwort, die ich nur in Auszügen veröffentliche:</p>
<blockquote><p>
Hallo,</p>
<p>erst einmal möchte ich Ihnen mitteilen, dass ich bisher sehr zufrieden bin.<br />
Und nun eine kleine Frage:<br />
Ist es von Ihnen gewollt, dass der &#8216;memory_limit&#8217; in der &#8216;php.ini&#8217; lokal per htaccess oder ini_set() überschrieben werden kann?</p>
<p>Gruß<br />
Jörg Mathuszczyk
</p></blockquote>
<p>Darauf kam folgende Antwort:</p>
<blockquote><p>
Hallo Herr Mathuszczyk,</p>
<p>vielen Dank für Ihre Anfrage.</p>
<p>Dies ist gewollt, da einige Scripte dies benötigen. Wenn sich dadurch jedoch feststellt, das besagter Kunde damit den Server überlastet müssen wir einschreiten.</p>
<p>Bei weiteren Fragen stehen wir Ihnen gern zur Verfügung.</p>
<p>&#8230;
</p></blockquote>
<p>An dieser Stelle noch mal vielen Dank an den Support für die (sehr) schnelle Antwort.</p>
<p>Kommen wir nun zu einer weiteren Möglichkeit, den <em><strong>memory_limit</em></strong> hochzusetzen.<br />
Dazu benutzen wir die PHP-Funktion <a href='http://www.php.net/manual/de/function.ini-set.php' title='PHP-Funktion ini_set'><em><strong>ini_set()</em></strong></a> und fügen diese an Stelle der zuvor genannten <em>WP_MEMORY_LIMIT</em> in die <em>wp-config.php</em> ein. </p>
<pre>
&lt;?php
...
ini_set('memory_limit', '65M');
...
?&gt;
</pre>
<p>Auch dies funktionierte bei mir ohne Probleme. Ist auch logisch, denn beim Setzen von <em>WP_MEMORY_LIMIT</em> wird haargenau die gleiche Funktion benutzt, um den <em>memory_limit</em> festzulegen. Dies geschieht per Zuweisung in der <em>wp-settings.php</em>.</p>
<pre>
&lt;?php
/**
 * Used to setup and fix common variables and include
 * the WordPress procedural and class library.
 *
 * You should not have to change this file and allows
 * for some configuration in wp-config.php.
 *
 * @package WordPress
 */

if ( !defined('WP_MEMORY_LIMIT') )
	define('WP_MEMORY_LIMIT', '32M');

if ( function_exists('memory_get_usage') &#038;&#038; ( (int) @ini_get('memory_limit') < abs(intval(WP_MEMORY_LIMIT)) ) )
	<span style='color:red'>@ini_set('memory_limit', WP_MEMORY_LIMIT);</span>

 ...
</pre>
<p>Eine dritte Möglichkeit ermöglicht das Speicherlimit in der <strong><em>.htacces</em></strong>-Datei festzulegen, indem dort folgendes eingefügt wird:</p>
<pre>
<span style='color:red'>php_value memory_limit 65M</span>

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
...
</pre>
<p>Dieser Weg war bei mir ebenfalls möglich, muss aber wiederum durch  den jeweiligen Webhoster zugelassen werden.</p>
<p>Auch wenn es verlockend klingt, den Wert gleich um ein vielfaches hochzusetzen, rate ich davon dringend ab. Ein schlecht programmiertes oder fehlerhaftes Script (Plugin, &#8230;) könnte so den gesamten zur Verfügung stehenden Arbeitsspeicher &#8220;in Beschlag nehmen&#8221;, was den gesamten Server beinträchtigen würde. Aus diesem Grund empfehle ich einen eher kleinen Wert mit etwas Spielraum nach oben (65 MB sollten bei einem WordPress-Blog dicke ausreichen).<br />
Ansonsten würde ich nach Plugins Ausschau halten, die &#8220;mächtig Hunger haben&#8221;. Eine schnelle Senkung kann durch die oben bereits angesprochene Deaktivierung der deutschen Sprachdatei in der <em>wp-config.php</em> erzielt werden.</p>
<pre>
define ('WPLANG', 'de_DE');
<span style='color:#aaa'> /* hier 'de_DE' entfernen */</span>
define ('WPLANG', '');
</pre>
<p>Durch diese Maßnahme wird das Backend von WordPress zwar wieder in Englisch angezeigt (Grundeinstellung), senkt aber den Ressourcenverbrauch um einiges. Wenn Sie nicht erst seit kurzem mit WordPress arbeiten, sollte das nicht weiter stören.</p>
<p>Bietet Ihr Webhoster von Haus aus nur wenig Arbeitspeicher und das Limit kann auch nicht lokal durch die genannten Maßnahmen erhöht werden, wäre ein Wechsel anzuraten. Dadurch treten auch in Zukunft solche Probleme gar nicht erst auf.</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-06/wordpress-memory-limit-erhoehen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Kommentare mit Smileys</title>
		<link>http://einmal-am-tag.de/2009-06/wordpress-kommentare-mit-smileys/</link>
		<comments>http://einmal-am-tag.de/2009-06/wordpress-kommentare-mit-smileys/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 19:59:51 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Layout]]></category>
		<category><![CDATA[Smileys]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=1458</guid>
		<description><![CDATA[

Auf vielen WordPress-Blocks befindet sich im Kommentarbereich eine Zeile mit Smileys. 
 &#8230;
Durch Anklicken können diese Smileys dann schnell und einfach in einen Kommentar eingebunden werden. So etwas wollte ich meinen Besuchern natürlich auch bieten und habe für Euch etwas recherchiert. Folgender Javascript-Block, den ich noch XHTML-Strict validiert habe, muss in Eurer comments.php unter (oder [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Auf vielen <strong>WordPress</strong>-Blocks befindet sich im Kommentarbereich eine Zeile mit <strong>Smileys</strong>. </p>
<p><img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_wink.gif" alt="Icon Wink in " class="wp-smiley"  /><img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_neutral.gif" alt="Icon Neutral in " class="wp-smiley"  /><img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_mad.gif" alt="Icon Mad in " class="wp-smiley"  /> &#8230;</p>
<p>Durch Anklicken können diese <strong>Smileys</strong> dann schnell und einfach in einen <strong>Kommentar</strong> eingebunden werden. So etwas wollte ich meinen Besuchern natürlich auch bieten und habe für Euch etwas recherchiert. Folgender Javascript-Block, den ich noch XHTML-Strict validiert habe, muss in Eurer <em>comments.php</em> unter (oder über) der &lt;textarea&gt;&lt;/textarea&gt; eingefügt werden.<span id="more-1458"></span></p>
<pre>
&lt;div class="smileys"&gt;
  &lt;script type="text/javascript"&gt;
  /*&lt;![CDATA[*/
    function SJB_appendSmiley(text) {
        var comment=document.getElementById('comment');
        comment.value=comment.value+' '+text;
    }

document.write('&lt;a href="javascript:SJB_appendSmiley(\':wink:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_wink.gif" alt=":wink:" class="wp-smiley" title=":wink:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-|\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_neutral.gif" alt=":-|" class="wp-smiley" title=":-|" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-x\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_mad.gif" alt=":-x" class="wp-smiley" title=":-x" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':twisted:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_twisted.gif" alt=":twisted:" class="wp-smiley" title=":twisted:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':)\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" title=":)" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\'8-O\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_eek.gif" alt="8-O" class="wp-smiley" title="8-O" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':(\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_sad.gif" alt=":(" class="wp-smiley" title=":(" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':roll:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_rolleyes.gif" alt=":roll:" class="wp-smiley" title=":roll:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-P\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_razz.gif" alt=":-P" class="wp-smiley" title=":-P" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':oops:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_redface.gif" alt=":oops:" class="wp-smiley" title=":oops:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-o\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_surprised.gif" alt=":-o" class="wp-smiley" title=":-o" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':mrgreen:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" class="wp-smiley" title=":mrgreen:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':lol:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_lol.gif" alt=":lol:" class="wp-smiley" title=":lol:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':idea:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_idea.gif" alt=":idea:" class="wp-smiley" title=":idea:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-D\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_biggrin.gif" alt=":-D" class="wp-smiley" title=":-D" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':evil:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_evil.gif" alt=":evil:" class="wp-smiley" title=":evil:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':cry:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_cry.gif" alt=":cry:" class="wp-smiley" title=":cry:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\'8)\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_cool.gif" alt="8)" class="wp-smiley" title="8)" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':arrow:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_arrow.gif" alt=":arrow:" class="wp-smiley" title=":arrow:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-?\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_confused.gif" alt=":-?" class="wp-smiley" title=":-?" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':?:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_question.gif" alt=":?:" class="wp-smiley" title=":?:" /&gt;');
document.write('&lt;/a&gt; ');
document.write('&lt;a href="javascript:SJB_appendSmiley(\':!:\')"&gt;');
document.write('&lt;img src="http://einmal-am-tag.de/wp-includes/images/smilies/icon_exclaim.gif" alt=":!:" class="wp-smiley" title=":!:" /&gt;');
document.write('&lt;/a&gt; ');
/*]]&gt;*/
&lt;/script&gt;

&lt;noscript&gt;&lt;p&gt;Wenn du Javascript aktiviert h&auml;ttest, w&uuml;rden hier klickbare Smileys stehen &lt;br /&gt; You could see clickable smiley faces here if you had JavaScript activated.&lt;/p&gt;&lt;/noscript&gt;&lt;/div&gt;
</pre>
<p>Über das <em>div</em> mit der Klassenbezeichnung (class=&#8221;smileys&#8221;) könnt Ihr die Zeile in Eurem Stylesheet positionieren (falls gewünscht). </p>
<p>Der Pfad zu jedem einzelnen Smiley-Bild muss noch durch Eure eigene Domain ersetzt werden.</p>
<pre>
document.write('&lt;img src="http://<span style='color:red;'>deine_domain</span>/wp-includes/images/smilies/icon_exclaim.gif" alt=":!:" class="wp-smiley" title=":!:" /&gt;');
</pre>
<p>Wenn Ihr das nicht händig machen wollt, empfiehlt sich die Bearbeitung in einem Editor. Notepad++ bietet für solche Vorgänge unter <em>Suche</em> (STR+F) die Option <em>Ersetzen</em>.<br />
Damit lassen sich auch in größeren Scripten einzelne Zeichen schnell und problemlos durch andere austauschen.</p>
<p>In allen Zeilen des beginnenen <em>a</em>-Tags müssen zudem die Hochkommata <em>escaped</em> werden.</p>
<pre>
document.write('&lt;a href="javascript:SJB_appendSmiley(<span style='color:red;'>\'</span> ... <span style='color:red;'>\'</span>)"&gt;');
</pre>
<p>Die Smileys (wie auch am Pfad erkennbar) befinden sich in dem Ordner <strong><em>&#8230;/wp-includes/images/smilies/&#8230;</em></strong>, der direkt im Root-Verzeichnis (1. Ebene) Eurer WordPress-Installation liegt. Werft dort einfach mal einen Blick hinein.<br />
Den dort könnt Ihr auch weitere bzw. andere Smilies einfügen. Dazu einfach etwas im Netz stöbern. Eventuell kreiert jemand ja auch einen Satz eigener Smileys und stellt diese dann anderen zur Verfügung. </p>
<p>Sobald Ihr dort eigene Smileys hinzugefügt habt, müssen diese dem WordPress-System noch &#8220;bekannt&#8221; gemacht werden:</p>
<ul>
<li> Öffnet dazu bitte ebenfalls im <strong><em>wp-includes</em></strong>-Ordner die <strong><em>functions.php</em></strong></li>
<li> Drückt dort die Tastenkombination &#8220;STRG+F&#8221;, so dass sich das &#8220;Suchen&#8221;-Fenster öffnet und gebt dort <strong><em>$wpsmiliestrans  = array</strong></em> ein</li>
<li> Dadurch gelangt Ihr zu einem Array, in dem allen einzelnen Smiley-Images (aus dem zuvor angesprochenen smilie-Ordner) ein individueller Text zugeordnet wird.
<p><a href='http://einmal-am-tag.de/wp-content/uploads/2009/06/smiley_array.png' rel="lightbox" title='Smiley Array in WordPress'><img src="http://einmal-am-tag.de/wp-content/uploads/2009/06/smiley_array.png" alt="Smiley Array in " width="300" height="200" /></a></p>
</li>
<li>
Der gleiche Text wird beim Anklicken eines Smileys an die Funktion <em>SJB_appendSmiley</em> übergeben und in den Kommentarbereich eingefügt.<br/><br/></p>
<pre>
document.write('&lt;a href="javascript:SJB_appendSmiley(\':-|\')"&gt;');
</pre>
</li>
<li>
Wordpress tauscht diesen Text dann durch das jeweilige im <strong><em>$wpsmiliestrans</em></strong>-Array zugewiesene Smiley aus
</li>
<li>
Für jeden Eurer eigenen Smileys, die Ihr zuvor im smilie-Odner abgespeichert habt, legt Ihr hier nun nach dem gleichen Schema eine eigene Zeile an:<br/><br/></p>
<pre>
...
 ':neuer_smiley:' => 'neuer_smiley.gif',
':neuer_smiley2:' => 'neuer_smiley2.gif',
':neuer_smiley3:' => 'neuer_smiley3.gif',
...
</pre>
</li>
<li>
Der Javascript-Block in der <strong><em>comments.php</em></strong> muss natürlich um jedes neu hinzugefügte Smiley erweitert werden:<br/><br/></p>
<pre>
document.write('&lt;a href="javascript:SJB_appendSmiley(\':neuer_smiley:\')"&gt;');
document.write('&lt;img src="http://eure_domain/wp-includes/images/smilies/neuer_smilie.gif" alt=":-x" class="wp-smiley" title=":neuer_smilie:" /&gt;');
document.write('&lt;/a&gt; ');
</pre>
</li>
</ul>
<p>Jetzt sollte klar geworden sein, wie es funktioniert.</p>
<p>Mich persönlich sprechen diese <a href='http://noobr.net/2009/02/15-smiley-icon-sets-express-yourself/' title='manto smileys'>&#8216;manto-smileys&#8217;</a> besonders an, die nur noch mit GIMP (oder Photoshop) auf eine akzeptable Größe reduziert werden müßten.<br />
Als ich diese das erste mal gesehen habe, dachte ich nur:&#8221;Wie geil ist das denn!&#8221;. Allerdings sagt die Seite nichts über die Lizenzbestimmungen des chinesischen Designers aus &#8230;! </p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-06/wordpress-kommentare-mit-smileys/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Dynamisches Stylesheet (Dynamic CSS)</title>
		<link>http://einmal-am-tag.de/2009-06/dynamisches-stylesheet/</link>
		<comments>http://einmal-am-tag.de/2009-06/dynamisches-stylesheet/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 19:35:21 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Cascading Stylesheet]]></category>
		<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=1287</guid>
		<description><![CDATA[

Web 2.0 ist in aller Munde. Nachrichten werden zwischen einzelnen Webseiten ausgetauscht (Stichwort Abonnementdienste wie RSS/Atom). Weblogs schießen wie Pilze aus den Boden. Dynamische Webseiten (DHTML) sowie DOM-Scripting sind in der heutigen Zeit zum Standard geworden. Menüs klappen auf, Texte werden eingeblendet, Seiteninhalte lassen sich einfach verschieben … überall bewegt sich etwas. 
Es werden Techniken [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p><strong>Web 2.0</strong> ist in aller Munde. Nachrichten werden zwischen einzelnen Webseiten ausgetauscht (Stichwort Abonnementdienste wie <strong>RSS/Atom</strong>). <strong>Weblogs</strong> schießen wie Pilze aus den Boden. Dynamische Webseiten (<strong>DHTML</strong>) sowie <strong><acronym title='Document Object Model'>DOM</acronym></strong>-Scripting sind in der heutigen Zeit zum Standard geworden. Menüs klappen auf, Texte werden eingeblendet, Seiteninhalte lassen sich einfach verschieben … überall bewegt sich etwas. </p>
<p>Es werden Techniken eingesetzt, die Web-Anwendungen wie Desktop-Anwendungen aussehen lassen (Stichwort <strong>Ajax</strong>). Rein statische Seiten fristen in den Weiten des Internet nur noch ein Schatten-Dasein.<br />
Und wenn wir ehrlich sind, haben wir uns daran gewöhnt. </p>
<p>Wir erwarten, das Webprogrammierer -und Designer die Seiten so gestalten, das sie attraktiv und „<acronym title='Benutzerfreundlichkeit'>usability</acronym>“ daher kommen. Das Webseiten auch körperlich beeinträchtigten Menschen zugänglich sind (Stichwort Barrierefreiheit) und nach Möglichkeit in jedem Browser … zumindest einigermaßen … ähnlich aussehen. <span id="more-1287"></span></p>
<p>Es können Videos und Fotos betrachtet, Musik gehört und Spiele gespielt werden. Animationen, erstellt mit Java, Flash, Javascript oder als GIF-Bild, lassen Webseiten „leben“ (wenn sie uns nicht gerade stören).</p>
<p>Und da ich von diesen Dingen einfach fasziniert bin, habe ich mich daran gesetzt, dem <strong>Stylesheet</strong> meines Blogs mit Hilfe von PHP ebenfalls etwas Dynamik einzuhauchen. </p>
<p><strong>Anleitung dynamisches Stylesheet</strong><br />
Zuerst muss die Endung der normalen Stylesheet-Datei …</p>
<pre>
style.<span style='color:red;'>css</span>
</pre>
<p>&#8230; durch &#8230;</p>
<pre>
style.css.<span style='color:red;'>php</span>
</pre>
<p>&#8230; ersetzt werden.<br />
Eingebunden wird die neue dynamische Stylesheet-Datei wie gewohnt im Head-Bereich der Seite:</p>
<pre>
&lt;!DOCTYPE html PUBLIC …
&lt;html&gt;
  &lt;head&gt;
    <span style='color:red;'>&lt;link rel="stylesheet" type="text/css" href="pfad_zur_datei/style.css.php" /&gt;</span>
  &lt;/head&gt;
  &lt;body&gt;
  ...
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Nun wird im neuen Stylesheet innerhalb eines PHP-Blocks der <a href=' http://de.wikipedia.org/wiki/Internet_Media_Type' title='Wikipedia Content-Type'>Content-type</a> angegeben, da der Server beim Parsen sonst davon ausgeht, dass es sich hierbei um eine gewöhnliche HTML-Datei handelt. Dazu wird im Kopf der css.php-Datei folgendes deklariert:</p>
<pre>
&lt;?php
  <span style='color:red;'>header('Content-type: text/css');</span>
  <span style='color:#aaa;'> /*
    An dieser Stelle wird der Quellcode eingefügt.
    Mehr dazu später …
   */</span>
?&gt;

/* Begin Typography &#038; Colors */

body {

	font-size: 62.5%; /* Resets 1em to 10px */

	font-family: Arial, Helvetica, Sans-Serif;

	background: #063164; 

	color: #999;

	text-align: center;

	}
…
</pre>
<p>Nun „weiß“ der Server Bescheid, gibt die PHP-Datei als CSS-Datei an den Browser und dieser kann die Datei anschließend richtig interpretieren.</p>
<h5 class='trigger'>Erklärung</h5>
<div>
Im Gegensatz zu einer normalen Stylesheet-Datei, die der jeweilige Browser direkt durch den angegebenen Pfad im Head-Bereich der Webseite <acronym title='einliest'> „annektiert“</acronym>, wird die neue PHP-CSS-Datei zuerst vom Server (auf Grund der <span style='color:red;'>.php</span>-Endung!) durch den PHP-Parser geschickt.<br />
Dieser erkennt den eingefügten PHP-Block </p>
<pre>
&lt;?php
 …
?&gt;
</pre>
<p>und arbeitet den dort eingefügten Quellcode ab. Erst danach wird die (inhaltlich geänderte) Datei zurückgeschickt und steht nun dem jeweiligen Browser zur Verfügung. Dieser erkennt, genau wie der Besucher der Seite, durch die explizite Angabe des Content-Types eine ganz normale CSS-Datei. Der PHP-Code kann dagegen nicht eingesehen werden!
</p></div>
<p>Da mir diese Webseite neben dem Bloggen auch als „Bastelstube“ dient (siehe auch mein <a href='http://einmal-am-tag.de/kolophon/' title='Kolophon'>Kolophon</a>), um Webtechniken anzuwenden, hatte ich mir überlegt, die Hintergrundfarbe beim ersten Aufruf der Seite zufällig aus einem Pool von Hintergrundgrafiken generieren zu lassen. Diese sind bereits als PNG-Dateien auf dem <acronym title='Speicherplatz der Webseite bei einem Server-Hosting-Provider'>Webspace </acronym> hinterlegt und werden über den Name eingebunden.</p>
<pre>
   bg_hellgruen.png
   bg_blau.png
   bg_beige.png
   ...
</pre>
<p>Dazu legte ich zunächst ein Array an, in das die Namen derjenigen Grafiken einfügte wurde, die später angezeigt werden sollen.</p>
<pre>
$farben = array('weiss', 'schwarz', 'blau', 'gruen',
        'beige', 'hellblau', 'hellgruen', 'rose',
        'sand', 'grau_gruen');
</pre>
<p>Aus diesem wird ein zufälliges ausgewählt</p>
<pre>
 $zufall = array_rand($farben, 1);<span style='color:#aaa;'>/* ... die 1 kann bei einem
Wert auch weggelassen werden */</span>
 $zufalls_farbe = $farben[$zufall];
</pre>
<p>und danach in einem switch-Kontrollblock die Textfarbe an die jeweilige Hintergrundfarbe angepasst, um einen ausreichenden Kontrast zu garantieren.</p>
<pre>
switch ($zufalls_farbe) {
    case 'weiss':
     $_SESSION['textcolor'] = '#222';
        break;
    case 'beige':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'hellblau':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'oliv':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'rose':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'hellgruen':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'sand':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'grau_gruen':
      $_SESSION['textcolor'] = '#222';
        break;
    default:
      $_SESSION['textcolor'] = '#aaa';
        break;
  }
</pre>
<p>Anstatt des <em>switch</em>-Kontrollblocks kann natürlich auch eine if-Abfrage eingesetzt werden. Ich habe dies lediglich auf diese Art gelöst, um wieder mal mit der <em>switch</em>-Syntax zu arbeiten. Hinsichtlich der Geschwindigkeit dürften sich beide Möglichkeiten (auch bei größeren Datenmengen) nicht wesentlich unterscheiden (unter Programmierern führt dieser Aspekt gern zu ausufernden Diskussionen &#8211;> kürzer, schneller …).</p>
<p>Um die einmal ausgewählte Hintergrundfarbe während des Besuchs beizubehalten, wird noch eine Session-Variable erstellt. In dieser wird beim ersten Einlesen der css.php-Datei ebenfalls die zufällig generierte Hintergrundfarbe gespeichert. </p>
<pre>
 $_SESSION['color'] = $zufalls_farbe;
</pre>
<p>Dies wurde für die Textfarbe bereits schon im <em>switch</em> realisiert.<br />
Normalerweise legt der Browser die CSS- Datei (und noch einige andere Dateien, z.B. Grafiken) im eigenen Cache-Speicher ab und ein erneutes Einlesen ist bei Seitenwechsel nicht mehr nötig. Dadurch kann die Webseite nach dem ersten Aufruf schneller geladen werden. </p>
<p>Da dies aber nicht garantiert ist (was mir meine Erfahrungen auch bestätigen), wird bei jedem Einlesen überprüft, ob diese Session-Variable existiert. Sollte dies der Fall sein, erfolgt keine erneute Auswahl der Hintergrundfarbe, sondern es wird dann der gespeicherte Wert der Session-Variable verwendet. Dafür wird der gesamte Quellcode in eine Abfrage eingeschlossen, welche direkt überprüft, ob die Session-Variable bereits existiert.</p>
<pre>
if(!isset($_SESSION['color'])) {
...
}
<span style='color:#aaa;'>/* Nur wenn die SESSION-Variable noch nicht (!)
existiert, wird eine neue Farbe ausgewählt
*/</span>
</pre>
<p>Nun werden die gefüllten Variablen an den jeweiligen Stellen im normalen Stylesheet-Bereich eingefügt und mit dem <em>echo</em>-Befehl ausgegeben.</p>
<pre>
#header {
	background: transparent url('images/layout/<span style='color:green;'>bg_</span>&lt;?php
        if(isset($_SESSION['color'])) echo $_SESSION['color'];
        else echo 'bg_weiss'; ?&gt;<span style='color:green;'>.png</span>') repeat-y top center;
        <span style='color:#aaa;'>/* Der else-Block dient nur als Beispiel
        und dürfte nicht ausgeführt werden*/</span>
	}
...

#content {
	font-size: 1.35em;
        color:&lt;?php if(isset($_SESSION['textcolor'])) echo $_SESSION['textcolor']; else echo '#222'; ?&gt;;
	}
...
</pre>
<p>Durch diese Maßnahme bekommt jeder Besucher der Seite beim ersten Aufruf eine zufällige Hintergrundfarbe, die auch bei Seitenwechsel erhalten bleibt (es sei denn, es wird ein anderer Hintergrund über den <a class='einstellungen'>Einstellungen-Button</a> gewählt).</p>
<p>Aber anstatt der Hintergrundfarbe könnte auch der body-Hintergrund geändert werden. In dem PHP-Bereich kann das ganze Potenzial dieser Scriptsprache eingesetzt werden, um das Stylesheet den eigenen Bedürfnissen <em>dynamisch</em> anzupassen.<br />
Auch eine Darstellung, welche an die jeweilige Tageszeit angepasst wird bzw. von dieser abhängig ist, kann so leicht realisiert werden (time-Funktion von PHP). </p>
<pre>
 <span style='color:#aaa;'>/* H - Stunde im 24-Stunden-Format (00-23 ) */</span>
if (date("H")&gt;8 &#038;&#038; date("H")&lt;20){
$background = "#ffffff";
    $color = "#000000";
  } else {
    $background = "#000000";
    $color = "#ffffff";
  }
</pre>
<p>Doch es traten auch Probleme auf. Die Stylesheet-Anpassungen für die  <img src='http://einmal-am-tag.de/wp-includes/images/smilies/icon_evil.gif' alt="Icon Evil in " class='wp-smiley' />  -Browser der Redmonder habe ich direkt im Stylesheet stehen und nicht wie sonst üblich über eine Browserweiche (Conditional Comments ) als zusätzliches Stylesheet eingebunden.<br />
Die Separierung erfolgt über die &#8220;Holzhammer-Methode&#8221; mit dem <em>!important</em>-Hack:</p>
<pre>
<span style='color:#aaa'>/* Beispiel */</span>
.navigation {
	display: block;
	text-align: center;
        <span style='color:#aaa;'>/* 'Normale' Browser führen diese Zuweisung aus ... */</span>
	margin-top: 10px !important;
        <span style='color:#aaa;'>/* ... während der IE !important nicht kennt und diese
        Zuweisung interpretiert */</span>
        margin-top:0px;
        <span style='color:#aaa;'>/* Dies wird dann wieder von allen ausgeführt */</span>
	margin-bottom: 60px;
	}
</pre>
<p>Diese Art, IE-Bugs zu beheben, sollte eigentlich nicht verwendet werden ( &#8230; um das Grund-Stylesheet sauber zu halten). Da ich jedoch bisher nicht viele Anpassungen vornehmen mußte, habe ich es auf diese (nicht besonders elegante Weise) gelöst.<br />
Nach Umänderung meines Stylesheets zu einer PHP-CSS-Datei mit Content-Type-Deklaration wurde ich auch sofort bestraft und der Hack funktionierte aus mir unerklärlichen Gründen nicht mehr. Als Folge wurde meine Seite 3 Tage lang etwas &#8220;zerissen&#8221; im IE angezeigt, bis ich es als Firefox-Nutzer endlich gemerkt hatte. Dadurch wurde ich mal wieder daran erinnert, dass in der Programmierung umfangreiche Tests unabdingbar sind.<br />
Nun hätte ich mein Grund-Stylesheet ändern und die IE-Anweisungen auslagern können. Ich entschied mich aber dafür, den PHP-Teil in eine separate Datei zu schreiben und zusätzlich in die Seite einzufügen. So können zukünftige weitere Schritte überschaubarer realisiert werden.</p>
<p>Ich hoffe, diese Einführung in dynamische Stylesheets war hilfreich für eigene Projekte. </p>
<h5 class='trigger'>Hier noch mal der gesamte Quellcode</h5>
<div>
<pre>
&lt;?php
session_start(); <span style='color:#aaa;'>/* ... muss am Anfang eingefügt werden */</span>
<span style='color:#aaa;'>/* error_reporting(E_ALL)  und ini_set('display_errors', 'On') zur Fehlersuche */</span>
error_reporting(E_ALL);
ini_set('display_errors', 'On');
header('Content-type: text/css');

<span style='color:#aaa;'>/* Zufallshintergrund */</span>
if(!isset($_SESSION['color'])) {

  $farben = array('weiss', 'schwarz', 'blau', 'gruen', 'beige', 'hellblau', 'hellgruen', 'rose', 'sand', 'grau_gruen');
  $zufall = array_rand($farben, 1);<span style='color:#aaa;'>/* ... die 1 kann bei einem Wert auch weggelassen werden */</span>
  $zufalls_farbe = $farben[$zufall];

  switch ($zufalls_farbe) {
    case 'weiss':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'beige':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'hellblau':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'oliv':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'rose':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'hellgruen':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'sand':
      $_SESSION['textcolor'] = '#222';
        break;
    case 'grau_gruen':
      $_SESSION['textcolor'] = '#222';
        break;
    default:
      $_SESSION['textcolor'] = '#ccc';
        break;
  }
  $_SESSION['color'] = $zufalls_farbe;
}
?&gt;

#header {
	background: transparent url('images/layout/<span style='color:green;'>bg_</span>&lt;?php
             if(isset($_SESSION['color']))
                 echo $_SESSION['color'];
             else
                 echo 'bg_weiss'; ?&gt;<span style='color:green;'>.png</span>') repeat-y top center;
	}

#container_inside {
	background: transparent url('images/layout/<span style='color:green;'>bg_</span>&lt;?php
             if(isset($_SESSION['color']))
                 echo $_SESSION['color'];
             else
                 echo 'bg_weiss'; ?&gt;<span style='color:green;'>.png</span>') repeat-y top center;
	}

#content {
	font-size: 1.35em;
        color:&lt;?php
            if(isset($_SESSION['textcolor']))
               echo $_SESSION['textcolor'];
            else
               echo '#222'; ?&gt;;
	}
</pre>
</div>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-06/dynamisches-stylesheet/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Scroll Top Link (Teil 3)</title>
		<link>http://einmal-am-tag.de/2009-06/scroll-top-link-teil3/</link>
		<comments>http://einmal-am-tag.de/2009-06/scroll-top-link-teil3/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 19:56:12 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Scroll Top]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=908</guid>
		<description><![CDATA[

Im dritten Teil möchte ich Ihnen nun einen Scroll Top Link ohne Verwendung von jquery zeigen. Dies ist vor allem dann wichtig, wenn Sie sich mit der Programmierung beschäftigen und etwas hinter die Kulissen schauen wollen. Oder aber, Sie suchen lediglich eine „schlanke“ Möglichkeit für einen Scroll Top Link.
Natürlich kann ich hier nicht den Komfort [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<h4>Im dritten Teil möchte ich Ihnen nun einen Scroll Top Link ohne Verwendung von jquery zeigen. Dies ist vor allem dann wichtig, wenn Sie sich mit der Programmierung beschäftigen und etwas hinter die Kulissen schauen wollen. Oder aber, Sie suchen lediglich eine „schlanke“ Möglichkeit für einen Scroll Top Link.</h4>
<p>Natürlich kann ich hier nicht den Komfort bieten, wie dies ein ausgewachsenes Framework wie zum Beispiel jquery mit all seinen Funktionen ermöglicht. Aber das will ich auch gar nicht. Mein Anliegen beschränkt sich auf schlichten, funktionierenden und besonders schlanken Code, mit dem sich ein Scroll Top Link realisieren lässt (309 Byte).<br />
Hierbei gehe ich wieder Schritt für Schritt vor, damit Sie mir auch folgen können, wenn Sie sich noch nicht so gut in der Programmierung auskennen.<span id="more-908"></span></p>
<p><strong>1. Scroll Top Link modifizieren</strong><br />
Zunächst muss der Scroll Top Link in unserer Webseite modifiziert werden. Es reicht nun nicht mehr aus, diesem lediglich eine ID zuzuweisen und dann einfach über die click-Funktion von jquery zu „horchen“, ob dieser betätigt wurde. Wir erinnern uns &#8230;</p>
<pre>
...
$(<span style='color:red'>'a#top'</span>).click(<span style="color:#003300">function</span>(){
...
</pre>
<p>Denn (richtig!), wir verwenden kein jquery mehr und müssen nun alles selber programmieren. Dazu benötigen wir zunächst einen so genannten <em>event-Handler</em>, mit dem auf ein Anwender-Ereignis, in unserem Fall der Klick auf den Scroll Top Link, eingegangen werden kann. Und dieser heißt, welch Zufall <img src='http://einmal-am-tag.de/wp-includes/images/smilies/icon_wink.gif' alt="Icon Wink in " class='wp-smiley' />  , <strong><em>onclick</em></strong>-Event-Handler. </p>
<h5 class="trigger">(Anmerkung)</h5>
<div>
In der Programmierung dreht sich sehr viel um Ereignisse, auf die der Programmierer dann eingehen kann. Jedes Betriebssystem (Windows, Linux, MAC, …) und jede Software mit einer <a href='http://de.wikipedia.org/wiki/Graphical_User_Interface' title='Erklärung zu GUI bei Wikipedia'>GUI</a> (Graphical User Interface &#8211;> grafische Benutzeroberfläche) wartet im Grunde auf ein Ereignis des Benutzers, um anschließend etwas „zu machen“ bzw. auszuführen. Dazu benutzt der Programmierer die schon angesprochenen Event-Handler, die meines Wissens in jeder Programmiersprache vorhanden sind (zumindest in den mir bekannten). Oder aber sogenannte <em>Listener</em>, die auf eine Action warten und dann etwas ausführen (ein sehr gutes Beispiel wäre in diesem Fall Java oder C++ &#8230;). Für Javascript verweise ich Sie auf die Seite von <a href='http://de.selfhtml.org/javascript/sprache/eventhandler.htm' title='Event-Handler'> Selfhtml.org</a>. Dort können Sie alle verfügbaren Event-Handler dieser Programmiersprache nachlesen und kennen lernen, was ich Ihnen an dieser Stelle wärmstens empfehlen möchte. Natürlich nur, sofern Sie daran interessiert sind.
</div>
<p>Dieses <em>onclick</em>-Ereigniss verbinden wir nun mit unserem Scroll Top Link:</p>
<pre>
<span style='color:#6699cc'> &lt;a href='#' id='top' title='Nach oben' <span style='color:red'>onclick='toTop()'</span>&gt; &lt;/a&gt; </span>
</pre>
<p>Wenn nun der Benutzer auf dieses Element „klickt“, dann wird durch das <strong>onclick</strong>-Ereignis die Funktion <em>toTop()</em> angesprochen/ aufgerufen, die wir nun programmieren werden.</p>
<p><strong>2. Scroll Top Funktion programmieren</strong><br />
In unserer Scroll Top Funktion müssen wir zunächst feststellen, ob sich unsere Webseite bereits am oberen Punkt oder aber weiter unten befindet. Um dies feststellen zu können, benutzen wir das <em>pageYOffset-Objekt</em>, welches die momentane vertikale Position unserer Seite beinhaltet. Wie immer kocht der Internet-Explorer der Redmonder sein eigenes Süppchen und dort lässt sich die vertikale Position mit <em>document.body.scrollTop</em> ermitteln.<br />
Nachdem nun anhand der aktuellen Position festgestellt werden kann, ob gescrollt werden muss/ kann, kommt nun die Javascript-Funktion <em>scrollBy()</em> zum Einsatz. </p>
<pre>
<span style="color:#999;">/* Javascript-Funktion scrollBy() mit Parameter */ </span>
scrollBy(0, -20);
</pre>
<p>Dieser Funktion können Parameter übergeben werden, welche die Seite um eine angegebene Anzahl von Pixeln scrollen lässt. Dabei spricht der erste Parameter die <em>x-Achse</em> und der zweite Parameter die <em>y-Achse</em> unserer Webseite an.<br />
Die x-Achse würde nun den Wert 0 erhalten, da wir ja nach oben scrollen wollen. Der y-Achse geben wir den Wert -20, so dass die Seite um 20 Pixel nach oben scrollt (sofern sie noch nicht oben angelangt ist).<br />
Jetzt werden Sie sich eventuell fragen, warum nur 20 Pixel … ich möchte doch ganz nach oben. Das ist richtig, aber wir möchten einen Scroll-Effekt erzielen und nicht sofort oben ankommen. Dazu ist es nötig, immer wieder 20 Pixel nach oben zu scrollen, was letztendlich den Eindruck erzeugt, dass die Seite langsam nach oben gleitet. Dazu ist es wiederum nötig, dass sich die Funktion solange selber aufruft, bis das obere Ende unserer Webseite erreicht wurde. Betrachten wir dazu den nötigen Quellcode:</p>
<pre>
/*&lt;![CDATA[*/
<span style='color:#999'>/* Unsere scrollTop-Funktion */</span>
function toTop() {
<span style='color:#999'>/* Variable für die aktuelle Position deklarieren */</span>
var seitenposition = 0;
<span style='color:#999'>/* Aktuelle Position ermitteln */</span>
if (typeof window.pageYOffset != 'undefined') { <span style='color:#999'>/* Für normale Browser <img src='http://einmal-am-tag.de/wp-includes/images/smilies/icon_wink.gif' alt="Icon Wink in " class='wp-smiley' />  ... */</span>
   seitenposition = window.pageYOffset;
}
else if (typeof document.compatMode != 'undefined'
&#038;&#038; document.compatMode != 'BackCompat'){ <span style='color:#999'>/* ... und für den IE */</span>
   seitenposition = document.documentElement.scrollTop;
}
else if (typeof document.body != 'undefined') {
   seitenposition = document.body.scrollTop;
}

<span style='color:#999'>/* Wenn sich die Seite nicht oben befindet (Seitenposition größer 0) … */</span>
if (seitenposition > 0) {
    scrollBy(0, -20); <span style='color:#999'>/* ... dann scrolle um 20 Pixel nach oben  … */</span>
    setTimeout("toTop()", 5); <span style='color:#999'>/* ... ‘warte’ kurz und rufe die Funktion wieder auf ! */</span>

 }
/*]]&gt;*/
</pre>
<p>Achten Sie bitte da drauf, dass vor <em>pageYOffset</em> das oberste Objekt der Objektfamilie, <em>&#8220;window&#8221;</em>,  mit aufgeführt wird. <a href='http://de.selfhtml.org/javascript/objekte/window.htm' title='Link zur selfhtml.org-Seite'>Selfhtml.org</a> sagt hier zwar aus, dass dieses Objekt auch weg gelassen werden darf, &#8230;</p>
<blockquote><p>
window oder self können auch weggelassen werden.
</p></blockquote>
<p>&#8230; ich kann Ihnen aber versichern, dass dies zum Beispiel auf den IE7 nicht zutrifft (Fehler: &#8216;pageYOffset&#8217; ist undefiniert).<br />
Die einzelnen Werte für den Scroll-Schritt und die Wartezeit können Sie Ihren Vorstellungen anpassen.<br />
Damit ist unsere selbstprogrammierte scrollTop-Funktion fertig und muss nur noch als Javascript-Datei in unsere Webseite integriert werden.<br />
<script type="text/javascript"><!--
google_ad_client = "pub-0193958220934844";
/* 468x60, Erstellt 05.06.09 */
google_ad_slot = "5369890293";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
Wirklich fertig? Wenn Sie sich Teil 1 und Teil 2 durchgelesen haben, dann müsste Ihnen aufgefallen sein, dass ein wichtiger Schritt noch fehlt.<br />
Genau! Um das „springen“ vor dem animierten „nach oben gleiten“ zu unterdrücken, müssen wir noch das <em>href</em>-Attribut unseres Scroll Top Links entfernen.<br />
Hierfür bedarf es einer weiteren Funktion:</p>
<pre>
<span style='color:#999'>/*  Nodes/Attribute entfernen */</span>
function removeAttribute() {
<span style='color:#999'>/* Wenn der ScrollTop Link vorhanden ist (HTML-Elementzugriff über id-Attribut) ... */</span>
  if(document.getElementById(<span style='color:red'>'top'</span>)){
      <span style='color:#999'>/* ... dann speichere den Rückgabewert (Element-Objekt) in der Variablen d ... */</span>
      var d = document.getElementById(<span style='color:red'>'top'</span>);
      <span style='color:#999'>/* ... schaue nach, ob das href-Attribute (bzw. das Attributknoten-Objekt) vorhanden ist ... */</span>
      if(d.getAttributeNode(<span style='color:red'>'href'</span>)){
           <span style='color:#999'>/*  ... und wenn ja, speichere wiederum den Rückgabewert (des Attributknoten-Objekts) in der Variablen href … */</span>
           var href = d.getAttributeNode(<span style='color:red'>'href'</span>);
           <span style='color:#999'>/* ... und entferne diesen Attributknoten von unserem Scroll Top Link (Element-Objekt) */</span>
           d.removeAttributeNode(href);
      }
   }
}
<span style='color:#999'>/* Diese Funktion wird automatisch aufgerufen, sobald die gesamte Seite vollständig geladen wurde (window.onload)! */</span>

window.onload=removeAttribute;
</pre>
<p>Durch diese Funktion wird über das DOM (Document Object Model) gezielt auf das href-Attribut unseres Scroll Top Links zugegriffen und dieses letztendlich entfernt ( &#8230; oder vielleicht besser gesagt, aus dem DOM-Baum ausgehängt. Denn im Quelltext ist es weiterhin  vorhanden &#8230;).<br />
Hier genauer auf das Document Object Model einzugehen, würde den Rahmen dieses Tutorials sprengen. </p>
<h5 class="trigger">(Ich möchte sofort eine kurze und einfache Erklärung)</h5>
<div>
Dennoch möchte ich Ihnen eine kurze und einfache Erklärung liefern <img src='http://einmal-am-tag.de/wp-includes/images/smilies/icon_wink.gif' alt="Icon Wink in " class='wp-smiley' />  .<br />
Betrachten Sie Ihre Webseite als einen Baum mit Stamm, den Ästen, den Blättern …!<br />
Der Baum als Gesamtbild entspricht dabei dem obersten Objekt, dem <em>window</em> (das gesamte Browserfenster). Innerhalb unserer removeAttribut-Funktion könnte man das <em>window</em>-Objekt noch mit aufführen:</p>
<pre>
      var d = <span style='color:red'>window.</span>document.getElementById('scrolltop');
</pre>
<p>Dies ist aber an dieser Stelle nicht notwendig und kann weggelassen werden, da hier direkt das <em>document</em>-Objekt folgt. Dieses Ausgangsobjekt unseres Element-Baumes entspricht dem Stamm (Inhalt des Browserfensters), über den alle folgenden (HTML-) Elemente erreicht werden können.<br />
Die einzelnen Elemente, Attribute und Eigenschaften einer Webseite können nun über entsprechende Funktionen (Methoden) angesprochen und verändert werden. Auf unser Baum-Beispiel bezogen würde das folgendermaßen aussehen:<br />
Über unser Gesamtbild des Baumes (window) kann über den Stamm (document) und über die Äste (HTML-Elemente wie a, p, div, span, …) auf deren Blätter (href, title, alt, style, …) zugegriffen werden. Hierzu existieren verschieden Wege, um dies zu bewerkstelligen. Es kann über den Namen &#8230;</p>
<pre>
 ... name=’scrolltop’ ...
... document.getElementsByName(’scrolltop’)[0] ...
</pre>
<p> &#8230; die ID &#8230; </p>
<pre>
... id=’scrolltop’ ...
... document.getElementByID(’scrolltop’) ...
</pre>
<p>&#8230; oder eine Klasse &#8230;</p>
<pre>
... class=’scrolltop’ ...
... document.getElementsByClassName(’scrolltop’) ...
</pre>
<p>&#8230; in Verbindung mit dem so genannten Knotenpunkt &#8230;</p>
<pre>
... getAttributeNode('href') ...
</pre>
<p>&#8230; ein bestimmter Teil eines Elementes angesprochen werden.<br />
Dazu „hangeln“ Sie sich praktisch von oben nach unten durch. Dafür ist es natürlich notwendig, die bereitstehenden Funktionen (Methoden) zu kennen. Sollte Ihr Interesse geweckt sein, dann finden Sie unter <a href='http://de.selfhtml.org/javascript/index.htm' title='Javascript/DOM'> Javascript/DOM</a> umfangreiche Informationen.
</div>
<p>Aber anstatt das <em>href</em>-Attribut zu entfernen, gibt es noch eine einfachere Lösung. Und zwar indem wir unserem Scroll Top Link nach dem Aufruf der toTop-Funktion ein <em>return false;</em> anhängen.</p>
<pre>
<span style='color:#6699cc'> &lt;a href='#' id='top' title='Nach oben' <span style='color:red'>onclick='toTop(); return false';</span>&gt; &lt;/a&gt; </span>
</pre>
<p>Dadurch wird das href-Attribut nicht mehr ausgeführt.<br />
Es reicht also aus, unsere toTop-Funktion, wie schon in <a href=“http://einmal-am-tag.de/2009-05/scroll-top-link-teil1/“ title=“Scroll Top Link Teil1“> Scroll Top Link Teil1</a> beschrieben wurde, entweder direkt (<em>CDATA</em> nicht vergessen) oder als externe Javascript-Datei in den Header unserer Webseite einzufügen.<br />
Nun haben sie drei Möglichkeiten, Ihre Webseite um einen Scroll Top Link zu erweitern.<br />
Ich hoffe, dass Sie mir auf Grund der vielen Umwege nicht böse sind. Aber so erhalten Sie einen tieferen Einblick in das Thema.<br />
Falls Ihnen die Tutorials Spaß bereitet haben und verständlich waren, würde ich mich über ein kurzes Feedback freuen.</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-06/scroll-top-link-teil3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Scroll Top Link (Teil 2)</title>
		<link>http://einmal-am-tag.de/2009-05/scroll-top-link-teil2/</link>
		<comments>http://einmal-am-tag.de/2009-05/scroll-top-link-teil2/#comments</comments>
		<pubDate>Sat, 30 May 2009 19:22:07 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Scroll Top]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=848</guid>
		<description><![CDATA[

Wie angekündigt nun der Scroll Top Link mit der jQuery.scrollTo-Funktion von Ariel Flesler (&#8230; hier noch mal die Demo-Seite) .
Hierzu laden wir uns zunächst die neueste Version (momentan scrollTo-1.4.2) besagter scrollTop-Funktion herunter.
Dann entpacken wir die gezippte Datei in einen beliebigen vorher erstellten Order auf unserem PC und schieben die nun verfügbare Javascript-Datei auf unseren Webspace. [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<h4>Wie angekündigt nun der Scroll Top Link mit der jQuery.scrollTo-Funktion von <a href='http://flesler.blogspot.com/' title='Homepage von Ariel Flesler'>Ariel Flesler</a> (&#8230; hier noch mal die <a href='http://demos.flesler.com/jquery/scrollTo/' title='jQuery.scrollTo-Demo'>Demo-Seite</a>) .</h4>
<p>Hierzu laden wir uns zunächst die neueste Version (momentan <a href='http://flesler-plugins.googlecode.com/files/jquery.scrollTo-1.4.2.zip' title='scrollTo-Version 1.4.2 herunterladen'>scrollTo-1.4.2</a>) besagter scrollTop-Funktion herunter.<br />
Dann entpacken wir die gezippte Datei in einen beliebigen vorher erstellten Order auf unserem PC und schieben die nun verfügbare Javascript-Datei auf unseren Webspace. Bei lokal installiertem Webserver in das entsprechende Verzeichnis auf unserem Rechner … zum Beispiel beim xampp in <em>“c:/xampp/<b>htdocs</b>/&#8230;/scrollto-1.4.2-min.js“</em>. <span id="more-848"></span><br />
Anschließend folgt fast die gleiche Prozedur, die schon im ersten Teil beschrieben wurde. Unter der bereits eingefügten <em>jquery.js</em> im Head-Bereich Ihrer Webseite binden wir zunächst die soeben heruntergeladene <em>scrollTo.js</em> ein.</p>
<pre>
&lt;html&gt;
<span style='color:red'>&lt;head&gt;</span>
&lt;title&gt;Scroll Top Link&lt;/title&gt;
<span style="color:#999">&lt;!-- jquery.js --&gt;</span>
<span style='color:#6699cc'>&lt;script src=‘http://code.jquery.com/jquery-latest.js‘ type=‘text/javascript‘&gt;&lt;/script></span>

<span style="color:#999">&lt;!-- ... und die scrollTo.js --&gt;</span>
<span style='color:#6699cc'>&lt;script src=‘http://ihre_domain.de/wp-content/themes/ihr_theme/js/jquery.scrollTo-1.4.2-min.js‘ type=‘text/javascript‘&gt;&lt;/script></span>
<span style='color:red'>&lt;/head&gt;</span>
&lt;body&gt;
…
</pre>
<p>Anschließend öffnen wir wieder einen Editor unserer Wahl und erstellen eine Datei mit folgendem Inhalt:</p>
<pre>
<span style='color:#6699cc'>/*&lt;![CDATA[*/
<span style='color:#999'>/* ###### Unsere Scroll Top Funktion ###### */</span>
<span style='color:#999'>/* Sobald die Webseite fertig geladen wurde ... */</span>
$(document).ready(<span style='color:#003300'>function</span>(){
  <span style='color:#999'> /* ... und der Scroll Top Link angeklickt wird ... */</span>
   $(<span style='color:red'>'a#top'</span>).click(<span style="color:#003300">function</span>(event){
       <span style='color:#999'> /* ... unterdrücke die normale Funktion des a-Tags  ... */</span>
        event.preventDefault();
       <span style="color:#999"> /* ... und scrolle nach oben! */</span>
        $.scrollTo( 0, 4000);
       <span style="color:#999"> /* ... hier wird jetzt anstatt der animate-Funktion
            aus dem ersten Teil die scrollTo-Funktion eingefügt */</span>
   });
});
/*]]&gt;*/</span>
</pre>
<p>Diese speichern Sie dann wieder, wie in Teil 1 beschrieben,  unter einem beliebigen Namen ab und ermöglichen den Zugriff, in dem Sie diese wiederum in Head-Bereich einbinden. </p>
<h5 class="trigger">(Hinweis)</h5>
<div>
Da ich davon ausgehe, dass Sie in Zukunft noch weitere Javascript-Funktionen verwenden werden, erstellen Sie sich einfache eine <em>main.js</em>, in der Sie alle weiteren zukünftigen Funktionen zusammenfassen:</p>
<pre>
<span style="color:#999"> /* ### MEINE JAVASCRIPT FUNKTIONEN ### */</span>
<span style="color:#999"> /* --- SCROLLTO --- */</span>
$(document).ready(<span style='color:#003300'>function</span>(){
   $(<span style='color:red'>'a#top'</span>).click(<span style="color:#003300">function</span>(event){
        event.preventDefault();
        $.scrollTo( 0, 4000);
   });
});
<span style="color:#999"> /* --- SCROLLTO ENDE --- */</span>

<span style="color:#999"> /* --- WEITERE FUNKTION --- */</span>
…
<span style="color:#999"> /* --- WEITERE FUNKTION ENDE --- */</span>
</pre>
<p>Diese wird lediglich einmal angelegt, beinhaltet all Ihre Funktionen, ist gut überschaubar und kann beliebig erweitert werden!</p>
</div>
<p>Wenn Sie den ersten Teil gelesen haben, dann werden Sie spätestens jetzt gemerkt haben, dass kein großer Unterschied zu diesem Scroll Top Link besteht. Nur dass bei diesem noch eine weitere Javascript-Datei herunter geladen und eingebunden werden muss.<br />
Allerdings bietet die hier eingebundene <em>scrollTo.js</em> noch weitere Möglichkeiten zum animierten Scrollen, wie auf der <a href='http://demos.flesler.com/jquery/scrollTo/' title='jQuery.scrollTo-Demo'>Demo-Seite</a> ersichtlich ist (hierfür ist die vollständige 8 KB-Version nötig).<br />
<script type="text/javascript"><!--
google_ad_client = "pub-0193958220934844";
/* 468x15, Erstellt 07.06.09 */
google_ad_slot = "1534332581";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
Aber so schön diese auch anzusehen sind &#8230; mir ist der Sinn noch nicht so ganz klar geworden ist. Ein Einsatz wäre für mich eventuell bei einer Bildergallerie nützlich, um über ein Menü ein bestimmtes Bild anzusteuern.<br />
Ein Unterschied besteht aber: Diese Scroll-Funktion passt sich der Seitenlänge an, wie ich beobachten konnte. Bei kurzen Seiten mit wenig Text wird langsamer gescrollt als bei längeren Seiten mit mehr Textinhalt, obwohl wie bei der animate-Funktion die Scroll-Geschwindigkeit festgelegt wurde.<br />
Ich setze auf dieser Seite die hier vorgestellte Version ein, allerdings lässt sich die <em>animate</em>-Funktion mindestens genauso gut anpassen. Hierzu müssten lediglich einzelne animate-Funktionen gekoppelt werden. Die erste scrollt schnell bis zu einer vorgegebenen Stelle, zum Beispiel 300 Pixel unter dem oberen Rand. Anschließend folgt eine weitere animate-Funktion und scrollt etwas langsamer bis 200 Pixel unter dem oberen Rand usw.!</p>
<pre>
<span style="color:#999"> /* Angepasstes Scrollen */</span>
...
 $(<span style='color:red'>'html, body'</span>) .animate({scrollTop:300}, 2000).animate({scrollTop:200}, 2300).animate({scrollTop:100}, 2600).animate({scrollTop:0}, 3000);
...
</pre>
<p>Je näher ich mir das momentan anschaue, umso mehr gelange ich zu der Einsicht, nur noch die animate-Funktion einzusetzen und meinen Bedürfnissen anzupassen (wie dies bereits beim Videomodus geschehen ist).<br />
Entscheiden Sie für sich selber, welche Möglichkeit Sie nutzen möchten!</p>
<p>Im folgenden dritten Teil zeige ich noch eine komplett eigenständig programmierte Version… ohne <em>jquery</em> und ohne die hier vorgestellte <em>scrollTop.js</em>!<br />
Da ich persönlich noch weitere auf jquery basierende Funktionen auf meiner Seite implementiert habe, kommt dies für mich nicht in Betracht. Aber ich denke, dass der eine oder andere, der nur wenig Javascript auf seiner Seite einsetzt, seinen Nutzen daraus ziehen kann. Zudem lassen sich so einige KB sparen …!</p>
<p><a href='http://einmal-am-tag.de/2009-06/scroll-top-link-teil3/' title='ScrollTop Link (Teil 3)'>Scroll Top Link (Teil 3)</a></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-05/scroll-top-link-teil2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scroll Top Link (Teil 1)</title>
		<link>http://einmal-am-tag.de/2009-05/scroll-top-link-teil1/</link>
		<comments>http://einmal-am-tag.de/2009-05/scroll-top-link-teil1/#comments</comments>
		<pubDate>Tue, 26 May 2009 10:32:37 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Scroll Top]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=662</guid>
		<description><![CDATA[

Nachdem wir nun in der Einleitung zu diesem Tutorial das jquery-Framework eingebunden haben, erstellen wir als nächstes eine eigene Scroll Top Funktion, die auf der jquery-Funktion animate aufbaut.
Dazu öffnen wir zunächst eine neue Datei in einem Editor (zum Beispiel  Notepad++) und kopieren folgenden Quellcode hinein:

/*&#60;![CDATA[*/
/* ###### Unsere Scroll Top Funktion ###### */

/* Sobald die [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<h4>Nachdem wir nun in der <a href="http://einmal-am-tag.de/2009-05/javascript-spezial-scroll-top-link/">Einleitung</a> zu diesem Tutorial das jquery-Framework eingebunden haben, erstellen wir als nächstes eine eigene Scroll Top Funktion, die auf der jquery-Funktion <strong>animate</strong> aufbaut.</h4>
<p>Dazu öffnen wir zunächst eine neue Datei in einem Editor (zum Beispiel  <a href="http://notepad-plus.sourceforge.net/de/download.php" title="Notepad++ Downloadseite">Notepad++</a>) und kopieren folgenden Quellcode hinein:</p>
<pre>
<span style='color:#6699cc'>/*&lt;![CDATA[*/
<span style='color:#999'>/* ###### Unsere Scroll Top Funktion ###### */</span>

<span style='color:#999'>/* Sobald die Webseite fertig geladen wurde ... */</span>
$(document).ready(<span style='color:#003300'>function</span>(){
  <span style='color:#999'> /* ... und der Scroll Top Link angeklickt wird ... */</span>
   $(<span style='color:red'>'a#top'</span>).click(<span style="color:#003300">function</span>(){
       <span style='color:#999'> /* ... entferne das href-Attribut ... */</span>
        $(<span style='color:red'>this</span>).removeAttr('href');
       <span style="color:#999"> /* ... und scrolle nach oben! */</span>
        $(<span style='color:red'>'html, body'</span>).animate({scrollTop:0},'slow')
   });
});
/*]]&gt;*/</span>
</pre>
<p>Der Quelltext dürfte sich durch die eingefügten Kommentare selbst erklären. <span id="more-662"></span><br />
Das <em>href</em>-Attribut wird durch die <em>removeAttr</em>-Funktion entfernt, da die Seite sonst beim Betätigen des Scroll Top Links erst zum Top der Webseite <em>springen</em> würde, um dann anschließend (wieder unten beginnend) animiert nach oben zu scrollen. Sollte Javascript deaktiviert sein, wird das <em>href</em>-Attribut nicht entfernt und der Scroll Top Link funktioniert ebenfalls (ohne Animation) &#8230; sehr schön!</p>
<p>Anstatt das <em>href</em>-Attribut zu entfernen, kann man auch ein Klick-Ereignis anhängen. </p>
<p>Mit <a href="http://msdn.microsoft.com/de-de/library/bb397489.aspx" title="Infoseite zu preventDefault()"><em>event.preventDefault()</em></a> verhindert man die standardmäßige DOM-Ereignisaktion. Bei einem <em>&lt;a&gt;</em>-Tag mit <em>href</em> wäre das der normale Link Effekt, also das Weiterleiten zu einer anderen Seite.</p>
<pre>
<span style='color:#6699cc'>/*&lt;![CDATA[*/
<span style='color:#999'>/* ###### Unsere Scroll Top Funktion ###### */</span>
<span style='color:#999'>/* Sobald die Webseite fertig geladen wurde ... */</span>
$(document).ready(<span style='color:#003300'>function</span>(){
  <span style='color:#999'> /* ... und der Scroll Top Link angeklickt wird ... */</span>
   $(<span style='color:red'>'a#top'</span>).click(<span style="color:#003300">function</span>(event){
       <span style='color:#999'> /* ... unterdrücke die normale Funktion des a-Tags  ... */</span>
        event.preventDefault();
       <span style="color:#999"> /* ... und scrolle nach oben! */</span>
        $(<span style='color:red'>'html, body'</span>).animate({scrollTop:0},'slow')
   });
});
/*]]&gt;*/</span>
</pre>
<p>Sie sehen, in der Programmierung <cite>führen viele Wege nach Rom</cite>.</p>
<p>Übrigens, den Wert <em>&#8217;slow&#8217;</em> der <em>animate</em>-Funktion können Sie neben <em>&#8216;middle&#8217;</em> oder <em>&#8216;fast&#8217;</em> auch durch einen Zahlenwert ohne Hochkomma (Millisekunden, z.B. 5000) ersetzen und so die Scroll-Geschwindkeit Ihren Vorstellungen anpassen.</p>
<p>Diese Datei speichern Sie nun zum Beispiel als <em>scrolltop.js</em> ab und fügen diese ebenfalls in den Header Ihrer Seite <strong>unter</strong> der <em>jquery.js</em> ein (&#8230;).<br />
Es besteht auch die Möglichkeit, den Quelltext direkt in den <em>Head</em>-Bereich einzufügen. </p>
<pre>
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Scroll Top Link&lt;/title&gt;
<span style='color:#999'>&lt;!-- jquery  --&gt;</span>
&lt;script src='http://code.jquery.com/jquery-latest.js' type='text/javascript'&gt;&lt;/script&gt;
<span style='color:#999'>&lt;!-- ScrollTop-Funktion --&gt;</span>
&lt;script type='text/javascript'&gt;
<span style='color:#6699cc'>/*&lt;![CDATA[*/
$(document).ready(<span style='color:#003300'>function</span>(){
   $(<span style='color:red'>'a#top'</span>).click(<span style="color:#003300">function</span>(){
        $(this).removeAttr('href');
        $(<span style='color:red'>'html, body'</span>').animate({scrollTop:0},'slow')
   });
});
/*]]&gt;*/</span>
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
...
</pre>
<p>Das kann jedoch schnell unübersichtlich werden. Daher ist es anzuraten, alle Javascript-Dateien in einem eigenen Ordner unterzubringen.<br />
Beachten Sie hierbei bitte, den Quellcode mit <a href="http://de.wikipedia.org/wiki/CDATA" title="Informationen zu CDATA auf Wikipedia">CDATA</a> zu verpacken. Dem <a href="http://validator.w3.org/" title="Link zum W3C Markup Validation Service">Validator</a> wird dadurch mitgeteilt, dass es sich im CDATA-Tag um Text (Character Data) handelt, welcher nicht als XHTML anzusehen ist. Ältere Browser verstehen diesen Tag nicht, daher wird er einfach auskommentiert, was für den Validator wiederum keine Bedeutung hat.</p>
<p>Damit ist die erste Möglichkeit, einen animierten Scroll Top Link in die eigene Webseite einzufügen, abgeschlossen.<br />
Noch mal die einzelnen Schritte:</p>
<ul>
<li>Den Scroll Top Link wie in der <a href="http://einmal-am-tag.de/2009-05/javascript-spezial-scroll-top-link#scroll_top_link">Einleitung</a> im Fußbereich oder unter dem Inhalt platzieren</li>
<li>Das jquery-Framework im Header der Webseite integrieren</li>
<li>Unter vorigem Framework die erstellte ScrollTop-Funktion einfügen</li>
</ul>
<p>Zum Schluss fügen Sie in Ihre CSS-Datei noch folgende Formatierung für unseren Scroll Top Link ein:</p>
<pre>
#top {
&nbsp;&nbsp;cursor:pointer;
&nbsp;&nbsp;margin:0;
&nbsp;&nbsp;padding:3px;
&nbsp;&nbsp;position:absolute;
&nbsp;&nbsp;bottom:0;
&nbsp;&nbsp;left:310px;
        /*oder 'right' , je nachdem, was Sie bevorzugen*/
 }
</pre>
<p>Die Werte für <em>left</em> oder <em>right</em> können Sie Ihren Bedürfnissen anpassen. Probieren Sie einfach selber etwas herum.<br />
An dieser Stelle möchte ich noch erwähnen, das die <em>animate</em>-Funktion sehr viel mächtiger ist und es ermöglich, mehrere Eigenschaften auf einmal zu ändern (Sichtbarkeit, Rahmen, Farbe &#8230;). Der Bereich für die <a class="einstellungen" title="Einstellungen">Einstellungen</a> oder der <a class="videomodus">Video-Modus</a> auf dieser Seite sind ein gutes Beispiel dafür (nur verfügbar im IE8, Firefox und Opera bei aktiviertem Javascript!).</p>
<h5 class="trigger">(Bei mir funktioniert es nicht!)</h5>
<div>
Der Quellcode wurde natürlich getestet. Wenn es bei Ihnen nicht sofort klappen sollte (was bei mir, wie in der Programmierung üblich, ebenfalls oft der Fall ist), soll Ihnen diese Liste als Hilfe dienen:
<ul>
<li>Ist Javascript im Browser aktiviert? (z.B. im Firefox oben unter &#8220;Extras&#8221; -> &#8220;Einstellungen&#8221; -> &#8220;Javascript aktivieren&#8221;)</li>
<li>Ist das jquery-Framework ordnungsgemäß im Head-Bereich der Seite eingebunden? (Stimmt der Pfad, alle Hochkomma gesetzt, alle öffnenden und schließenden Tags vorhanden)</li>
<li>Wurde wie vorher jquery unsere scrollTop-Funktion ordnungsgemäß und <strong>unter</strong> jquery eingebunden? Gehen Sie noch mal den Quellcode durch, wurden alle Tags oder ID-Namen innerhalb der runden Klammern in Hochkomma gesetzt (abgesehen von &#8216;this&#8217;); sind alle schließenden Semikolon vorhanden etc.)</li>
<li>Stimmt die ID des Scroll Top Links mit der ID des Klick-Events in unserer Funktion überein?!</li>
<li>Verwenden Sie zusätzlich zu jquery noch ein weiteres Framework (z.B. Mootools)? Wenn ja, dann ersetzen Sie alle &#8216;$&#8217;-Zeichen durch &#8216;jQuery&#8217; für den noConflict &#8211; Mode oder fügen Sie     <a href="http://docs.jquery.com/Using_jQuery_with_Other_Libraries" title="noConflict-Funktion">&#8216;jQuery.noConflict()&#8217;</a> direkt über &#8216;$(document).ready(function() &#8230;&#8217; im Quellcode ein. Die verschiedenen Frameworks verwenden teilweise ebenfalls den &#8216;$&#8217;-Variablenname und behindern sich gegenseitig</li>
<li>Löschen Sie zwischendurch den Browser-Cache (z.B. im Firefox unter &#8220;Extras&#8221; -> &#8220;Private Daten löschen &#8230;&#8221; dort jedoch den Haken bei Chronik entfernen, sonst verlieren Sie die zuletzt besuchten Seiten)</li>
</ul>
<p>
Fast immer sind es <strong>Kleinigkeiten</strong>, wenn etwas nicht funktioniert: irgendwo fehlt ein Hochkomma oder Semikolon, eine falsche Klammer (z.B. rund anstatt geschweifte), kein öffnender oder schließender Tag, eine falsche ID &#8230;
</p>
</div>
<p><a href="http://einmal-am-tag.de/2009-05/scroll-top-link-teil2/" title="Scroll Top Link Teil 2">Scroll Top Link (Teil 2)</a></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-05/scroll-top-link-teil1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scroll Top Link (Einleitung)</title>
		<link>http://einmal-am-tag.de/2009-05/scroll-top-link-einleitung/</link>
		<comments>http://einmal-am-tag.de/2009-05/scroll-top-link-einleitung/#comments</comments>
		<pubDate>Mon, 25 May 2009 23:15:09 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Scroll Top]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=623</guid>
		<description><![CDATA[

In diesem Tutorial möchte ich erklären, wie ein Scroll Top Link in die Webseite integriert werden kann.
Ein Scroll Top Link ermöglich es den Besuchern, nachdem sie die Seite fertig gelesen haben, bequem an den Seitenanfang zurück zu gelangen, ohne den Scrollbalken (oder die Nach-Oben-Taste) benutzen zu müssen. Dies gehört zum Usability und sollte auf keiner [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<h4>In diesem Tutorial möchte ich erklären, wie ein <strong>Scroll Top Link</strong> in die Webseite integriert werden kann.</h4>
<p>Ein Scroll Top Link ermöglich es den Besuchern, nachdem sie die Seite fertig gelesen haben, bequem an den Seitenanfang zurück zu gelangen, ohne den Scrollbalken (oder die Nach-Oben-Taste) benutzen zu müssen. Dies gehört zum Usability und sollte auf keiner Seite fehlen, die viel Content und somit lange Seiten enthält. Dadurch wird dem Benutzer das <em>Durchforsten</em> der Webseite erleichert.</p>
<p>Dies kann auf 2 Arten realisiert werden. Bei der ersten <em>springt</em> die Seite direkt zum Anfang (Top) der Seite. Bei der zweiten Variante erfolgt dies animiert durch Javascript, dabei scrollt bzw. gleitet die Seite bis nach oben. Letzteres sieht elegant (smooth) aus und wird ihnen gefallen. Es erfordert jedoch aktiviertes Javascript im Browser.<span id="more-623"></span><br />
Der Scroll Top Link in diesem Tutorial beinhaltet beide Möglichkeiten, funktioniert also mit (animiert ) wie auch ohne Javascript. Javascript-Funtionalitäten sollten stets eine Alternative bieten. Vor allem dann, wenn grundsätzliche Dinge wie zum Beispiel das Menü damit realisiert werden.</p>
<p>Da sich der Scroll-Top Link im unteren Bereich der Webseite befindet, bietet es sich an, diesen im <em><acronym title=“Fussbereich“>Footer</acronym></em> zu platzieren. Unter Wordpress wäre dieser in der (/wp-content/theme/dein_theme/) <em>footer.php</em> zu finden. Da in meiner Seite der Footer sehr schmall ist, habe ich den Scroll Top Link in der <em>index.php</em> nach den Loop gesetzt (&#8230; unter den Textbereich). Es besteht aber auch die Möglichkeit, den Link ständig im Blickwinkel (position:fixed) anzuzeigen. Dieser kann zum Beispiel automatisch eingeblendet werden, sobald der Benutzer beginnt nach unten zu scrollen. </p>
<p>Ob man sich für ersteres oder letzteres entscheidet, wird letztendlich durch die Zuweisungen im (Cascading) Stylesheet definiert. Dafür wird dem Link eine <em>ID</em> zugewiesen, über die er angesprochen werden kann.<br />
<a name="scroll_top_link"></a></p>
<pre>
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Scroll Top Link&lt;/title&gt;
 &lt;/head&gt;
&lt;body&gt;
&lt;div <span style='color:red'>id=“container“ &gt;</span>
	&lt;div <span style='color:red'>id=“header“</span>&gt;...&lt;/div&gt;
	&lt;div <span style='color:red'>id=“navi“</span>&gt;...&lt;/div &gt;
	&lt;div <span style='color:red'>id=“content“</span>&gt;...&lt;/div &gt;
	&lt;div <span style='color:red'>id=“footer“</span>&gt;
       <span style='color:#6699cc'> &lt;a href=“#“ <span style='color:red'>id=“top“</span> title=“Nach oben“ &gt; &lt;/a&gt; </span>
	&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Der so eingefügte Scroll Top Link wäre in dieser Variante bereits voll funktionsfähig. Es fehlt lediglich noch der Text (Nach oben) oder aber eine Grafik. Ein Beispiel dafür sieht man unten auf dieser Seite.<br />
Im Internet finden sich teilweise Anleitungen, bei denen ein <em>Anker</em> im Header der Seite platziert wird:</p>
<pre>
&lt;a name=“top“&gt; &lt;/a&gt;
</pre>
<p>Dieser wird dann über den Scroll Top Link angesprochen/ aufgerufen, um nach oben zu gelangen:</p>
<pre>
… &lt;a href=“#top“ title=“Nach oben“ &gt; &lt;/a&gt; …
</pre>
<p>Oder der <em>Header</em> wird über die <em>ID</em> angeprochen:</p>
<pre>
… &lt;a href=“#header“ title=“Nach oben“ &gt; &lt;/a&gt;  …
</pre>
<p>Eine weitere Lösung implementiert Javascript direkt im <em>href</em>-Attribut des <em>a</em>-Tags:</p>
<pre>
… &lt;a href=“javascript:scroll(0,0)“ title=“Nach oben“ &gt; &lt;/a&gt; …
</pre>
<p>Welche Möglichkeit eingesetzt wird ist Geschmacksache. Die hier gezeigte Variante über <em>href=“#“</em> ist wohl die einfachste. Letztere funktioniert nur bei aktiviertem Javascript und sollte vermieden werden.</p>
<p>Kommen wir nun nun zu unserer animierten Scroll Top Funktion.<br />
Um diese zu realisieren, besteht die Möglichkeit, selbstständig etwas in Javascript zu programmieren oder aber ein <strong>Javascript-Framework</strong> einzusetzen. Neben <strong>Mootools</strong>, <strong>Script.aculo.us</strong>, <strong>Prototype</strong>, <strong>Dojo</strong> und anderen verweise ich hier auf <strong>jquery</strong>. </p>
<p>Dieses schlanke Framework hat sich etabliert und bietet eine große Anzahl unterschiedlichster Funktionen, um eine Webseite ansprechend gestalten zu können.<br />
Um jquery nutzen zu können, muss das Framework zunächst in die Webseite integriert werden. Ich werde dies Schritt für Schritt erklären, damit auch Nutzer mit weniger oder keinen Kenntnissen zum Ziel gelangen.<br />
Für den einfachen Weg binden Sie jquery direkt über die Herstellerseite von jquery <strong>oder</strong> über googleapis  im Header Ihrer Seite ein:</p>
<pre>
&lt;html&gt;
<span style='color:red'>&lt;head&gt;</span>
&lt;title&gt;Scroll Top Link&lt;/title&gt;
<span style="color:#999">&lt;!-- jquery Herstellerseite --&gt;</span>
<span style='color:#6699cc'>&lt;script src=‘http://code.jquery.com/jquery-latest.js‘ type=‘text/javascript‘&gt;&lt;/script></span>

<span style="color:#999">&lt;!-- ... oder googleapis --&gt;</span>
<span style='color:#6699cc'>&lt;script src=‘http://ajax.googleapis.com/ajax/lips/jquery/1.3.2/jquery.min.js‘ type=‘text/javascript‘&gt;&lt;/script></span>
<span style='color:red'>&lt;/head&gt;</span>
&lt;body&gt;
…
</pre>
<p>Für welche Quelle man sich dabei entscheidet ist <em>wurscht</em>. Ich bevorzuge die dritte Möglichkeit, in dem man sich die neueste <a href="http://docs.jquery.com/Downloading_jQuery" title="Neueste Version von jquery runterladen">jquery-Version</a> von der Webseite des Herstellers herunterladet und in einem Ordner auf seinem eigenen Webspace entpackt. Diese bindet man anschließend wie eine von den beiden erstgenannten Möglichkeiten im Header der eigenen Webseite ein:</p>
<pre>
<span style="color:#999">&lt;!-- Lokal vorliegende jquery-Version einbinden --&gt;</span>
<span style='color:#6699cc'>&lt;script src=‘http://meinedomain.de/pfad_zum_ordner/jquery-min.js‘ type=‘text/javascript‘&gt;&lt;/script></span>
</pre>
<p>So fühle ich mich einfach wohler, zumal die Dateigröße von jquery nicht ins Gewicht fällt. Für Unerfahrene ist die Einbindung über eine der beiden erstgenannten Wege eventuell empfehlenswerter, da unproblematischer.<br />
Nachdem das Framework nun verfügbar ist, stehen uns mehrere Möglichkeiten für das ScrollTop-Ereignis zur Verfügung</p>
<ul>
<li> Wir verwenden die schon vorhandene <em>Animate</em>-Funktion in Verbindung mit der <em>scrollTop</em>-Eigenschaft und schreiben uns eine eigene Funktion</li>
<li> Wir verwenden <a href="http://flesler.blogspot.com/" title="jQuery.ScrollTo runterladen">jQuery.ScrollTo</a> von Ariel Flesler (<a href="http://demos.flesler.com/jquery/scrollTo/" title="jquery.ScrollTo Demo">Demo</a>)</li>
<li> Wir verwenden kein Framework und programmieren uns unsere eigene ScrollTop-Funktion</li>
</ul>
<p>Ich werde auf alle drei Möglichkeiten eingehen &#8230; allerdings zeigt die Uhr gerade 01:11 Uhr an und es wird Zeit ins Bett zu gehen. Ich wünsche eine gute Nacht, morgen geht es weiter!</p>
<p><a href="http://einmal-am-tag.de/2009-05/scroll-top-link-teil1/" title="Scroll Top Link Teil 1">Scroll Top Link (Teil 1)</a></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-05/scroll-top-link-einleitung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Plugins</title>
		<link>http://einmal-am-tag.de/2009-05/wordpress-plugins/</link>
		<comments>http://einmal-am-tag.de/2009-05/wordpress-plugins/#comments</comments>
		<pubDate>Tue, 19 May 2009 14:09:52 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[Liste]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de/?p=248</guid>
		<description><![CDATA[

In Bearbeitung &#8230;
Neben Themes und Widgets sind Plug-Ins wohl die beliebtesten Features eines jeden WordPress-Nutzers. Bei einem Plug-In oder Plugin handelt es ich um ein (meist) kleines Zusatzprogramm, das sich recht einfach in WordPress installieren lässt (englisch: plug in » schließen Sie an).
An dieser Stelle finden Sie eine Liste an ausgewählten Plug-In für WordPress, welche [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>In Bearbeitung &#8230;</p>
<h4>Neben <strong>Themes</strong> und <strong>Widgets</strong> sind <strong>Plug-Ins</strong> wohl die beliebtesten Features eines jeden WordPress-Nutzers. Bei einem Plug-In oder <em>Plugin</em> handelt es ich um ein (meist) kleines Zusatzprogramm, das sich recht einfach in WordPress installieren lässt (englisch: plug in » <em>schließen Sie an</em>).</h4>
<p>An dieser Stelle finden Sie eine Liste an <span style="text-decoration: underline;">ausgewählten</span> Plug-In für WordPress, welche nach und nach ergänzt wird und Ihnen eine Vorstellung geben soll, was Programmierer sich alles einfallen lassen, um Ihre WordPress-Seite noch interessanter, sicherer und benutzbarer zu gestalten.<span id="more-248"></span><br />
Eventuell haben Sie ein Plug-In gefunden oder gar programmiert, dass Ihrer Meinung nach einen Mehrwert für die WordPress-Gemeinde bietet und in diese Liste aufgenommen werde sollte? Dann würde ich mich freuen, wenn Sie mir eine kurze Nachricht mit Beschreibung und einem Link zu diesem Plug-In senden würden. Dies gilt natürlich auch für den Fall, dass ein hier vorgestelltes Plugin Probleme bereitet.</p>
<p>Vielen Dank!<br />
<script type="text/javascript"><!--
google_ad_client = "pub-0193958220934844";
/* 468x60, Erstellt 05.06.09 */
google_ad_slot = "5369890293";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h5 class="trigger">(Anleitung für Plugin-Installation?)</h5>
<div>Das jeweilige Plug-In muss in der Regel lediglich von der Seite des Anbieters (Programmierers) oder von der WordPress-Seite in einen beliebigen Ordner auf Ihrer Festplatte <acronym title="... heruntergeladen">gedownloaded</acronym> werden.<br />
Anschließend <acronym title="entpacken/ dekomprimieren">entzippen</acronym> Sie die Datei, die zum schnelleren Download komprimiert wurde, im selben Ordner. Dazu muss ein Entpackungs-Programm wie z.B. <a title="Downloadseite von winzip" href="http://www.winzip.de/downse.htm">winzip</a> oder <a title="Downloadseite von winrar" href="http://www.winrar.de/download.php">winrar</a> auf Ihrem Rechner installiert sein (was meistens der Fall ist). Betätigen Sie die rechte Maustaste über dieser Datei und wählen Sie aus dem erscheinenden Kontext-Menü die Option „Hier entpacken“. Nun wird die soeben gedownloadete Plug-In-Datei entpackt und es erscheint ein neuer Ordner.</p>
<p><a title="Im Kontextmenü »Hier entpacken« wählen ..." rel="lightbox-plugin" href="/wp-content/uploads/2009/05/kontextmenu.png"><img src="/wp-content/uploads/2009/05/kontextmenu.png" alt="Kontextmenu in " width="150" height="100" /></a></p>
<p>Diesen Ordner „schieben“ Sie nun nur noch per <acronym title="File Transfer Protocol ">FTP</acronym>-Programm in den Ordner »/wp-content/plugins« Ihrer WordPress-Installation (sofern diese nicht lokal vorliegt). Ich benutze dafür <a title="Downloadseite Filezilla" href="http://www.filezilla.de/download.htm">FileZilla</a> oder den FTP-Zugang meines Web-Hosters:</p>
<p><a title="Datei auf Webspace laden" rel="lightbox-plugin" href="/wp-content/uploads/2009/05/filezilla.jpg"><img src="/wp-content/uploads/2009/05/filezilla.jpg" alt="Filezilla in " width="150" height="100" /></a></p>
<p>Wenn Sie sich jetzt in das Backend einloggen, können Sie unter Pluggins » Verwalten das neue Plugin aktivieren. In den meisten Fällen ist das neue Plugin nun einsatzbereit.<br />
Einige Plugins generieren in der linken Spalte eine eigene Menü-Ebene, in der spezielle Einstellungen vorgenommen werden können (<acronym title="zum Beispiel">z.B.</acronym> SEO-Plugin). Andere erwarten, dass das Plugin im Quellcode (header.php, sidebar.php, &#8230;) bekannt gemacht wird, damit es angezeigt werden kann (<acronym title="zum Beispiel">z.B.</acronym> Breadcrumb-Plugin und WP-Pagenavi).</p>
<pre><span style="color:#999">// breadcrumb-navxt</span>
&lt;div class="breadcrumb"&gt;
&lt;?php
if(function_exists('bcn_display')){
     echo "Sie sind hier: "; bcn_display();
}?&gt;
&lt;/div&gt;
<span style="color:#999">/* zum Beispiel so in die header.php einfügen
( ... nach dem body-Tag )*/</span>

<span style="color:#999">// wp-pagenavi</span>
 &lt;?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?&gt;
<span style="color:#999">/* zum Beispiel so in die index.php einfügen
( nach dem Loop und die standardmäßige Page-Navigation löschen )*/</span></pre>
<p>Viele benötigen die in Wordpress installierten „Hooks“</p>
<pre>&lt;?php wp_head(); ?&gt; <span style="color:#999">// zum Beispiel in der header.php</span></pre>
<p>durch die Daten des jeweiligen Plugin in die Webseite geschrieben werden können (diese müssen vorhanden sein).</p></div>
<hr /><strong>Spam-Schutz</strong></p>
<ul>
<li><a title="Akizmet downloaden" href="http://downloads.wordpress.org/plugin/akismet.zip">Akismet</a><br />
Beschreibung:<br />
Ein gutes Spam-Schutz-Plugin, welches standardmäßig bereits im neuen WordPress integriert ist (muss aktiviert werden).<br />
Probleme:<br />
Akismet schickt eine Menge Daten (der User) zum Abgleich an einen Server nach Amerika &#8230; das lässt mich hinsichtlich des Datenschutzes etwas &#8220;aufstoßen&#8221;.<br />
<a title="Infoseite überAkizmet" href="http://wordpress.org/extend/plugins/akismet/">Info</a></li>
<li><a title="WP-SpamFree downloaden" href="http://downloads.wordpress.org/plugin/wp-spamfree.zip">WP-SpamFree Anti-Spam</a><br />
Beschreibung:<br />
Ein weiteres Anti-Spam-Plugin, welches hier testweise zum Einsatz kommt.<br />
Probleme:<br />
<a title="Infoseite über WP-SpamFree" href="http://wordpress.org/extend/plugins/wp-spamfree/">Info</a></li>
<li><a title="Simple Trackback downloaden" href="http://downloads.wordpress.org/plugin/simple-trackback-validation.2.1.zip">Simple Trackback Validation</a><br />
Beschreibung:<br />
Dieses Plugin überprüft, ob Trackbacks zurückverlinken. Trackbacks werden automatisch gesetzt, wenn ein Link von anderen Seiten auf die eigene Seite verweist (was Grundvoraussetzung ist) und erhalten einen Link zurück zu dieser Seite. Spammer missbrauchen dies, um möglichst viele Links auf die eigene Seite zu lenken, löschen aber ihrerseits den Link auf die Zielseite. Simple Trackback Validation überprüft das und der Trackback wird je nach Einstellung nicht veröffentlich oder direkt gelöscht. Kommt hier auch zum Einsatz.<br />
Probleme:<br />
<a title="Infoseite über Simple Trackback" href="http://wordpress.org/extend/plugins/simple-trackback-validation/">Info</a></li>
</ul>
<hr /><strong>Suchmaschinenoptimierung (Search Engine Optimization ? SEO)</strong></p>
<ul>
<li> <a title="izioSEO downloaden" href="http://downloads.wordpress.org/plugin/izioseo.1.2.2.zip">izioSEO</a><br />
Beschreibung:<br />
Diese SEO-Plugin setzte ich testweise selber auf dieser Seite ein und kann bisher nichts beanstanden.<br />
Probleme:<br />
<a title="Infoseite über izioSEO" href="http://wordpress.org/extend/plugins/izioseo/">Info</a></li>
<li><a title="All in One SEO downloaden" href="http://downloads.wordpress.org/plugin/all-in-one-seo-pack.zip">All in One SEO Pack</a><br />
Beschreibung:<br />
Dieses ebenfalls sehr beliebte SEO-Plugin hatte ich als erstes installiert.<br />
Probleme:<br />
<a title="Infoseite über All in One SEO" href="http://wordpress.org/extend/plugins/all-in-one-seo-pack/">Info</a></li>
<li><a title="wpSEO downloaden" href="http://www.wpseo.de/">wpSEO</a><br />
Beschreibung:<br />
Ein häufig eingesetztes und meiner Recherche nach auch gutes SEO-Plugin &#8230; jedoch kommerzieller Natur!<br />
Probleme:</li>
<li><a title="Google XML Sitemaps Downloaden" href="http://downloads.wordpress.org/plugin/google-sitemap-generator.3.1.2.zip">Google XML Sitemaps</a><br />
Beschreibung:<br />
Durch dieses Plugin kommen Artikel schneller in den Index von Google<br />
Probleme:<br />
<a title="Infoseite über Google XML Sitemaps" href="http://wordpress.org/extend/plugins/google-sitemap-generator/#post-132">Info</a></li>
</ul>
<hr /><strong>Navigation</strong></p>
<ul>
<li><a title="Breadcrump NavXT downloaden" href="http://downloads.wordpress.org/plugin/breadcrumb-navxt.3.2.0.zip">Breadcrumb NavXT</a><br />
Beschreibung:<br />
Eine sogenannte <em>Breadcrumb-(<em>Brotkrümel-</em>)Navigation</em>, die dem Besucher den momentanen Pfad zur aktuellen Seite zeigt. Dies erleichtert die Orientierung und sollte in jeder größeren Seite vorhanden sein.<br />
Probleme:<br />
<a title="Infoseite über Breadcrump NavXT" href="http://wordpress.org/extend/plugins/breadcrumb-navxt/">Info</a></li>
<li><a title="WP-PageNavi downloaden" href="http://downloads.wordpress.org/plugin/wp-pagenavi.2.40.zip">WP-PageNavi</a><br />
Beschreibung:<br />
Eine verbesserte Seiten-Navigation<br />
Probleme:<br />
<a title="Infoseite über WP-PageNavi" href="http://wordpress.org/extend/plugins/wp-pagenavi/">Info</a></li>
<li><a href="http://bueltge.de/wp-content/download/wp/landingsites_de.zip" title="Landingsites downloaden">WP Landingssites_de</a><br />
Beschreibung:<br />
Dieses Plugin zeigt Besuchern, die von Suchmaschinen kommen, weitere relevante Artikel an. Sehr empfehlenswert und kommt auch hier zum Einsatz.<br />
Probleme:<br />
<a title="Infoseite über WP Landingsites_de" href="http://bueltge.de/wp-landingsites-de-plugin/181/">Info</a></li>
</ul>
<hr /><strong>Layout</strong></p>
<ul>
<li><a title="Link-Hover-Effect downloaden" href="http://www.muenster-webdesign.net/blog/wp-content/uploads/2008/12/link_hover_effect.zip">Link-Hover-Effect</a><br />
Beschreibung:<br />
Stufenloser (also nicht schlagartiger) Farbanimationseffekt von Hyperlinks sobald sich die Maus über dem Element befindet. Netter Effekt &#8230;<br />
Probleme:<br />
Das Plugin basiert auf dem jquery-Framework und behinderte bei mir leider die installierte Scroll-Top-Funktion (ebenfalls jquery).<br />
<a title="Infoseite über Link-Hover-Effect" href="http://www.muenster-webdesign.net/blog/link-hover-effect/">Info</a></li>
<li><a title="Fluency Admin 2.0 Downloaden" href="http://deanjrobinson.com/download/wp-fluency-2.zip">Fluency Admin 2.0</a><br />
Beschreibung:<br />
Schöneres Admin Menü &#8230;<br />
Probleme:<br />
<a title="Infoseite über Fluency Admin 2.0" href="http://deanjrobinson.com/projects/fluency-admin/">Info</a></li>
</ul>
<hr /><strong>Bewertungen</strong></p>
<ul>
<li> <a title="WP-Polls downloaden" href="http://downloads.wordpress.org/plugin/wp-polls.2.40.zip">WP-Polls</a><br />
Beschreibung:<br />
WP-Polls ist ein Plugin, mit dem Umfragen in die eigene Seite integriert werden können.<br />
Probleme:<br />
<a title="Infoseite über WP-Polls" href="http://wordpress.org/extend/plugins/wp-polls/">Info</a></li>
<li><a title="WP-Postratings downloaden" href="http://downloads.wordpress.org/plugin/wp-postratings.1.40.zip">WP-Postratings</a><br />
Beschreibung:<br />
Nach Installation von WP-Postratings können Sie Ihre Artikel bewerten lassen. Dabei haben Sie die Auswahl, ob das Plug-In direkt auf der Startseite und/oder auf den Unter-Seiten (Single-Seiten) platziert wird.<br />
Probleme:<br />
<a title="Infoseite über WP-Postratings" href="http://wordpress.org/extend/plugins/wp-postratings/">Info</a></li>
</ul>
<hr /><strong>Backup</strong></p>
<ul>
<li> <a title="WP-DB-Backup downloaden" href="http://downloads.wordpress.org/plugin/wp-db-backup.2.2.2.zip">WP-DB-Backup</a><br />
Beschreibung:<br />
Diese Plugin verspricht das unproblematische Speichern der Datenbank. Aufgrund der Downloadzahlen sollte es in Ordnung sein, dennoch werde ich es erst testen. Merke: Ein regelmäßiges Backup ist wichtig &#8230;<br />
<a title="Infoseite über WP-DB-Backup" href="http://wordpress.org/extend/plugins/wp-db-backup/">Info</a></li>
<li><a title="WP-DBManager downloaden" href="http://downloads.wordpress.org/plugin/wp-dbmanager.2.40.zip">WP-DBManager</a><br />
Beschreibung:<br />
Ein weiteres Plugin zu Datenbanksicherung, welches zusätzlich Optimierungs-, Reparatur-, Wiederherstellungoptionen bieten soll. Auch dieses werde ich erst testen &#8230;<br />
Probleme:<br />
<a title="Infoseite über WP-DBManager" href="http://wordpress.org/extend/plugins/wp-dbmanager/">Info</a></li>
</ul>
<hr /><strong>Kommentare</strong></p>
<ul>
<li><a title="Edit Comments XT downloaden" href="http://downloads.wordpress.org/plugin/edit-comments-xt.1.0.zip">Edit Comments XT</a>Beschreibung:<br />
Dieses Plugin ermöglicht den Besuchern geschriebene Kommentare innerhalb einer Zeitspanne nachträglich zu ändern. Ein sehr zuvorkommendes Tool für den User.<br />
Probleme:<br />
Etwas problematische Installation, mit der Anleitung aber gut zu bewältigen.<br />
<a title="Infoseite über Edit Comments XT" href="http://wordpress.org/extend/plugins/edit-comments-xt/">Info</a></li>
<li><a title="Infoseite über WP Ajax Edit Comments" href="http://downloads.wordpress.org/plugin/wp-ajax-edit-comments.zip">WP Ajax Edit Comments</a><br />
Beschreibung:<br />
Dieses Plugin ermöglicht dem Besucher ebenfalls, seinen Kommentar innerhalb einer Zeitspanne nachbearbeiten zu können. Einfach zu installieren und kommt auch hier zum Einsatz.<br />
Probleme:<br />
<a title="Infoseite WP Ajax Edit Comments" href="http://wordpress.org/extend/plugins/wp-ajax-edit-comments/">Info</a></li>
</ul>
<hr />
<strong>Statistik</strong></p>
<ul>
<li>
<a href="http://www.kopfhoch-studio.de/blog/download/1/" title="SEMMELSTATZ 3.1 Downloaden">SEMMELSTATZ 3.1</a><br />
Beschreibung:<br />
SEMMELSTATZ ist ein Statistik-Plugin für Wordpress, das aus dem Array $_SERVER Informationen über die Besucher des Blogs ausliest, in eine eigene SQL-Tabelle schreibt und &#8211; entsprechend ausgewertet und aufbereitet &#8211; im Adminbereich (und nur dort) anzeigt. Kommt auch hier zum Einsatz.<br />
Probleme:<br />
<a href="http://www.kopfhoch-studio.de/blog/2765" title="Infoseite über SEMMELSTATZ 3.1 ">Info</a>
</li>
</ul>
<p>Eine große Anzahl an weiteren Plug-Ins können von der <a href="http://wordpress.org/extend/plugins/">WordPress-Seite</a> runtergeladen werden.</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-05/wordpress-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Auf Schnupperkurs mit WordPress</title>
		<link>http://einmal-am-tag.de/2009-05/auf-schnupperkurs-mit-wordpress/</link>
		<comments>http://einmal-am-tag.de/2009-05/auf-schnupperkurs-mit-wordpress/#comments</comments>
		<pubDate>Thu, 14 May 2009 14:48:25 +0000</pubDate>
		<dc:creator>Matu</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://einmal-am-tag.de.dd18838.kasserver.com/?p=18</guid>
		<description><![CDATA[

In den letzten 14 Tagen habe ich alles über Wordpress nachgelesen, durchgearbeitet und angewendet, was ich finden konnte.
Was mir da so über den Weg bzw. über den Bildschirm gelaufen ist erweckte in mir das Gefühl, die letzten 3-4 Jahre einen echten Web-Trend verschlafen zu haben. Das erste mal hatte ich vor ca. 2 &#189; Jahren [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>In den letzten 14 Tagen habe ich alles über Wordpress nachgelesen, durchgearbeitet und angewendet, was ich finden konnte.<br />
Was mir da so über den Weg bzw. über den Bildschirm gelaufen ist erweckte in mir das Gefühl, die letzten 3-4 Jahre einen echten Web-Trend verschlafen zu haben. Das erste mal hatte ich vor ca. 2 &frac12; Jahren etwas von Wordpress in einer Fachzeitschrift gelesen, war aber nicht weiter darauf angesprungen. Ich meine mich erinnern zu können, dass ich damals sowas wie <cite>Baby-CMS</cite> gedacht habe und einfach weiterblätterte. <span id="more-18"></span><br />
Das hätte ich vielleicht nicht tun sollen, denn meine bisherigen Erkenntnisse offerieren mir ein gut unterstütztes Blog-CMS mit einer großen Online-Community. Was andere mit ihren Blogs schon erreicht haben und welcher Spaß damit verbunden ist, seine Erfahrungen und Gedanken mit anderen zu teilen, da kommt man schon etwas ins Grübeln.<br />
Na ja, da sage ich mir doch besser spät als nie und nachdem ich mich nun die letzten 4 Monate an einem eigenen CMS , aufbauend auf PHP, mySQL, Apanatschi, Template-Klasse, Datenbank-Klasse &#8230; versucht habe (was wunderbar funktionierte und sehr gut anzupassen war, aber auch sehr viel Zeit verschlang), entschloss ich mich vor einigen Tagen, das bisher erstellte nun auf Wordpress zu portieren und an der Blogomania teilzuhaben &#8230;!<br />
Dafür installierte ich WordPress zunächst auf meinem eigenen Rechner unter xampp, was auch ohne Probleme zu bewerkstelligen war. Einfach die neueste Wordpress-Version <acronym title="... herunterladen">downloaden</acronym>, in einem Ordner <acronym title="... den komprimierten Wordpress-Ordner entpacken">entzippen</acronym> und dann erst mal auf die beigefügte &#8220;liesmich&#8221;-HTML-Datei klicken, wodurch man auf die Webseite von WordPress gelangt und dort die leichtverständliche Installationsanweisung nachlesen kann.<br />
Also eben schnell die</p>
<pre>wp-config-sample.php</pre>
<p>aus dem ersten Verzeichnis rausgesucht, in meinem Standard-Editor Notepad++ neuester Version (jetzt auch mit besserer Syntaxerweiterung) geöffnet und flugs die erforderliche Konfiguration für die Datenbank vorgenommen, die ich vorher über phpmyadmin im xampp angelegt hatte.<br />
Diese wird dann im selben Ordner als wp-conf.php (ohne -sample) gespeichert und anschließend auf den Webspace geschoben. Bei mir unter &#8230;</p>
<pre>C:\xampp\htdocs\wordpress</pre>
<p>Den Ordner sollte man, wie mir meine bisherige Recherche schon verraten hat, besser umbenennen (blog, hanswurst, X3rUt54, &#8230;), um so schon sofort den ersten Schritt Richtung Sicherheit seines zukünftigen megaerfolgreichen Blogs zu tätigen.<br />
Nun kann man im Browser seiner Wahl über</p>
<pre>http://localhost/X3rUt54/wp-admin/install.php</pre>
<p>die weiteren Schritte bewältigen, auf die ich hier nicht weiter eingehe, da es selbsterklärend und für jeden verständlich sein sollte.<br />
Nachdem man sich seinen Benutzernamen und vor allem sein Passwort gut gemerkt hat, folgt das Einloggen in den Backgroundbereich von WordPress &#8230; quasi Betreten Sie dann als Captain die Brücke der Enterprise (großes Raunen).<br />
Hier sollte man sich nun alles erst mal etwas genauer ansehen. Am Anfang erscheint es etwas <span style="text-decoration: line-through;">beindrückend</span> beeindruckend, was aber auch schnell wieder nachlässt, sobald man sich etwas umgeschaut hat. Es gibt einen Bereich, wo man Artikel (so wie dieser) oder eigenständige Seiten (Über_mich, Impressum, &#8230;) erstellen kann. Es können Benutzer angelegt (was aber erst einmal nebensächlich ist) oder Plugins (Spamschutz, Broadcrump, &#8230;) und Widgets (Tagwolke, Meta, &#8230;) installiert werden. Alles kein Hexenwerk und recht schnell zu verstehen.<br />
Nachdem man sich nun schon etwas <em>heimeliger</em> fühlt, kann die Suche nach einem <acronym title="... Webseitenlayout">Theme</acronym> beginnen, wenn einem die beiden vorgegebenen Standard-Layouts nicht zusagen &#8230; hier gibt es im Web eine große Anzahl an freien Themes zum Download.</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://einmal-am-tag.de/2009-05/auf-schnupperkurs-mit-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
