<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Staticfloat</title>
	
	<link>http://staticfloat.com</link>
	<description>&lt;content:encoded&gt;&lt;/content:encoded&gt;</description>
	<lastBuildDate>Mon, 20 May 2013 10:02:11 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Staticfloat" /><feedburner:info uri="staticfloat" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>5 Tipps um die WordPress Suche zu verbessern</title>
		<link>http://feedproxy.google.com/~r/Staticfloat/~3/idvalxotj8o/</link>
		<comments>http://staticfloat.com/wordpress/5-tipps-um-die-wordpress-suche-zu-verbessern/#comments</comments>
		<pubDate>Thu, 16 May 2013 12:11:52 +0000</pubDate>
		<dc:creator>m0d</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[wp]]></category>

		<guid isPermaLink="false">http://staticfloat.com/?p=5740</guid>
		<description><![CDATA[Die in WordPress eingebaute Suchfunktion arbeitet ohne viel Konfigurationsaufwand bereits sehr gut. Doch da fast alles noch besser geht, schauen wir uns heute an, wie man die Suche in WordPress noch verbessern, komfortabler gestalten oder einfach nur an die eigenen Wünsche anpassen kann. Post direkt anzeigen, wenn nur ein Suchergebniss Wenn der Benutzer nur einen [...]]]></description>
				<content:encoded><![CDATA[<p>Die in WordPress eingebaute Suchfunktion arbeitet ohne viel Konfigurationsaufwand bereits sehr gut. Doch da fast alles noch besser geht, schauen wir uns heute an, wie man die Suche in WordPress noch verbessern, komfortabler gestalten oder einfach nur an die eigenen Wünsche anpassen kann.<br />
<span id="more-5740"></span></p>
<figure class="img">
<img src="http://cdn.staticfloat.com/wp-content/uploads/2012/12/wp-.png" alt="wp  5 Tipps um die WordPress Suche zu verbessern" width="650" height="300" class="alignnone size-full wp-image-5259" title="5 Tipps um die WordPress Suche zu verbessern" /><br />
</figure>
<h3>Post direkt anzeigen, wenn nur ein Suchergebniss</h3>
<p>Wenn der Benutzer nur einen einzigen Post findet mit einem entsprechenden Suchbegriff, macht es Sinn, den Benutzer direkt auf diesen Post weiterzuleiten. Der Besucher spart letztendlich einen Klick und kommt schneller an die gesuchte Information. Sollte die Suche mehr als ein Ergebnis liefern, macht dies natürlich weniger Sinn.</p>
<pre class="brush: php">
add_action(&#039;template_redirect&#039;, &#039;redirect_single_post&#039;);
function redirect_single_post() {
    if (is_search()) {
        global $wp_query;
        if ($wp_query-&gt;post_count == 1) {
            wp_redirect( get_permalink( $wp_query-&gt;posts[&#039;0&#039;]-&gt;ID ) );
        }
    }
}
</pre>
<p>Quelle: <a rel="nofollow" href="http://www.paulund.co.uk/redirect-search-results-return-one-post" target="_blank">http://www.paulund.co.uk/redirect-&hellip;</a></p>
<h3>Anzahl der Suchergebnisse festlegen</h3>
<p>Standardmäßig zeigt WordPress maximal 10 Ergebnisse pro Suchanfrage auf einmal an. Diese Zahl ist für manche UseCases aber vielleicht zu wenig, deswegen gibt es die Möglichkeit, die Anzahl der Post pro Seite beliebig zu ändern. Dazu muss einfach nachfolgender Code in die <code>functions.php</code> geschrieben werden. </p>
<pre class="brush: php">
function limit_posts_per_search_page() {
	if ( is_search() )
		set_query_var(&#039;posts_per_archive_page&#039;, 20); 
}

add_filter(&#039;pre_get_posts&#039;, &#039;limit_posts_per_search_page&#039;);
</pre>
<p>Quelle: <a rel="nofollow" href="http://wordpress.org/support/topic/limit-post-per-search-page" target="_blank">http://wordpress.org/support/topic&hellip;</a></p>
<h3>Relevanssi</h3>
<p><a href="http://wordpress.org/extend/plugins/relevanssi/" target="_blank">Relevanssi</a> ist ein Plugin für WordPress, dass im Vergleich zu Standardsuche sehr viel kann. Eines der interessantesten Features von Relevanssi ist, dass Suchergebnisse nach Relevanz geordnet werden können, standardmäßig ordnet WordPress Ergebnisse nach Datum. Zusätzlich können ohne viel Aufwand auch Kommentare und Kategorien durchsucht werden. Wer sich also allgemein eine mächtigere Suche für WordPress wünscht, sollte einen Blick auf Relevanssi werfen. </p>
<figure class="img">
<img src="http://cdn.staticfloat.com/wp-content/uploads/2013/05/relevanssi.png" alt="relevanssi 5 Tipps um die WordPress Suche zu verbessern" width="771" height="248" class="alignnone size-full wp-image-5747" title="5 Tipps um die WordPress Suche zu verbessern" /><br />
</figure>
<h3>Nur in einer bestimmten Kategorie suchen</h3>
<p>Es ist auch ohne zusätzliche Plugins möglich, nur in bestimmten Kategorien zu suchen. Dazu muss folgendes Snippet in die functions.php eingefügt werden:</p>
<pre class="brush: php">
function SearchFilter($query) {  
  if ($query-&gt;is_search) {
    // Hier die entsprechende Kategorie wählen
    $query-&gt;set(&#039;cat&#039;, &#039;8,9,12&#039;);   
  }  
  return $query;  
}     
add_filter(&#039;pre_get_posts&#039;,&#039;SearchFilter&#039;);  
</pre>
<h3>Nur einen bestimmten Post Type durchsuchen</h3>
<p>Wenn man auf seiner WordPress Seite mehrere Post Types verwendet (z.B. Artikel, News, Filme etc.) möchte man wahrscheinlich auch festlegen, in welchem Type gesucht werden soll. Dies funktioniert ganz analog zur Suche in einer bestimmten Kategorie.</p>
<pre class="brush: php">
function SearchFilter($query) {  
  if ($query-&gt;is_search) {  
    // Post Type angeben 
    $query-&gt;set(&#039;post_type&#039;, &#039;feeds&#039;);  
  }  
  return $query;  
}  
   
add_filter(&#039;pre_get_posts&#039;,&#039;SearchFilter&#039;);  
</pre>
<img src="http://feeds.feedburner.com/~r/Staticfloat/~4/idvalxotj8o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://staticfloat.com/wordpress/5-tipps-um-die-wordpress-suche-zu-verbessern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://staticfloat.com/wordpress/5-tipps-um-die-wordpress-suche-zu-verbessern/</feedburner:origLink></item>
		<item>
		<title>5 jQuery Tipps &amp; Tricks</title>
		<link>http://feedproxy.google.com/~r/Staticfloat/~3/ZtmoceN5C3E/</link>
		<comments>http://staticfloat.com/javascript/5-jquery-tipps-tricks/#comments</comments>
		<pubDate>Wed, 01 May 2013 18:08:51 +0000</pubDate>
		<dc:creator>m0d</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://staticfloat.com/?p=5712</guid>
		<description><![CDATA[Viele Webseiten verwenden das Javascript Framework jQuery, heute schauen wir uns ein paar Tipps und Tricks an, um noch effizienter mit jQuery zu arbeiten. jQuery wurde entwickelt, um Webentwicklern das Leben einfacher zu machen und um Innovationen voranzutreiben. Es kann deshalb nicht schaden, noch ein paar Tricks mehr zu kennen, um sich das Leben vielleicht [...]]]></description>
				<content:encoded><![CDATA[<p>Viele Webseiten verwenden das Javascript Framework jQuery, heute schauen wir uns ein paar Tipps und Tricks an, um noch effizienter mit jQuery zu arbeiten. jQuery wurde entwickelt, um Webentwicklern das Leben einfacher zu machen und um Innovationen voranzutreiben. Es kann deshalb nicht schaden, noch ein paar Tricks mehr zu kennen, um sich das Leben vielleicht noch einfacher zu machen.<br />
<span id="more-5712"></span></p>
<h4>Verschiedene Themes &mdash; Stylesheet Switch</h4>
<p>Es gibt Webseiten die bieten verschiedene Themes an, welche im besten Fall unkompliziert gewechselt werden können. So einen Themeswitcher mit jQuery zu basteln ist relativ einfach. Ein Browser arbeitet Stylesheets in der Reihenfolge ab, in der sie in die Seite eingebunden werden, dass heißt insbesondere, dass Styles die in einem anderen Stylesheet weiter oben definiert wurden, automatisch von nachfolgenden Stylesheets überschrieben werden.</p>
<pre class="brush: js">
$(&quot;#Theme1Switch&quot;).click(function() {
   $(&quot;link[media=&#039;screen&#039;]&quot;).attr(&quot;href&quot;, &quot;Theme1.css&quot;);
 });
 
 $(&quot;#Theme2Switch&quot;).click(function() {
   $(&quot;link[media=&#039;screen&#039;]&quot;).attr(&quot;href&quot;, &quot;Theme2.css&quot;);
 });
 
 $(&quot;#Theme3Switch&quot;).click(function() {
   $(&quot;link[@media=&#039;screen&#039;]&quot;).attr(&quot;href&quot;, &quot;Theme3.css&quot;);
 });
</pre>
<p>Alternativ könnte man auch mit <code>data</code>-Attributen arbeiten und gewinnt somit noch etwas an Flexibilität.</p>
<pre class="brush: js">
$(&#039;.themeSwitcher&#039;).click(function() {
   var theme = $(this).data(&#039;theme-stylesheet&#039;);
    $(&quot;link[@media=&#039;screen&#039;]&quot;).attr(&quot;href&quot;, theme);

});
</pre>
<h4>Eigenen Selektor definieren</h4>
<p>Auf Element greift man bei jQuery im Allgmeinen per CSS Selektor zu, auf das Div-Element mit der ID <code>haus</code> z.B. greift man mit <code>$('#haus')</code> zu. Nun gibt es aber noch die Möglichkeit, eigene jQuery Selektoren zu definieren, mit denen wir z.B. jedes Element auswählen könnten, welches einen roten Rahmen hat.</p>
<pre class="brush: js">
$.extend($.expr[&#039;:&#039;], {
    redBorder: function(el) {
        return $(el).css(&#039;borderColor&#039;) === &#039;red&#039;;
    }
});
 
$(&#039;.element:redBorder&#039;).click(function() {
    alert(&#039;Dieses Element hat einen roten Rahmen!&#039;);
});
</pre>
<h4>Element vertikal und horizontal zentrieren</h4>
<p>Für dieses Problem gibt es bereits einige jQuery Plugins, aber wir können auch schnell selber ein Plugin schreiben, dass Elemente horizontal und vertikal auf der Seite zentriert.</p>
<pre class="brush: js">
// jQuery Plugin &quot;anlegen&quot;
jQuery.fn.center = function () {
    this.css(&quot;position&quot;,&quot;absolute&quot;);
    this.css(&quot;top&quot;, ( $(window).height() - this.height() ) / 2+$(window).scrollTop() + &quot;px&quot;);
    this.css(&quot;left&quot;, ( $(window).width() - this.width() ) / 2+$(window).scrollLeft() + &quot;px&quot;);
    return this;
}
 
// Das Plugin kann dann direkt verwendet werden.
$(&#039;.element&#039;).center();
</pre>
<p>Ähnliche Resultate sind auch rein mit CSS möglich, allerdings ist das vertikale Zentrieren nicht ganz so einfach wie das horizontale.</p>
<h4>Mauskoordinaten bestimmen</h4>
<p>Ab und an kann es vorkommen, dass man die Mauskoordinaten braucht und irgendwie weiterverarbeiten muss. Mit jQuery ist es kein Problem an diese Informationen zu kommen, wie nachfolgendes Script zeigt.</p>
<pre class="brush: js">
$(window).mousemove(function(e){
    var x_cord = e.pageX;
    var y_cord = e.pageY;
  //...
}); 
</pre>
<h4>Prüfen ob Element in einem anderen Element ist</h4>
<p>Wenn man prüfen möchte, ob ein bestimmtes Element Kind von einem anderen ist, kann man dies mit jQuery auf sehr einfache Weise tun.</p>
<pre class="brush: js">
if($(&quot;.parentElement&quot;).has(&quot;.childClass&quot;).length)){
//mach was....
}
else{
//mach ebenfalls was....
}
</pre>
<img src="http://feeds.feedburner.com/~r/Staticfloat/~4/ZtmoceN5C3E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://staticfloat.com/javascript/5-jquery-tipps-tricks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://staticfloat.com/javascript/5-jquery-tipps-tricks/</feedburner:origLink></item>
		<item>
		<title>Sublime Text — Webentwicklers bester Freund!</title>
		<link>http://feedproxy.google.com/~r/Staticfloat/~3/781S_saWj0c/</link>
		<comments>http://staticfloat.com/allgemein/sublime-text-webentwicklers-bester-freund/#comments</comments>
		<pubDate>Sun, 28 Apr 2013 16:15:18 +0000</pubDate>
		<dc:creator>m0d</dc:creator>
				<category><![CDATA[Sonstiges]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://staticfloat.com/?p=5689</guid>
		<description><![CDATA[Sublime Text ist ein sehr performanter und für alle Plattformen verfügbarer Texteditor. Dabei bietet Sublime Text eine Menge Funktionen und Helferlein, die das Leben eines jeden Webentwicklers erleichtern. Mittlerweile ist der Editor schon lange kein Geheimtipp mehr, trotzdem möchte ich ihn in diesem Artikel ein wenig vorstellen. Sublime Text Sublime Text kann von jedem heruntergeladen [...]]]></description>
				<content:encoded><![CDATA[<p>Sublime Text ist ein sehr performanter und für alle Plattformen verfügbarer Texteditor. Dabei bietet Sublime Text eine Menge Funktionen und Helferlein, die das Leben eines jeden Webentwicklers erleichtern. Mittlerweile ist der Editor schon lange kein Geheimtipp mehr, trotzdem möchte ich ihn in diesem Artikel ein wenig vorstellen.<br />
<span id="more-5689"></span></p>
<figure class="img">
<img src="http://cdn.staticfloat.com/wp-content/uploads/2013/04/sublime.png" alt="sublime Sublime Text &mdash; Webentwicklers bester Freund!" width="877" height="374" class="alignnone size-full wp-image-5690" title="Sublime Text &mdash; Webentwicklers bester Freund!" /><br />
</figure>
<h3>Sublime Text</h3>
<p><a rel="nofollow" href="http://www.sublimetext.com/" target="_blank">Sublime Text</a> kann von jedem heruntergeladen und getestet werden, wer eine Lizenz erwerben möchte muss aber 79$ bezahlen. Die kostenlose Sharewareversion kann aber ohne Einschränkungen und Zeitlimit verwendet werden. Trotzdem sind die 79$ sehr gut investiert, wenn man viel mit Editor arbeitet. Außerdem unterstützt man den Entwickler, der einen wirklich großartigen Job leistet.</p>
<h4>Besonderheiten</h4>
<p>Sublime Text erlaubt das Öffnen und Bearbeiten mehrer Dateien zur gleichen Zeit. Dies ist besonders praktisch, wenn man z.B. auf einer Seite das HTML Markup und auf der anderen Seite das zugehörige CSS Stylesheet offen hat. Je nach Bildschirmgröße sind auch 3 Spalten möglich, ohne dass der Editor unübersichtlich wirkt.</p>
<figure class="img">
<img src="http://cdn.staticfloat.com/wp-content/uploads/2013/04/sublime-2.png" alt="sublime 2 Sublime Text &mdash; Webentwicklers bester Freund!" width="877" height="439" class="alignnone size-full wp-image-5693" title="Sublime Text &mdash; Webentwicklers bester Freund!" /><br />
</figure>
<p>Ebenfalls sehr nützlich ist die <em>Instant Project Switch</em>&nbsp; Funktion. Manchmal arbeitet man nicht nur an einem Projekt, sondern gleichzeitig an mehreren. Von großen IDEs wie z.B. Netbeans kennt man die Möglichkeit, unterschiedliche Projekte zu verwalten. Sublime Text bietet eine ähnliche Möglichkeit und erlaubt die Zuordnung von bestimmten Dateien zu Projekten. Somit kann man mit wenigen Mausklicks alle Dateien zu einem Projekt laden, aber auch wieder schließen.</p>
<p>Ein weiteres, sehr geniales Feature, ist die Möglichkeit der Multi-Selektion, d.h. es können mehrer Stellen im Dokument gleichzeitig angewählt und bearbeitet werden. Damit hat man die Möglichkeit in mehrere Zeilen gleichzeitig zu schreiben, oder eine Variable schnell im ganzen Dokument umzubenennen. </p>
<h4>Plugins</h4>
<p>Für Sublime Text gibt es jede Menge nützliche Plugins. Im Folgenden werden kurz drei sehr nützliche vorgestellt, natürlich gibt es noch eine Menge mehr!</p>
<p><a href="http://wbond.net/sublime_packages/package_control" target="_blank">Package Control</a><br />
Dieses Plugin ist dazu da, um andere Plugins zu verwalten und sehr einfach installieren zu können. Mit Package Control ist es möglich, Plugins direkt aus dem Editor heraus zu installieren. Ebenso ist es möglich, andere Plugins ohne einen einzigen Mausklick binnen Sekunden zu installieren. Außerdem sorgt Package Control dafür, dass alle Plugins immer auf dem neusten Stand sind.</p>
<p><a rel="nofollow" href="https://github.com/sergeche/emmet-sublime" target="_blank">Emmet</a><br />
Emmet ist eines meine Lieblingsplugins, mit Emmet ist es möglich sehr schnell HTML, CSS und Javascript Code zu erzeugen. Zum Thema <a href="http://staticfloat.com/csshtmlxml/zen-coding-html-markup-und-css-schneller-schreiben/" target="_blank">Zen Coding</a> gab es auf Staticfloat vor einiger Zeit bereits einen Artikel, Emmet ist nun der Nachfolger und bietet noch einiges mehr an Features.</p>
<p>So hat man nun die Möglichkeit, erstellte HTML Elemente direkt mit einem Platzhalter Inhalt zu befüllen. Lästiges Lorem Ipsum Copy und Paste, gehört damit der Vergangenheit an.</p>
<p><strong>Beispiel</strong>: (+[TAB] steht für das Drücken der [TAB]-Taste)</p>
<pre class="brush: html">
p*4&gt;lorem+[TAB]

Wird automatisch zu:
&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Qui dicta minus molestiae vel beatae natus eveniet ratione temporibus aperiam harum alias officiis assumenda officia quibusdam deleniti eos cupiditate dolore doloribus!&lt;/p&gt;
&lt;p&gt;Ad dolore dignissimos asperiores dicta facere optio quod commodi nam tempore recusandae. Rerum sed nulla eum vero expedita ex delectus voluptates rem at neque quos facere sequi unde optio aliquam!&lt;/p&gt;
&lt;p&gt;Tenetur quod quidem in voluptatem corporis dolorum dicta sit pariatur porro quaerat autem ipsam odit quam beatae tempora quibusdam illum! Modi velit odio nam nulla unde amet odit pariatur at!&lt;/p&gt;
&lt;p&gt;Consequatur rerum amet fuga expedita sunt et tempora saepe? Iusto nihil explicabo perferendis quos provident delectus ducimus necessitatibus reiciendis optio tempora unde earum doloremque commodi laudantium ad nulla vel odio?&lt;/p&gt;
</pre>
<p>Auch komplexere Ausdrücke sind kein Problem. Wenn man möchte übernimmt Emmet auch das Vendor Prefixing von bestimmten CSS3 Eigenschaften automatisch. </p>
<p><a rel="nofollo" href="https://github.com/facelessuser/BracketHighlighter#bracket-plugin" target="_blank">Bracket Highlighter</a></p>
<p>Bracket Highlighter ist ein Plugin, dass einem Anfangs- und Endtags, Quotes und Klammerungen anzeigt. Zwar verfügt Sublime Text standardmäßig über ein ähnliches Feature, Bracket Highlighter geht aber noch einen Schritt weiter und hilft einem sehr dabei die Übersicht nicht zu verlieren.</p>
<figure class="img">
<img src="http://cdn.staticfloat.com/wp-content/uploads/2013/04/bracket-highlight.png" alt="bracket highlight Sublime Text &mdash; Webentwicklers bester Freund!" width="769" height="270" class="alignnone size-full wp-image-5702" title="Sublime Text &mdash; Webentwicklers bester Freund!" /><br />
<span style="font-size:12px;margin-top:10px">Quelle: https://github.com/facelessuser/BracketHighlighter#bracket-plugin</span><br />
</figure>
<h4>Alternative Notepad++</h4>
<p>Die wohl meistgenutzte Alternative (zumindest auf Windows) ist Notepad++. Notepad++ ist ebenfalls ein sehr guter Editor, der komplett kostenlos und frei zur Verfügung steht. Auch ich nutze Notepad++ noch ab und zu, muss aber sagen, dass meine Tendenz hin klar zu Sublime Text geht.</p>
<p>Sublime Text fühlt sich meiner Meinung nach einfach noch ein Stück flüssiger und performanter an. Zwar gibt es für Notepad++ auch viele Plugins, trotzdem gefällt mir persönlich die Handhabung bei Suplime Text besser.</p>
<img src="http://feeds.feedburner.com/~r/Staticfloat/~4/781S_saWj0c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://staticfloat.com/allgemein/sublime-text-webentwicklers-bester-freund/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://staticfloat.com/allgemein/sublime-text-webentwicklers-bester-freund/</feedburner:origLink></item>
		<item>
		<title>Chat Template auf Basis von H5BP und Twitter Bootstrap</title>
		<link>http://feedproxy.google.com/~r/Staticfloat/~3/XgjHlv-t93M/</link>
		<comments>http://staticfloat.com/csshtmlxml/chat-template-auf-basis-von-h5bp-und-twitter-bootstrap/#comments</comments>
		<pubDate>Thu, 25 Apr 2013 12:53:49 +0000</pubDate>
		<dc:creator>m0d</dc:creator>
				<category><![CDATA[CSS/HTML/XML]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://staticfloat.com/?p=3481</guid>
		<description><![CDATA[Templates, Tools und neue Techniken kann man als Webentwickler immer gebrauchen, auch wenn man diese nicht einsetzten will, kann man doch eine Menge neues lernen und so seinen Werkzeugkasten erweitern. In diesem Tutorial erstellen wir ein Template für einen Chat, welches auf HTML5 Boilerplate und Twitter Bootstrap basiert. Vorschau Bei diesem Artikel handelt es sich [...]]]></description>
				<content:encoded><![CDATA[<p>Templates, Tools und neue Techniken kann man als Webentwickler immer gebrauchen, auch wenn man diese nicht einsetzten will, kann man doch eine Menge neues lernen und so seinen Werkzeugkasten erweitern. In diesem Tutorial erstellen wir ein Template für einen Chat, welches auf <a href="http://html5boilerplate.com/">HTML5 Boilerplate</a> und <a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap</a> basiert.<br />
<span id="more-3481"></span></p>
<h3>Vorschau</h3>
<p style="color:gray;padding-left:10px; border-left: 2px solid gray">
Bei diesem Artikel handelt es sich um ein revisit, er wurde erstmals am 20. Januar 2012 veröffentlicht.
</p>
<p>Bevor es an die Entwicklung geht schauen wir uns an, was wir überhaupt machen wollen. Der <a href="http://demo.staticfloat.com/chat_tem/">Chat</a> besteht aus einem Header, einer Sidebar in der die Besucher angezeigt sowie gesucht werden können, die gerade online sind und einer Kanalauswahl. Der große rechte Teil wird von dem Chat selbst eingenommen, unten befindet sich ein Textfeld um Nachrichten zu schreiben.</p>
<p><strong>Achtung!</strong> Es geht hier rein um das Template, also das CSS und HTML Markup der Seite, nicht um die Funktionalität auf Serverseite (<em style="color:gray">diese folgt eventuell in einem anderen Tutorial</em>).</p>
<p><img src="http://cdn.staticfloat.com/wp-content/uploads/2012/01/chat-template.jpg" alt="chat template Chat Template auf Basis von H5BP und Twitter Bootstrap" title="chat-template" width="800" height="827" class="alignnone size-full wp-image-3485" /></p>
<h3>Vorbereitung</h3>
<p>Wie bereits in der Einleitung geschrieben, basiert das Template auf <a href="http://html5boilerplate.com/">HTML5 Boilerplate (H5BP)</a> und <a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap</a>. Im ersten Schritt laden wir also beide <em>Frameworks</em> erst einmal runter.</p>
<p>Nach dem entpacken von H5BP sollte man folgende Ordnerstruktur vor sich haben:<br />
<img src="http://cdn.staticfloat.com/wp-content/uploads/2012/01/h5bp-structure.png" alt="h5bp structure Chat Template auf Basis von H5BP und Twitter Bootstrap" title="h5bp-structure" width="800" height="391" class="alignnone size-full wp-image-3492" /></p>
<p>In den CSS Ordner entpackt man dann die <code>bootstrap.css</code> Datei von Twitter. Nun muss dieses Stylesheet natürlich auch noch im Template eingebunden werden, dazu fügt man folgende Zeile in die <code>index.php</code> von H5BP ein.  </p>
<pre class="brush: css">
  &lt;!-- CSS: implied media=all --&gt;
  &lt;!-- CSS concatenated and minified via ant build script--&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;css/style.css&quot;&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;css/bootstrap.css&quot;&gt;
</pre>
<p>Alle nachfolgenden Änderungen und Code Snippets beziehen sich immer auf die <code>index.php</code> Datei.</p>
<h3>Das HTML Markup</h3>
<p>So nach Vorschau und Vorbereitung folgt nun der wirklich interessante Teil des Templates, nämlich das HTML Markup. H5BP liefert bereits eine fertige Grundstruktur, das gesamte folgende Markup befindet sich innerhalb des Containers mit der <code>id="main"</code>.</p>
<h4>Der Header</h4>
<p>Der Header besteht in diesem Template nur aus dem Titel des Chats, weiterführend könnten hier auch noch Menüs und Buttons untergebracht werden. Achtung, hierfür muss das <code>bootstrap.css</code> Stylesheet auf jeden Fall eingebunden sein, da die Styles für die <code>h1</code> Überschrift dort definiert sind.</p>
<pre class="brush: html">
&lt;!-- bootstrap --&gt;
    &lt;div class=&quot;container&quot;&gt;
      &lt;div class=&quot;content&quot;&gt;
        &lt;div class=&quot;page-header&quot;&gt;
          &lt;h1&gt;Staticfloat Chat&lt;/h1&gt;
        &lt;/div&gt;
      &lt;/div&gt;
   &lt;/div&gt;
</pre>
<h4>Die Chatnachrichten</h4>
<p>Der rechte Teil der Seite mit den Chatnachrichten nimmt mit Abstand am meisten Platz ein. Die Chatnachrichten selber werden untereinander ausgeben und bestehen wiederum jeweils aus 2 Teilen. </p>
<p>Rechts befinden sich Metainformationen zur Nachricht, also wann sie abgesendet wurde und von wem. Der Benutzername wird dabei als türkiser Button dargestellt, es soll ja möglich sein einzelne Benutzer anzuklicken um privat zu chatten. </p>
<p>Für den Button wird eine Vorlage von Twitter Boostrap verwendet, mit der Klasse <code>btn</code> und <code>info</code>.</p>
<p>Links steht die Nachricht selbst, um die beiden Teile exakt nebeneinander darzustellen wird eine Tabelle verwendet. Es wäre hier auch möglich ohne Tabelle auszukommen, jedoch spricht in diesem Fall auch nichts gegen eine Tabelle.</p>
<pre class="brush: html">
        &lt;!-- chat messages start--&gt;
          &lt;div id=&quot;chat-messages&quot; class=&quot;span10&quot;&gt;
          &lt;div class=&quot;chat-message&quot;&gt;
          	&lt;table&gt;
          		&lt;tr&gt;
          			&lt;td&gt;
          			 &lt;a class=&quot;btn info&quot;&gt;Staticfloat.com&lt;/a&gt;
          			 &lt;small class=&quot;small-date&quot;&gt;&lt;time datetime=&quot;2011-02-14&quot;&gt;Vor 15 Stunden&lt;/time&gt;&lt;/small&gt;
          			&lt;/td&gt;
          			&lt;td&gt;
          				Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

          			&lt;/td&gt;
          		&lt;/tr&gt;
          	&lt;/table&gt;
          &lt;/div&gt;
          &lt;/div&gt;
          &lt;!-- chat messages end--&gt;
</pre>
<h4>Die Sidebar</h4>
<p>In der Sidebar stehen sämtliche Benutzer die momentan im Chat aktiv sind und die Kanäle bzw. die einzelnen Chaträume. Auch hier werden wieder vordefinierte Styles für die Buttons aus Twitter Boostrap verwendet, dabei kommt es jedoch auch zu Klassenbelegungen welche semantisch nicht ganz korrekt klingen (z.B. <code>danger</code> für Kanäle). </p>
<p>Aber es ist ganz einfach mögliche weitere Klassen für Buttons hinzuzufügen und diese können dann auch passender benannt werden. </p>
<p>Die aktiven Nutzer und die Kanäle sind in ungeordneten Listen untereinander angeordnet. Ganz oben in der Sidebar befindet sich ein Formular, über das Benutzer gesucht werden können.</p>
<pre class="brush:html">
          &lt;!-- sidebar start --&gt;
          &lt;div class=&quot;span4&quot;&gt;
            &lt;form&gt;
            	&lt;input type=&quot;text&quot; placeholder=&quot;Suche&quot;/&gt;
            &lt;/form&gt;
              &lt;h6 style=&quot;text-align:center&quot;&gt;online users (11 von 50)&lt;/h6&gt;
            	&lt;ul class=&quot;online-list&quot;&gt;
            		&lt;li class=&quot;btn success&quot;&gt;Staticfloat&lt;/li&gt;
               	&lt;/ul&gt;

              &lt;h6 style=&quot;text-align:center&quot;&gt;Kanäle&lt;/h6&gt;
              &lt;ul class=&quot;online-list&quot;&gt;
                &lt;li class=&quot;btn danger&quot;&gt;Channel&lt;/li&gt;
                &lt;li class=&quot;btn danger&quot;&gt;CSS&lt;/li&gt;
                &lt;li class=&quot;btn danger&quot;&gt;Javascript&lt;/li&gt;
                &lt;li class=&quot;btn danger&quot;&gt;HTML&lt;/li&gt;
                &lt;/ul&gt;
          &lt;/div&gt;
          &lt;!-- sidebar end --&gt;
</pre>
<h4>Das Chatfenster</h4>
<p>Ohne die Eingabemöglichkeit einer Nachricht, ist jeder Chat ziemlich sinnlos. Natürlich wäre es lästig, wenn das Chatfenster beim Hoch- und Runterscrollen der Nachrichten verschwinden würde weil es mitscrollt. Aus diesem Grund wird das Chatfenster am unteren Rand des Browserfenster mit der CSS Eigenschaft <code>position:fixed</code> fixiert.</p>
<p>Damit das Chatfenster nicht stört kommen später noch ein paar CSS Effekte hinzu, wie z.B. die dynamische Vergrößerung des Texfelds.</p>
<pre class="brush: html">
	      	&lt;!--Chat message submit form--&gt;
          	&lt;div id=&quot;chat-box&quot; class=&quot;row&quot;&gt;
          	&lt;form&gt;
          	  &lt;div class=&quot;message-input-wrapper&quot;&gt;
          	  &lt;input type=&quot;text&quot; style=&quot;padding:5px;font-size:15px&quot;/&gt;
          	  &lt;/div&gt;

          	  &lt;div class=&quot;button-input-wrapper&quot;&gt;
          		&lt;button class=&quot;btn primary&quot;&gt;Nachricht absenden&lt;/button&gt;          		
          		
              &lt;/div&gt;

          	&lt;/form&gt;
          	&lt;/div&gt;
          	&lt;!-- form end --&gt;
</pre>
<h3>Die CSS Styles</h3>
<p>Nun kommt der zweite wichtige Teil des Templates, nämlich die CSS Styles. H5BP und ganz besonders Twitter Boostrap übernehmen hier schon einen Großteil der Arbeit, d.h. wir müssen uns nicht um Buttons, Grids und andere Standardsachen kümmern.  </p>
<p>Da diese CSS Styles nun nicht mehr H5BP oder Bootstrap spezifisch sind lagert man sie am besten in ein eigenes Stylesheet aus. Dieses muss man dann natürlich auch wieder im <code>header</code> der Seite einbinden.</p>
<h4>Das Layout</h4>
<p>Bevor es an die Sidebar, das Chatfenster und die Chatnachrichten geht müssen erst einmal ein paar grundlegende Dinge für das Layout definiert werden.</p>
<pre class="brush: css">
	  .container &gt; footer p {
        text-align: center; 
      }
      .container {
        width: 820px; 
      }

      .content {
        background-color: #fff;
        padding: 20px;
        margin: 0 -20px; 
        -webkit-border-radius: 0 0 6px 6px;
           -moz-border-radius: 0 0 6px 6px;
                border-radius: 0 0 6px 6px;
        -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.15);
           -moz-box-shadow: 0 1px 2px rgba(0,0,0,.15);
                box-shadow: 0 1px 2px rgba(0,0,0,.15);
      }

      .page-header {
        background-color: #f5f5f5;
        padding: 20px 20px 10px;
        margin: -20px -20px 20px;
      }


      .content .span10,
      .content .span4 {
        min-height: 500px;
      }

      .content .span4 {
        margin-left: 0;
        padding-left: 19px;
        border-left: 1px solid #eee;
      }

      .topbar .btn {
        border: 0;
      }
</pre>
<h4>Das Chatfenster und die Nachrichten</h4>
<p>Wie schon bereits angedeutet, sitzt das Chatfenster am unteren Rand fest am Browserfenster und die Größe des Textfeldes soll sich dynamisch verhalten. Um das dynamische Verhalten zu erreichen werden transitions verwendet, diese stehen erst ab CSS3 zur Verfügung. Mit Transitions können kleinere <a href="http://staticfloat.com/2011/09/12/css-transitions-animationen-ohne-javascript/">Animationen mit CSS</a> erreicht werden, ohne Javascript zu verwenden.</p>
<pre class="brush: css">
      #chat-box{
      	position:fixed;
      	bottom:0px;
      	border:5px solid transparent;
      	left:25%;
      	background:#E0E0E0;
      	box-shadow:0px 0px 6px gray;
      	padding:5px;
      	-moz-transition:background 0.5s linear;
      }

      #chat-box:hover {
      	background:#C2C2C2;
      }

      #chat-messages{
        overflow: y-scroll;
        max-height:500px;
        height:500px;
      }

      #chat-box textarea{
        height:50px; 
        width:500px
      }

      #chat-box .message-input-wrapper{
        float: left;
      }

      #chat-box .button-input-wrapper{
        float:left;
        margin-left:10px;
      }

      #chat-box input[type=&quot;text&quot;] {
        -moz-transition: width 0.5s linear;
        -webkit-transition: width 0.5s linear;
      }

      #chat-box input[type=&quot;text&quot;]:focus {
        width:400px;
        color: #2f2f2f;
      }
      
      .small-date {
        color:gray;
        font-size:10px;
        display: block;
        margin-top:8px;
      }
</pre>
<h4>Die Sidebar</h4>
<p>In der Sidebar muss nur die Liste und die Listenelemente gestyled werden. Bei der unsortierten Liste ist es wichtig, dass keine Aufzählungssymbole verwendet werden. Die Listenelemente werden als Blockelemente dargestellt, damit diese schön untereinander platziert werden.</p>
<pre class="brush: css">
      ul.online-list {
      	list-style-type:none;
        margin: 0 auto;


      }

      ul.online-list li{
      	padding:5px;
      	margin:5px 0px;
      	text-align:center;
      	background:#d6d6d6;
        display: block;
      }


      ul.online-list li:hover{
      	background:black;
      	color:white;
      }
</pre>
<h3>Fazit</h3>
<p>H5BP und Twitter Bootstrap bieten, mit einander kombiniert, eine extrem solide Grundlage für Templates oder ganze Webanwendungen. Das hier gezeigte Chat Template ist nur ein Beispiel und zeigt mit wie wenig Aufwand so etwas umzusetzen ist. </p>
<p><a href="http://demo.staticfloat.com/chat_tem/staticfloat_com_chat.rar">Download</a> <br/><br />
<a href="http://demo.staticfloat.com/chat_tem/">Demo</a></p>
<img src="http://feeds.feedburner.com/~r/Staticfloat/~4/XgjHlv-t93M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://staticfloat.com/csshtmlxml/chat-template-auf-basis-von-h5bp-und-twitter-bootstrap/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://staticfloat.com/csshtmlxml/chat-template-auf-basis-von-h5bp-und-twitter-bootstrap/</feedburner:origLink></item>
		<item>
		<title>Responsive Nav – Schlanke Javascript Libary für eine responsive Navigation</title>
		<link>http://feedproxy.google.com/~r/Staticfloat/~3/tuo1n0Y41lU/</link>
		<comments>http://staticfloat.com/javascript/responsive-nav-schlanke-javascript-libary-fur-eine-responsive-navigation/#comments</comments>
		<pubDate>Wed, 24 Apr 2013 11:26:02 +0000</pubDate>
		<dc:creator>m0d</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[responsive]]></category>

		<guid isPermaLink="false">http://staticfloat.com/?p=5660</guid>
		<description><![CDATA[Es gibt viele Ansätze um eine Navigation responsive zu machen, meistens verwendet man ein Grid-System und @media-queries. Responsive Nav geht aber noch einen (kleinen) Schritt weiter und hilft einem dabei, dass die Navigation auf kleinen Displays nicht unübersichtlich wird. Außerdem ist die Verwendung sehr einfach und straight forward. Responsive Nav Responsive Nav ist eine freie, [...]]]></description>
				<content:encoded><![CDATA[<p>Es gibt viele Ansätze um eine Navigation responsive zu machen, meistens verwendet man ein Grid-System und @media-queries. Responsive Nav geht aber noch einen (kleinen) Schritt weiter und hilft einem dabei, dass die Navigation auf kleinen Displays nicht unübersichtlich wird. Außerdem ist die Verwendung sehr einfach und straight forward.<br />
<span id="more-5660"></span></p>
<figure class="img">
 <img src="http://cdn.staticfloat.com/wp-content/uploads/2013/04/responsive-nav.png" alt="responsive nav Responsive Nav – Schlanke Javascript Libary für eine responsive Navigation " width="800" height="392" class="alignnone size-full wp-image-5662" title="Responsive Nav – Schlanke Javascript Libary für eine responsive Navigation " /><br />
</figure>
<h3>Responsive Nav</h3>
<p><a href="http://responsive-nav.com/" target="_blank">Responsive Nav</a> ist eine freie, Open Source Javascript Libary die nur 1,7kB groß ist und (wenn möglich) auf native CSS3 Eigenschaften zurückgreift. Dabei löst Responsive Nav einige Probleme, die allein mit CSS3 nicht möglich sind. So kann mittels CSS3 keine Animation der Höhe 0 auf die dynamische Höhe <code>auto</code> erfolgen. Die Libary steht unter der MIT Lizenz und kann damit für sämtliche Projekte, ohne Einschränkungen verwendet werden.</p>
<h4>Features</h4>
<p>Auf der offiziellen Plugin Seite sind alle Features von Responsive Nav aufgelistet, deswegen gebe ich hier nur noch einen kurzen Überblick.</p>
<ul>
<li>Minified und Gzipped nur ~1,7kB groß</li>
<li>Benötigt keine anderen Libaries wie jQuery etc.</li>
<li>Verwendet CSS3 Transitions und Touch Events, für beste Performance</li>
<li>Entfernt die 300ms Delay, die zwischen einem Touch aufs Display und dem Auslösen des Click Events liegen</li>
<li>Ermöglicht die Vernwedung von CSS3 Transitions mit <code>height:auto</code></li>
<li>Website wird nicht zerschossen, wenn Javascript deaktiviert ist</li>
<li>Crossbrowser-kompatibel mit praktisch allen Browsern, selbst IE6+</li>
</ul>
<h4>Anwendung</h4>
<p>Responsive Nav kann theoretisch mit einer Zeile Code verwendet werden. Zunächst aber müssen die notwendigen CSS und Javascript Files eingebunden werden.</p>
<pre class="brush: html">
&lt;link rel=&quot;stylesheet&quot; href=&quot;responsive-nav.css&quot;&gt;
&lt;script src=&quot;responsive-nav.js&quot;&gt;&lt;/script&gt;
</pre>
<p>Danach muss man nur noch das gewünschte Navigationsmenü an Responsive Nav binden.</p>
<pre class="brush: js">

// ohne Anpassung der Optionen
var navigation = responsiveNav(&quot;#nav&quot;);

// mit Anpassung der Optionen 
var navigation = responsiveNav(&quot;#nav&quot;, { // Selector: The ID of the wrapper
  animate: true, // Boolean: Use CSS3 transitions, true or false
  transition: 400, // Integer: Speed of the transition, in milliseconds
  label: &quot;Menu&quot;, // String: Label for the navigation toggle
  insert: &quot;after&quot;, // String: Insert the toggle before or after the navigation
  customToggle: &quot;&quot;, // Selector: Specify the ID of a custom toggle
  openPos: &quot;relative&quot;, // String: Position of the opened nav, relative or static
  jsClass: &quot;js&quot;, // String: &#039;JS enabled&#039; class which is added to &lt;html&gt; el
  init: function(){}, // Function: Init callback
  open: function(){}, // Function: Open callback
  close: function(){} // Function: Close callback
});
</pre>
<p>Zusätzlich stehen noch 2 öffentliche Methoden zur Verfügung, eine um Responsive Nav zu deaktvieren und eine, um das Navigationsmenü ein- und auszuklappen.</p>
<pre class="brush: js">
// Zerstören
navigation.destroy();

// Toggle
navigation.toggle();
</pre>
<h4>Demo und Funktionsweise</h4>
<p>Zu guter Letzt noch eine <a rel="nofollow" href="http://responsive-nav.com/demo/" target="_blank">Demo</a>, die zeigt, wie eine Navigation mit Hilfe von Responsive Nav aussehen könnte. Responsive Nav <strong>verändert keine HTML Struktur</strong>! Das Plugin ist <em>nur</em>&nbsp; dafür da, die vorhandene Navigation zu verstecken und per Toggle wieder einzublenden. Dabei werden aber Probleme gelöst, die rein mit CSS3 nicht möglich wären.</p>
<img src="http://feeds.feedburner.com/~r/Staticfloat/~4/tuo1n0Y41lU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://staticfloat.com/javascript/responsive-nav-schlanke-javascript-libary-fur-eine-responsive-navigation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://staticfloat.com/javascript/responsive-nav-schlanke-javascript-libary-fur-eine-responsive-navigation/</feedburner:origLink></item>
		<item>
		<title>Drag &amp; Drop Upload mit Dropzone.js</title>
		<link>http://feedproxy.google.com/~r/Staticfloat/~3/g543D3e26gg/</link>
		<comments>http://staticfloat.com/javascript/drag-drop-upload-mit-dropzone-js/#comments</comments>
		<pubDate>Tue, 23 Apr 2013 13:55:48 +0000</pubDate>
		<dc:creator>m0d</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://staticfloat.com/?p=5639</guid>
		<description><![CDATA[Dropzone.js ist eine kleine aber sehr mächtige Javascript Libary, die einem dabei hilft Dateiuploads per Drag &#38; Drop zu realisieren. Heute schauen wir uns an, wie man innerhalb von wenigen Minuten einen Drag &#38; Drop Uploader in eine Website integrieren kann. Dropzone.js Bevor es los geht werfen wir zuerst einmal einen Blick auf den fertigen [...]]]></description>
				<content:encoded><![CDATA[<p>Dropzone.js ist eine kleine aber sehr mächtige Javascript Libary, die einem dabei hilft Dateiuploads per Drag &amp; Drop zu realisieren. Heute schauen wir uns an, wie man innerhalb von wenigen Minuten einen Drag &amp; Drop Uploader in eine Website integrieren kann.<br />
<span id="more-5639"></span></p>
<figure class="img">
<img src="http://cdn.staticfloat.com/wp-content/uploads/2013/04/dropzone-js.png" alt="dropzone js Drag &amp; Drop Upload mit Dropzone.js" width="664" height="279" class="alignnone size-full wp-image-5641" title="Drag &amp; Drop Upload mit Dropzone.js" /><br />
</figure>
<h4>Dropzone.js</h4>
<p>Bevor es los geht werfen wir zuerst einmal einen Blick auf den fertigen <a href="http://demo.staticfloat.com/dropzone/" target="_blank">Drag &amp; Drop Uploader</a>. In der Demo werden keinerlei Bilder gespeichert, es kann also ein wenig damit experimentiert werden. </p>
<p>Wenn einem dieser Uploader direkt so wie er ist gefällt, kann man alle dazu benötigten Files direkt auf der Github-Seite von <a rel="nofollow" href="https://github.com/enyo/dropzone" target="_blank">Dropzone.js downloaden</a>.</p>
<p>Dropzone.js ist eine unabhängige Libary, das heißt, dass jQuery nicht zwingend erforderlich ist um Dropzone zu verwenden. Wenn man aber sowieso jQuery benutzt, kann man Dropzone auch ähnlich wie ein Plugin für jQuery verwenden. Dazu später noch etwas mehr, als erstes müssen alle benötigten Files inkludiert werden.</p>
<pre class="brush: html">
&lt;link href=&quot;css/dropzone.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; /&gt; 
&lt;script src=&quot;dropzone.min.js&quot;&gt;&lt;/script&gt;
...
&lt;!-- weiter unten irgendwann --&gt;
&lt;form action=&quot;upload.php&quot; class=&quot;dropzone&quot;&gt;&lt;/form&gt;
</pre>
<p>Formulare mit der Klasse <code>dropzone</code> werden automatisch zu Drag &amp; Drop Uploadern umgewandelt. Um weitere Formattribute wie <code>enctype</code> oder <code>method</code> muss man sich nicht kümmern, dies macht Dropzone automatisch, beziehungsweise kann über Dropzone auch manuell eingestellt werden.</p>
<h4>Code</h4>
<p>Die obigen 3 Zeilen reichen bereits aus, um Dateien hochzuloaden. Natürlich fehlt noch die Serverseite, um die Dateien zu speichern und zu validieren. Wenn man etwas flexibler sein möchte, kann man das Uploadformular auch per Javascript erzeugen. Wie vorher bereits angesprochen, kann Dropzone sowohl eigenständig als auch als jQuery Plugin verwendet werden.</p>
<pre class="brush: js">
// entweder mit jQuery
$(&quot;div#myId&quot;).dropzone({ url: &quot;/file/post&quot; });

// oder ohne jQuery
var myDropzone = new Dropzone(&quot;div#myId&quot;, { url: &quot;/file/post&quot;})
</pre>
<p>Auf bereits instanziierte &#8220;Dropzones&#8221; kann man über folgende Methode zugreifen:</p>
<pre class="brush: js">
var myDropzone = Dropzone.forElement(&quot;#my-dropzone&quot;);
</pre>
<h4>Callbacks</h4>
<p>Dropzone bietet auch die Möglichkeit bei praktisch jeder Aktion eine Callbackfunktion aufzurufen. Damit kann z.B. geprüft werden, ob der Name der Datei bestimmten Vorgaben entspricht oder ähnliches (ersetzt aber nicht serverseitige Prüfung!). Eine Übersicht über alle von Dropzone ausgelösten Events findet man auf <a href="http://www.dropzonejs.com/" target="_blank">Dropzonejs.com</a>.</p>
<p><strong>Datei kurz vor dem Senden</strong></p>
<pre class="brush: js">
myDropzone.on(&quot;sending&quot;, function(file) {
  alert(&#039;Die Datei wird jeden Moment an den Server geschickt! WURDE ABER BISHER NOCH NICHT!&#039;);
});
</pre>
<p><strong>Datei hinzugefügt</strong></p>
<pre class="brush: js">
myDropzone.on(&quot;addedfile&quot;, function(file) {
  alert(&#039;Neue Datei wurde hinzugefügt.&#039;)
});
</pre>
<p><strong>Datei vollständig hochgeladen</strong></p>
<pre class="brush: js">
myDropzone.on(&quot;addedfile&quot;, function(file) {
  alert(&#039;Datei erfolgreich hochgeladen, oder Fehler!&#039;);
});
</pre>
<img src="http://feeds.feedburner.com/~r/Staticfloat/~4/g543D3e26gg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://staticfloat.com/javascript/drag-drop-upload-mit-dropzone-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://staticfloat.com/javascript/drag-drop-upload-mit-dropzone-js/</feedburner:origLink></item>
		<item>
		<title>PHP Form-Validierung leicht gemacht mit Validation.php</title>
		<link>http://feedproxy.google.com/~r/Staticfloat/~3/o8Drst6bhuk/</link>
		<comments>http://staticfloat.com/php-programmieren/php-form-validierung-leicht-gemacht-mit-validation-php/#comments</comments>
		<pubDate>Mon, 22 Apr 2013 10:43:24 +0000</pubDate>
		<dc:creator>m0d</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://staticfloat.com/?p=5621</guid>
		<description><![CDATA[Wenn man eine Webplattform entwickelt kommt man früher oder später nicht drum herum Formulare zu verarbeiten. Jedes Formular das von einem Besucher stammt muss auf Serverseite validiert werden. Heute schauen wir uns die PHP Bibliothek Validation an, die einem viel Arbeit bei der Validierung abnehmen kann. Validation Validation behauptet von sich selbst, die großartigste Validierungsengine [...]]]></description>
				<content:encoded><![CDATA[<p>Wenn man eine Webplattform entwickelt kommt man früher oder später nicht drum herum Formulare zu verarbeiten. Jedes Formular das von einem Besucher stammt muss auf Serverseite validiert werden. Heute schauen wir uns die PHP Bibliothek Validation an, die einem viel Arbeit bei der Validierung abnehmen kann.<br />
<span id="more-5621"></span></p>
<h3>Validation</h3>
<p><a href="https://github.com/Respect/Validation" target="_blank">Validation</a> behauptet von sich selbst, die großartigste Validierungsengine für PHP zu sein. Ob das stimmt schauen wir uns jetzt an, was ich aber schon vorweg nehmen kann ist, dass Validation seinen Job ziemlich gut macht.</p>
<p>Validation bietet über 30 verschiedene Validatoren mit denen fast alles validiert werden kann. Von einfachen Dingen wie der Prüfung, ob ein gegebener Wert ein Zahl ist, bis hin zu (in diesem Fall nicht wirklich) komplexeren Aufgaben, wie der Prüfung ob ein gegebener Wert positiv ist und in einem bestimmten Bereich liegt.</p>
<p>Validation liegt in einem eigenen Namespace, deswegen ist zwingend eine PHP Version erforderlich die Namespaces unterstützt (5.3). Um die Verwendung einfach zu machen importieren wir die Klasse in unser Script mit <code>use .... as</code>.</p>
<h4>Verwendung</h4>
<pre class="brush: php">
use Respect\Validation\Validator as v;
</pre>
<p>Nun können beliebige Werte validiert werden. Wenn man z.B. einen Wert auf eine Zahl prüfen möchte geht das folgendermaßen:</p>
<pre class="brush: php">
$number = 123;
v::numeric()-&gt;validate($number); //true
</pre>
<p>Es ist außerdem möglich, mehrere Prüfungskriterien miteinander zu verketten.</p>
<pre class="brush: php">
// Kein Whitespace und Länge zwischen 1 und 15 Zeichen
$usernameValidator = v::alnum()-&gt;noWhitespace()-&gt;length(1,15);
$usernameValidator-&gt;validate(&#039;alganet&#039;); // true
$usernameValidator-&gt;validate(&#039;alg anet&#039;); // false
</pre>
<h4>Objektattribute</h4>
<p>Auch komplette Objekte bzw. deren Attribute können validiert werden. Im folgenden Beispiel werden die Daten eines Benutzers geprüft, wie man sieht sind auch Dinge wie die Überprüfung eines Mindestalters anhand des Geburtsdatums kein Problem.</p>
<pre class="brush: php">
$user = new stdClass;
$user-&gt;name = &#039;Alexandre&#039;;
$user-&gt;birthdate = &#039;1987-07-01&#039;;

$userValidator = v::attribute(&#039;name&#039;, v::string()-&gt;length(1,32))
                  -&gt;attribute(&#039;birthdate&#039;, v::date()-&gt;minimumAge(18)); 

$userValidator-&gt;validate($user); //true
</pre>
<h4>Negieren</h4>
<p>Manchmal ist es einfacher zu sagen wie es nicht sein soll, als zu sagen wie es sein soll. Deswegen bietet Validation die Möglichkeit jede Regel zu negieren.</p>
<pre class="brush: php">
$usernameValidator = v::not(v::alnum()-&gt;noWhitespace()-&gt;length(1,15));
$usernameValidator-&gt;validate(&#039;alganet&#039;); // false
$usernameValidator-&gt;validate(&#039;alg anet&#039;); // false (weil 1,15 Zeichen)
$usernameValidator-&gt;validate(&#039;123233 alg anet&#039;); // true
</pre>
<h4>Fehlermeldungen</h4>
<p>Wenn man dem Benutzer mitteilen möchte was er falsch gemacht hat, bietet Validation auch hier die Möglichkeit dies zu tun &#8211; und zwar mit der Methode <code>assert()</code>.</p>
<pre class="brush: php">
try {
   $usernameValidator-&gt;assert(&#039;really messed up screen#name&#039;);
} catch(\InvalidArgumentException $e) {
   echo $e-&gt;getFullMessage();
}

// Ausgabe
/*
\-All of the 3 required rules must pass
  |-&quot;really messed up screen#name&quot; must contain only letters (a-z) and digits (0-9)
  |-&quot;really messed up screen#name&quot; must not contain whitespace
  \-&quot;really messed up screen#name&quot; must have a length between 1 and 15
*/
</pre>
<p>Um eigene Fehlermeldungen zu setzen, manipuliert man den Array der Nachrichten entsprechend. Wobei <code>{{name}}</code> und <code>{{input}}</code> als Variablen zu Verfügung stehen und automatisch durch die entsprechenden Eingabedaten ersetzt werden.</p>
<pre class="brush: php">
$errors = $e-&gt;findMessages(array(
        &#039;alnum&#039;        =&gt; &#039;{{name}} must contain only letters and digits&#039;,
        &#039;length&#039;       =&gt; &#039;{{name}} must not have more than 15 chars&#039;,
        &#039;noWhitespace&#039; =&gt; &#039;{{name}} cannot contain spaces&#039;
    ));
</pre>
<h4>Fazit</h4>
<p>Validation ist eine sehr gute und einfach zu benutzende Bibliothek, wer also gerade eine Plattform entwickelt sollte nicht unbedingt seine Zeit in die Entwicklung einer Klasse zur Validierung von Formulardaten stecken. Denn erstens ist Validation Open Source und geprüft auf Sicherheitslücken und zweitens kostet es viel Zeit und man erfindet das Rad zum x-ten mal neu.</p>
<img src="http://feeds.feedburner.com/~r/Staticfloat/~4/o8Drst6bhuk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://staticfloat.com/php-programmieren/php-form-validierung-leicht-gemacht-mit-validation-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://staticfloat.com/php-programmieren/php-form-validierung-leicht-gemacht-mit-validation-php/</feedburner:origLink></item>
		<item>
		<title>5 jQuery Plugins die es in sich haben</title>
		<link>http://feedproxy.google.com/~r/Staticfloat/~3/kNDjRhmSXgo/</link>
		<comments>http://staticfloat.com/javascript/5-jquery-plugins-die-es-in-sich-haben/#comments</comments>
		<pubDate>Sun, 21 Apr 2013 15:23:37 +0000</pubDate>
		<dc:creator>m0d</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jq]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://staticfloat.com/?p=5606</guid>
		<description><![CDATA[jQuery hat eine riesige Community und viele Programmierer und Webdesigner leisten einen großen Beitrag dazu, warum jQuery so toll ist. Jeden Monat kommen neue Plugins hinzu, wobei die meisten kostenlos und ohne Einschränkungen der Community bereitgestellt werden. Heute schauen wir uns 5 Plugins an, die alle wirklich großartig sind. iCheck Custom Checkbox Das erste Plugin [...]]]></description>
				<content:encoded><![CDATA[<p>jQuery hat eine riesige Community und viele Programmierer und Webdesigner leisten einen großen Beitrag dazu, warum jQuery so toll ist. Jeden Monat kommen neue Plugins hinzu, wobei die meisten kostenlos und ohne Einschränkungen der Community bereitgestellt werden. Heute schauen wir uns 5 Plugins an, die alle wirklich großartig sind.<br />
<span id="more-5606"></span></p>
<h4>iCheck Custom Checkbox</h4>
<p>Das erste Plugin ist <a href="http://damirfoy.com/iCheck/" target="_blank">iCheck</a> von Damir Foy. Mit iCheck können Checkboxen und Radio Buttons auf jede erdenkliche Weise individualisiert werden. Das Plugin lässt sich zudem sehr einfach verwenden, nachdem alle benötigten Javascript und CSS Dateien inkludiert sind, sind nur noch wenige Zeilen Code notwendig. Zusätzlich kommt iCheck mit einer Reihe von Themes die ohne jegliche CSS Kenntnisse direkt verwendet werden können.</p>
<pre class="brush: js">
$(document).ready(function(){
    $(&#039;input&#039;).iCheck({
        checkboxClass: &#039;icheckbox_minimal&#039;,
        radioClass: &#039;iradio_minimal&#039;
    });
});
</pre>
<figure class="img">
<img src="http://cdn.staticfloat.com/wp-content/uploads/2013/04/checkbox.png" alt="checkbox 5 jQuery Plugins die es in sich haben" width="938" height="368" class="alignnone size-full wp-image-5555" title="5 jQuery Plugins die es in sich haben" /><br />
</figure>
<h4>jQuery Knob</h4>
<p><a href="http://anthonyterrien.com/knob/" target="_blank">jQuery Knob</a> ist ein Plugin um <em>input</em>&nbsp; Elemente in kreisrunde Statusanzeigen zu transformieren. Dazu verwendet das Plugin Canvas, weshalb ältere Browser nicht nativ unterstützt werden.</p>
<pre class="brush: html">
&lt;input class=&quot;knob&quot; data-width=&quot;100&quot; data-cursor=true data-fgColor=&quot;#222222&quot; data-thickness=&quot;0.4&quot; value=&quot;50&quot;&gt;
</pre>
<figure class="img">
<img src="http://cdn.staticfloat.com/wp-content/uploads/2013/04/jquery-knob.png" alt="jquery knob 5 jQuery Plugins die es in sich haben" width="830" height="314" class="alignnone size-full wp-image-5608" title="5 jQuery Plugins die es in sich haben" /><br />
</figure>
<h4>Pickadate.js</h4>
<p><a href="http://amsul.ca/pickadate.js/" target="_blank">Pickdate</a> ist wie der Name schon erahnen lässt ein Datepicker basierend auf jQuery. Das Plugin erzeugt mit einer Zeile Code einen Datepicker, der auch auf mobilen Geräten problemlos funktioniert. Der Datepicker kann mittels CSS an die eigenen Wünsche angepasst und individualisiert werden. Wer also in einem Projekt einen Datepicker einbauen möchte, macht mit Pickdate.js nichts falsch. </p>
<pre class="brush: js">
$(&#039;.datepicker&#039;).pickadate();
</pre>
<figure class="img">
<img src="http://cdn.staticfloat.com/wp-content/uploads/2013/04/jquery-pickdate.png" alt="jquery pickdate 5 jQuery Plugins die es in sich haben" width="692" height="456" class="alignnone size-full wp-image-5611" title="5 jQuery Plugins die es in sich haben" /><br />
</figure>
<h4>Toolbar.js</h4>
<p><a href="http://paulkinzett.github.io/toolbar/" target="_blank">Toolbar.js</a> ist ein jQuery Plugin das einem dabei hilft PopUp- bzw. Tooltip- Menüs zu erstellen. Das Plugin eignet sich also vor allem dann, wenn man nicht viel Platz zur Verwendung hat. Dies kann z.B. bei mobilen WebApplikationen der Fall sein.</p>
<pre class="brush: js">
$(&#039;#user-toolbar&#039;).toolbar({
	content: &#039;#user-toolbar-options&#039;, 
	position: &#039;top&#039;
});
</pre>
<figure class="img">
<img src="http://cdn.staticfloat.com/wp-content/uploads/2013/04/toolbar-js.png" alt="toolbar js 5 jQuery Plugins die es in sich haben" width="860" height="442" class="alignnone size-full wp-image-5613" title="5 jQuery Plugins die es in sich haben" /><br />
</figure>
<h4>jQuery Countdown</h4>
<p>Das letzte Plugin dieser Liste ist <a href="http://tutorialzine.com/2011/12/countdown-jquery/" target="_blank">jQuery Countdown</a>. jQuery Countdown zeigt die verbleibenden Stunden, Minuten, Sekunden bis zu einem bestimmten Zeitpunkt an. Damit eignet sich das Plugin vor allem für &#8220;Coming Soon&#8221; Seiten. Die Verwendung ist extrem einfach und der Counter kann mit Hilfe der beiliegenden CSS Styles nach Belieben angepasst werden.</p>
<pre class="brush: js">
$(&#039;#countdown&#039;).countdown({
    timestamp   : new Date(2014, 0, 5) // 5 Januar 2014
}
</pre>
<figure class="img">
<img src="http://cdn.staticfloat.com/wp-content/uploads/2013/04/jquery-countdown.png" alt="jquery countdown 5 jQuery Plugins die es in sich haben" width="664" height="295" class="alignnone size-full wp-image-5615" title="5 jQuery Plugins die es in sich haben" /><br />
</figure>
<h4>Noch mehr Plugins?</h4>
<p>Wer ein Plugin kennt das in dieser Liste eigentlich nicht fehlen darf, immer her damit!</p>
<img src="http://feeds.feedburner.com/~r/Staticfloat/~4/kNDjRhmSXgo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://staticfloat.com/javascript/5-jquery-plugins-die-es-in-sich-haben/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://staticfloat.com/javascript/5-jquery-plugins-die-es-in-sich-haben/</feedburner:origLink></item>
		<item>
		<title>Eigene Custom Scrollbar mit jQuery</title>
		<link>http://feedproxy.google.com/~r/Staticfloat/~3/pFXpvVAAVUE/</link>
		<comments>http://staticfloat.com/javascript/eigene-custom-scrollbar-mit-jquery/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 12:34:04 +0000</pubDate>
		<dc:creator>m0d</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jq]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://staticfloat.com/?p=5561</guid>
		<description><![CDATA[Es ist mal wieder Zeit für ein paar Artikel! Heute schauen wir uns an, wie man mit dem jQuery Plugin Custom Scrollbar&#160; Scrollbars zu jedem beliebigen Container hinzufügen kann. Diese sehen in den meisten Fällen besser aus als die Standardscrollbars der Browser, außerdem ist es so möglich sicherzustellen, dass die Scrollbars plattform- und browserübergreifend gleich [...]]]></description>
				<content:encoded><![CDATA[<p>Es ist mal wieder Zeit für ein paar Artikel! Heute schauen wir uns an, wie man mit dem jQuery Plugin <em>Custom Scrollbar</em>&nbsp; Scrollbars zu jedem beliebigen Container hinzufügen kann. Diese sehen in den meisten Fällen besser aus als die Standardscrollbars der Browser, außerdem ist es so möglich sicherzustellen, dass die Scrollbars plattform- und browserübergreifend gleich aussehen.<br />
<span id="more-5561"></span></p>
<figure class="img">
<img src="http://cdn.staticfloat.com/wp-content/uploads/2013/04/custom_scrollbar.png" alt="custom scrollbar Eigene Custom Scrollbar mit jQuery" width="895" height="396" class="alignnone size-full wp-image-5562" title="Eigene Custom Scrollbar mit jQuery" /><br />
</figure>
<h4>Custom Scrollbar Dateien</h4>
<p>Bevor wir loslegen können, muss zuerst das Plugin heruntergeladen werden. Wer dem englischen mächtig ist, findet auf der <a href="http://manos.malihu.gr/jquery-custom-content-scroller/" target="_blank">Plugin-Seite</a> eine detaillierte Anleitung und auch viele Demos. Für alle anderen gibt es hier einen kleinen Quickstartguide.</p>
<p>Das Plugin besteht aus einem Script und einem Stylesheet, beide Dateien müssen eingebunden werden damit die Scrollbars funktionieren. Zunächst sollte man das Stylesheet direkt in den Headerbereich der Website einbinden.</p>
<pre class="brush: html">
&lt;link href=&quot;jquery.mCustomScrollbar.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
</pre>
<p>Als nächstes muss das Script eingebunden werden, wo das Ganze passiert ist eigentlich egal, es ist nur wichtig, dass jQuery vor dem Script eingebunden wird. Aus Performancegründen sollte man Javascript Dateien immer im unteren Bereich des HTML Dokuments einbinden. Wer wissen möchte warum das so ist, kann sich den Artikel <a href="http://staticfloat.com/javascript/javascript-best-practices/" target="_blank">Javascript Best Practices </a> durchlesen.</p>
<pre class="brush: html">
&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;jquery.mCustomScrollbar.concat.min.js&quot;&gt;&lt;/script&gt;
</pre>
<h4>Scrollbar aktivieren</h4>
<p>Nachdem alle notwendigen Dateien eingebunden sind können die Scrollbars auch direkt verwendet werden. Dazu ruft man die Methode <code>mCustomScrollbar()</code> für das Element auf, zu dem man die Scrollbar hinzufügen möchte. Damit sichergestellt wird, dass die Methode auch erst ausgeführt wird, wenn alle benötigten Dateien geladen sind, greift man auf die jQuery <code>ready()</code> Methode zurück.</p>
<pre class="brush: js">
(function($){
        $(window).load(function(){
            $(&quot;.content&quot;).mCustomScrollbar();
        });
    })(jQuery);
</pre>
<p>Es gibt unzählige Möglichkeiten, die Scrollbars nach eigenem Belieben einzustellen. Im Folgenden werden einige der wichtigsten vorgestellt, eine detaillierte Auflistung aller möglichen Optionen, gibts auf der offiziellen Seite.</p>
<p>Hierbei passt sich die Scrollbar automatisch und dynamisch an die Größe des Containers an. </p>
<pre class="brush: js">
$(&quot;.content&quot;).mCustomScrollbar({
    advanced:{
        updateOnContentResize: true
    }
});
</pre>
<p><br /><br />
Es gibt auch die Möglichkeit horizontale Scrollbars zu verwenden.</p>
<pre class="brush: js">
$(&quot;.content&quot;).mCustomScrollbar({
    horizontalScroll:true
});
</pre>
<p><br /><br />
Je nach Websitedesign stehen verschiedene <a rel="nofollow" href="http://manos.malihu.gr/tuts/custom-scrollbar-plugin/scrollbar_themes_demo.html" target="_blank">Themes</a> zur Verfügung.</p>
<pre class="brush: js">
$(&quot;.content&quot;).mCustomScrollbar({
    theme:&quot;light&quot;
});
</pre>
<p><br /><br />
Natürlich ist es auch möglich, sämtliche verfügbare Optionen miteinander zu kombinieren.</p>
<img src="http://feeds.feedburner.com/~r/Staticfloat/~4/pFXpvVAAVUE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://staticfloat.com/javascript/eigene-custom-scrollbar-mit-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://staticfloat.com/javascript/eigene-custom-scrollbar-mit-jquery/</feedburner:origLink></item>
		<item>
		<title>Javascript und Social Media Buttons asynchron laden</title>
		<link>http://feedproxy.google.com/~r/Staticfloat/~3/cijLgEJJvdk/</link>
		<comments>http://staticfloat.com/javascript/javascript-und-social-media-buttons-asynchron-laden/#comments</comments>
		<pubDate>Wed, 13 Mar 2013 11:43:34 +0000</pubDate>
		<dc:creator>m0d</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://staticfloat.com/?p=5542</guid>
		<description><![CDATA[Jedes Script das von einer externen (aber auch lokalen) Quelle geladen werden muss, verursacht einen zusätzlichen HTTP Request und verlängert damit die Ladezeit der Website. In diesem Artikel wollen wir uns anschauen, wie Scripte und damit auch Social Media Buttons asynchron geladen werden können, um nicht die gesamte Website zu blockieren. Das Problem Bei Scripten [...]]]></description>
				<content:encoded><![CDATA[<p>Jedes Script das von einer externen (aber auch lokalen) Quelle geladen werden muss, verursacht einen zusätzlichen HTTP Request und verlängert damit die Ladezeit der Website. In diesem Artikel wollen wir uns anschauen, wie Scripte und damit auch Social Media Buttons asynchron geladen werden können, um nicht die gesamte Website zu blockieren.<br />
<span id="more-5542"></span></p>
<figure class="img">
<img src="http://cdn.staticfloat.com/wp-content/uploads/2011/05/js.png" alt="js Javascript und Social Media Buttons asynchron laden" width="800" height="177" class="size-full wp-image-487" title="Javascript und Social Media Buttons asynchron laden" /><br />
</figure>
<h4>Das Problem</h4>
<p>Bei Scripten die auf einem anderen Server liegen kann man nie mit Sicherheit sagen, wie lange die Ladezeit ist. Sollte der Server im schlimmsten Fall sogar down sein, muss man die komplette Zeit bis zum Timeout abwarten. Beim <em>normalen</em> laden eines Scripts kommt es zu zwei Problemen, die die Ladezeit der Website beeinflussen. Zum einem wird der <strong>Parser geblock</strong> d.h. alles was nach dem Script im Markup steht wird erst geparst und angezeigt, wenn das Script vollständig geladen und geparst wurde. Dies ist außerdem auch ein Grund, warum man aus performancetechnischer Sicht, Scripte immer erst am Ende des Markups einbinden sollte.</p>
<p>Das zweite Problem ist, dass wenn ein Script geladen wird <strong>keine weiteren Ressourcen gleichzeitig</strong> geladen werden. Dieses Problem ist bei vielen neuen Browsern aber nicht mehr so schlimm, der IE7 hingegen lädt aber z.B. keine andere Ressource, bis das Script fertig geladen ist. Dies kann dann natürlich im Falle, dass der Server nur sehr schlecht erreichbar ist zu sehr langen Ladezeiten der eigenen Website führen.</p>
<h4>Javascript asynchron laden</h4>
<p>Der bekannte Webentwickler Nicolas Gallagher hat mit der Hilfe der Community eine Javascript Methode vorgestellt, mit der Scripte über bestimmte Browser hinweg asynchron geladen werden können.</p>
<pre class="brush: js">
(function(doc, script) {
    var js, 
        fjs = doc.getElementsByTagName(script)[0],
        add = function(url, id) {
            if (doc.getElementById(id)) {return;}
            js = doc.createElement(script);
            js.src = url;
            id &amp;&amp; (js.id = id);
            fjs.parentNode.insertBefore(js, fjs);
        };
 
    // Hier stehen die Scripte die async geladen werden sollen:
    // Google Analytics
    add((&#039;https:&#039; == location.protocol ? &#039;//ssl&#039; : &#039;//www&#039;) + &#039;.google-analytics.com/ga.js&#039;, &#039;ga&#039;);
    // Google+ button
    add(&#039;https://apis.google.com/js/plusone.js&#039;);
    // Facebook SDK
    add(&#039;//connect.facebook.net/en_US/all.js&#039;, &#039;facebook-jssdk&#039;);
    // Twitter SDK
    add(&#039;//platform.twitter.com/widgets.js&#039;, &#039;twitter-wjs&#039;);
}(document, &#039;script&#039;));
</pre>
<p>Diese Technik eignet sich vor allem für Social Buttons und wird z.B. auch hier auf Staticfloat eingesetzt. Für Browser die eine weitreichende HTML5 Unterstützung haben, gibt es noch eine einfachere Methode.</p>
<pre class="brush: html">
&lt;script async src=&quot;http://example.com/resource.js&quot;&gt;&lt;/script&gt;
</pre>
<p>HTML5 bietet mit dem Attribut <code>async</code> eine Möglichkeit dem Browser zu sagen, dass es sich um eine Ressource handelt die asynchron geladen werden soll. Mit dem IE10 unterstützen mittlerweile auch praktisch alles relevanten Browser diese Methode.</p>
<img src="http://feeds.feedburner.com/~r/Staticfloat/~4/cijLgEJJvdk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://staticfloat.com/javascript/javascript-und-social-media-buttons-asynchron-laden/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://staticfloat.com/javascript/javascript-und-social-media-buttons-asynchron-laden/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.456 seconds. --><!-- Cached page generated by WP-Super-Cache on 2013-05-20 12:03:36 --><!-- Compression = gzip -->
