<?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>Service2Max &#187; Javascript Archiv  &#8211; Blog für Programmierer und Software-Architekten</title>
	<atom:link href="http://blog.service2max.ch/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.service2max.ch</link>
	<description>Technik, die begeistert</description>
	<lastBuildDate>Sat, 14 May 2011 16:47:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>ExtJS.com Webseite down und nicht erreichbar</title>
		<link>http://blog.service2max.ch/extjscom-webseite-und-nicht-erreichbar/</link>
		<comments>http://blog.service2max.ch/extjscom-webseite-und-nicht-erreichbar/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 09:12:21 +0000</pubDate>
		<dc:creator>Patrick Matsumura</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Sonstiges]]></category>

		<guid isPermaLink="false">http://blog.service2max.ch/?p=213</guid>
		<description><![CDATA[Update: Mittlerweile ist die Webseite wieder in vollem Umfang erreichbar. Scheinbar wurde die Domain extjs.com gedropped. Somit ist sie nicht mehr erreichbar und damit auch die Dokumentation, der Premium Support, das Forum und die Downloadmöglichkeiten. Damit man trotzdem keinen Entwicklungsengpass bekommt und Antworten auf seine Fragen findet, kann man die Dokumentation unter http://extjs.net/deploy/dev/docs/ benutzen. Generell [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.service2max.ch%2Fextjscom-webseite-und-nicht-erreichbar%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.service2max.ch%2Fextjscom-webseite-und-nicht-erreichbar%2F&amp;source=service2max&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><strong><em>Update</em></strong><em>: Mittlerweile ist die Webseite wieder in vollem Umfang erreichbar.</em></p>
<p>Scheinbar wurde die Domain <strong>extjs.com</strong> gedropped. Somit ist sie nicht mehr erreichbar und damit auch die Dokumentation, der Premium Support, das Forum und die Downloadmöglichkeiten.</p>
<p>Damit man trotzdem keinen Entwicklungsengpass bekommt und Antworten auf seine Fragen findet, kann man die Dokumentation unter <a title="ExtJS Documentation" href="http://extjs.net/deploy/dev/docs/" target="_blank">http://extjs.net/deploy/dev/docs/</a> benutzen. Generell ist unter<a title="ExtJS" href="http://extjs.net" target="_blank"> http://extjs.net/</a> eine &#8220;Kopie&#8221; der <strong>.com</strong> Seite. Leider verweisen viele Links auf <strong>extjs.com</strong> und damit ins Leere.</p>
<p>Evtl. werde ich auf der Domain <strong>http://extjs.li/</strong> ein Ersatzforum einrichten. Bitte sagt mir in den Kommentaren was ihr davon haltet.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.service2max.ch/extjscom-webseite-und-nicht-erreichbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial: ExtJS 3.x einrichten</title>
		<link>http://blog.service2max.ch/tutorial-extjs-30-einrichten/</link>
		<comments>http://blog.service2max.ch/tutorial-extjs-30-einrichten/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 14:19:23 +0000</pubDate>
		<dc:creator>Patrick Matsumura</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Technik]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[extjs 3]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.service2max.ch/?p=151</guid>
		<description><![CDATA[Update: Dieses Tutorial funktioniert mit allen Versionen von ExtJS 3.x. ExtJS ist ein in Javascript programmiertes Ajax-Framework, das zum Erzeugen von &#8220;echten&#8221; Webanwendungen verwendet werden kann. Es bietet nette Features wie Windows, Grids, schöne MessageBoxes und vieles mehr an. In diesem Artikel möchte ich zeigen, wie einfach das Framework zu installieren und zu nutzen ist. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.service2max.ch%2Ftutorial-extjs-30-einrichten%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.service2max.ch%2Ftutorial-extjs-30-einrichten%2F&amp;source=service2max&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><strong>Update:<em></em></strong><em> Dieses Tutorial funktioniert mit allen Versionen von ExtJS 3.x.</em></p>
<p>ExtJS ist ein in Javascript programmiertes Ajax-Framework, das zum Erzeugen von &#8220;echten&#8221; Webanwendungen verwendet werden kann. Es bietet nette Features wie Windows, Grids, schöne MessageBoxes und vieles mehr an. In diesem Artikel möchte ich zeigen, wie einfach das Framework zu installieren und zu nutzen ist.</p>
<h3>Vorbereitungen</h3>
<p>Damit eine erste kleine &#8220;Hallo Welt&#8221; Applikation mit ExtJS geschrieben werden kann, sind einige Voraussetzungen zu erfüllen. Zunächst muss die <a title="ExtJS Download" href="http://www.extjs.com/products/extjs/download.php" target="_blank">ExtJS Bibliothek</a> heruntergeladen und in ein Verzeichnis entpackt werden. Ich schlage eine Verzeichnisstruktur wie auf dem Bild vor:<br />
<img class="size-full wp-image-157" title="ExtJS Projekt: Ordnerstruktur" src="http://blog.service2max.ch/wp-content/uploads/2009/11/ordnerstruktur.png" alt="ExtJS Projekt: Ordnerstruktur" width="106" height="151" /><br />
Ausserdem empfehle ich dringend Firebug. Ein Webentwickler sollte heutzutage ohne <a title="Firebug Download" href="http://getfirebug.com/" target="_blank">Firebug Plugin</a> nicht mehr arbeiten. Es erleichtert das Finden von Fehlern, das direkte Anpassen von CSS und HTML und das Analysieren vom Datenverkehr zwischen Server und Browser. Jetzt wird noch ein Webserver zum Hosten und ein FTP-Zugang zum Speichern der HTML-Dateien benötigt.</p>
<h3>Aufbau der HTML Seite</h3>
<p>Ich gehe ab hier davon aus, dass grundlegende HTML-Kenntnisse  vorhanden sind. Damit ExtJS überhaupt funktionieren kann, braucht man natürlich eine HTML-Seite, die das Framework lädt. Nachfolgend ein kleines Grundgerüst, das ExtJS nutzbar macht.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;

    &lt;head&gt;
        &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/js/ext-3.0.3/resources/css/ext-all.css&quot;/&gt;
        &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/js/ext-3.0.3/resources/css/xtheme-blue.css&quot; /&gt;
        &lt;script src=&quot;/js/ext-3.0.3/adapter/ext/ext-base.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
        &lt;script src=&quot;/js/ext-3.0.3/ext-all-debug.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
        &lt;title&gt;Tutorial: ExtJS HTMl-Grundgerüst&lt;/title&gt;
    &lt;/head&gt;

    &lt;body&gt;
        Willkommen beim ExtJS Tutorial: Wie richtet man ExtJS 3.0 ein.
    &lt;/body&gt;

&lt;/html&gt;
</pre>
<p>Zunächst müssen wir die CSS-Dateien laden, damit die ExtJS-Elemente auch so aussehen, wie sie sollen. Ich habe mich für das blaue Theme entschieden und daher mit</p>
<pre class="brush: xml; title: ; notranslate">
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/js/ext-3.0.3/resources/css/ext-all.css&quot; /&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/js/ext-3.0.3/resources/css/xtheme-blue.css&quot; /&gt;
</pre>
<p>erst das &#8220;Grund-CSS&#8221; geladen und danach aufbauend das XTheme-Blue geladen. Evtl. werde ich ein Tutorial verfassen, wie man seine eigenen Themes erstellt und in ExtJS einbindet.</p>
<p>Die Zeilen</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script src=&quot;/js/ext-3.0.3/adapter/ext/ext-base.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;/js/ext-3.0.3/ext-all-debug.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>laden zunächst den ExtJS Basisadapter und danach die gesamte ExtJS Bibliothek in der Debugversion. Während der Entwicklung sollte die Debugversion verwendet werden, da sie in Firebug (oder jeder anderen Javascriptkonsole) &#8220;schönere&#8221; Fehlermeldungen anzeigt. Sobald das Projekt in einer Produktivumgebung laufen soll, ist es ratsam <strong>ext-all.js</strong> zu verwenden.  Diese Version ist kompakter und enthält nur sehr stark verkürzte Fehlermeldungen. Ausserdem wurden die Variablennamen häufig auf einen Buchstaben verkürzt und unnötige Zeichen wie Leerzeichen entfernt. Diesen Vorgang des &#8220;Komprimierens&#8221; nennt man auch <strong>minifying</strong>. Es verringert die Ladezeit erheblich und die Geschwindigkeit beim Ausführen von ExtJS wird um einiges höher. Eine weitere Optimierung bringt es, die <a href="http://blog.service2max.ch/gzip-komprimierung-webseite-htaccess-aktiviere/">Daten mit Gzip zu übertragen</a>.</p>
<p>Nachdem das HTML-Grundgerüst steht und es auf einen Webserver gespeichert wurde, wird die Seite aufgerufen. Ich habe sie in das Rootverzeichnis (oberhalb vom js-Verzeichnis) als index.html gespeichert. Wenn in Firebug unter dem Reiter &#8220;Netzwerk&#8221; das Resultat in etwa so aussieht, wie auf dem Screenshot, dann ist ExtJS installiert und bereit genutzt zu werden.</p>
<p><img class="alignnone size-full wp-image-171" title="Initialisierung ExtJS" src="http://blog.service2max.ch/wp-content/uploads/2009/12/firebug_extjs_init.jpg" alt="Initialisierung ExtJS" width="250" height="70" /></p>
<p>Damit das versprochene &#8220;Hallo Welt&#8221;-Fenster im Browser erscheint, werde ich den body-Bereich der Webseite etwas erweitern. Und zwar so:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
Ext.onReady(function () {
    Ext.MessageBox.show({
        title: 'Willkommen zu ExtJS',
        msg: 'Hallo Welt!',
        buttons: Ext.MessageBox.OK,
        minWidth: 250,
        modal: false
    });
});
&lt;/script&gt;
</pre>
<p>Das Ergebnis diese kleinen Code-Schnipsels sieht dann so aus:<br />
<img class="alignnone size-full wp-image-173" title="Hallo Welt Messagebox" src="http://blog.service2max.ch/wp-content/uploads/2009/12/hallowelt_extjs.jpg" alt="Hallo Welt Messagebox" width="285" height="130" /></p>
<p>Was dieser Code genau macht, werde ich in einem weiteren Tutorial erläutern, da dieses hier ausschliesslich dem Einrichten von ExtJS gewidmet ist.</p>
<p>Verbesserungsvorschläge, Kritik oder Lob bitte als Kommentar hinterlassen. Um immer auf dem Laufenden zu bleiben, einfach kostenlos und unverbindlich den RSS-Feed abbonieren. Danke für die Mithilfe,</p>
<p>Patrick</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.service2max.ch/tutorial-extjs-30-einrichten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sortierbare Liste mit Drag &amp; Drop in Ajax</title>
		<link>http://blog.service2max.ch/sortierbare-liste-mit-drag-drop-in-ajax-tutorial/</link>
		<comments>http://blog.service2max.ch/sortierbare-liste-mit-drag-drop-in-ajax-tutorial/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 19:12:29 +0000</pubDate>
		<dc:creator>Patrick Matsumura</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.service2max.ch/?p=36</guid>
		<description><![CDATA[In diesem Tutorial möchte ich erklären, wie man mit script.aculo.us und dem Javascript Framework Prototype eine sortierbare Liste mit Drag &#38; Drop-Funktionalität aufbaut. Der Clou an der Sache ist, dass die Liste sich ihren Zustand dauerhaft merken wird. Damit das einwandfrei funktioniert, ist es notwendig die Informationen zu speichern. Als Datenspeicher dient eine MySQL Datenbank. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.service2max.ch%2Fsortierbare-liste-mit-drag-drop-in-ajax-tutorial%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.service2max.ch%2Fsortierbare-liste-mit-drag-drop-in-ajax-tutorial%2F&amp;source=service2max&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>In diesem Tutorial möchte ich erklären, wie man mit <strong>script.aculo.us</strong> und dem <strong>Javascript Framework Prototype</strong> eine sortierbare Liste mit Drag &amp; Drop-Funktionalität aufbaut. Der Clou an der Sache ist, dass die Liste sich ihren Zustand dauerhaft merken wird. Damit das einwandfrei funktioniert, ist es notwendig die Informationen zu speichern. Als Datenspeicher dient eine MySQL Datenbank.<br />
<span id="more-36"></span><br />
Hier sind vorab die Links zur <a href="http://blog.service2max.ch/tutorials/sortable_ajax_list/sortable_list_ajax.php">Vorschau</a> und zum <a href="http://blog.service2max.ch/tutorials/sortable_ajax_list/sortable_ajax.zip">Download der Tutorialfiles</a>.</p>
<p>Zunächst braucht man <a href="http://www.prototypejs.org" target="_blank">Prototype</a> und <a href="http://script.aculo.us" target="_blank">script.aculo.us</a>. Danach werden die Javascript-Dateien in einen Ordner gespeichert und in die HTML-Datei eingebunden. Ich habe die Javascripts in den Ordner &#8220;js&#8221; gespeichert. Man sollte unbedingt darauf achten, dass Prototype <strong>VOR</strong> script.aculo.us eingebunden wird.</p>
<p>So bindet man die beiden Bibliotheken ein:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script src=&quot;/js/prototype.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;/js/scriptaculous.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>Nachdem das Grundgerüst steht, kann ich mit der MySQL Datenbank anfangen. Dazu lege ich mir eine Tabelle mit folgendem Code an:</p>
<pre class="brush: sql; title: ; notranslate">
CREATE TABLE `sortable_ajax_list` (
`ID` TINYINT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`list_value` VARCHAR(64) NOT NULL ,
`sort_order` TINYINT(4) NOT NULL
) ENGINE = MYISAM
</pre>
<p>Ich erkläre kurz die Bedeutung der einzelnen Felder. ID wird benutzt um einen eindeutigen Bezeichner für jeden Datensatz zu haben. Dieser Wert erhöht sich durch das AUTO_INCREMENT automatisch um eins, sobald ein neuer Datensatz angelegt wird. Gleichzeitig ist ID auch der Primary Key. Im Feld list_value speichere ich den Wert des Listenelements und in sort_order wir die Sortierreihenfolge festgehalten.</p>
<p>Damit sind die beiden Bibliotheken eingebunden und Die MySQL Tabelle angelegt. Als nächstes werde ich eine HTML-Liste mit einem kleinen Stück PHP-Code generieren. Der Code soll die aktuelle Bezeichnung und die Reihenfolge der Listenelemente aus der Datenbank laden und entsprechend darstellen.</p>
<p>Aber vorher will ich noch eine kleine Konfigurationsdatei für alle weitern PHP-Scripts anlegen. In dieser Datei werden die Logindaten für die Datenbank eingetragen und die Verbindung hergestellt. Diese Datei nenne ich config.php und speichere sie in meinem Stammverzeichnis ab. </p>
<pre class="brush: php; title: ; notranslate">&lt;?

####
# Konfigurationsdaten für die Datenbank
####

$dbhost = 'localhost';
$dbuser = 'benutzer';
$dbpass = 'passwort';
$dbname = 'meine_db';

$connection = mysql_connect($dbhost, $dbuser, $dbpass); // Stellt die Verbindung zur Datenbank her

mysql_select_db($dbname, $connection); // Wählt die entsprechende Datenbank aus
?&gt;
</pre>
<p>Nachdem ich jetzt meine Konfiguration fertig habe, kann ich sie in die HTML-Datei einbinden. Auch kann ich meine MySQL-Datenbank abfragen und so die Liste erzeugen. Das sieht nun so aus:</p>
<pre class="brush: php; title: ; notranslate">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;Sortable List in Ajax&lt;/title&gt;
&lt;script src=&quot;js/prototype.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/scriptaculous.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;ul id=&quot;ajax_liste&quot;&gt;

&lt;?php
	include_once('config.php'); //Konfigurationsdatei einbinden

    $result = mysql_query(&quot;SELECT * FROM sortable_ajax_list ORDER BY sort_order&quot;); // Anfrage an die Datenbank stellen und Ausgabe sortieren

    while($data = mysql_fetch_array($result))
    {
		echo '&lt;li id=&quot;item_'. $data[ID] .'&quot;&gt;'. $data[list_value] .'&lt;/li&gt;';
		echo &quot;\n&quot;;
	}
?&gt;

&lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Jetzt, wo die Liste vom PHP-Code generiert wurde, soll sie auch noch sortierbar sein und sich ihren Zustand merken. Das Speichern soll nicht &#8220;spürbar&#8221; sein und darum machen wir den Request mit Ajax.Request von Prototype. Die Aktualisierung soll nach jeder Änderung der Reihenfolge vorgenommen werden. Darum setze ich den Request in die onUpdate Methode und übermittle an die PHP-Datei &#8220;sort_function.php&#8221; die serialisierten Daten der Liste. Der Code dafür sieht so aus:</p>
<pre class="brush: jscript; title: ; notranslate">&lt;script type=&quot;text/javascript&quot;&gt;
Sortable.create(&quot;ajax_liste&quot;,
	{
	onUpdate:function()
		{
		new Ajax.Request('sort_function.php',
			{
			method: &quot;post&quot;,
			parameters: {data: Sortable.serialize(&quot;ajax_liste&quot;)}
			});
		}
	});
&lt;/script&gt;</pre>
<p><strong>Wichtig:</strong> Das Javascript muss im HTML-Code <strong>NACH</strong> der Liste kommen, sonst wird es nicht angewendet. Als nächstes brauche ich die Funktion zum Speichern der Reihenfolge. Diese schreibe ich in die Datei &#8220;sort_function.php&#8221; und speichere sie in meinem Stammverzeichnis. Das ganze sieht so aus:</p>
<pre class="brush: php; title: ; notranslate">&lt;?php
include_once('config.php');

parse_str($_POST['data']);

for ($i = 0; $i &lt; count($ajax_liste); $i++) {
	if(is_int($i)) {
		mysql_query(&quot;UPDATE sortable_ajax_list SET sort_order = $i WHERE ID = $ajax_liste[$i]&quot;);
	}
	else {
	exit;
	}
}

?&gt;</pre>
<p>Man sollte beachten, dass in diesem Codestück nur wenig Überprüfung der übermittelten Daten erfolgt. Das kann unter Umständen missbraucht werden, um schädlichen Code einzuschleusen. Also ist es wichtig, die Daten zuerst genauer zu prüfen und dann zu speichern.</p>
<p>Jetzt ist alles fertig und die Liste kann sortiert und ihr Zustand gespeichert werden. </p>
<p>Kommentare und Verbesserungsvorschläge sind erwünscht. </p>
<p>Bis zum nächsten Tutorial,</p>
<p>Patrick</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.service2max.ch/sortierbare-liste-mit-drag-drop-in-ajax-tutorial/feed/</wfw:commentRss>
		<slash:comments>52</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced (User agent is rejected)
Database Caching using disk: basic
Object Caching 656/721 objects using disk: basic

Served from: blog.service2max.ch @ 2012-02-07 22:27:17 -->
