<?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>RE-Design - Enrico Reinsdorf &#187; javascript</title>
	<atom:link href="http://www.re-design.de/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.re-design.de</link>
	<description>Trainer für Konzeption und Umsetzung von medialen Internet-Projekten</description>
	<lastBuildDate>Fri, 28 Oct 2011 19:26:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JavaScript &#8211; Grundlagen</title>
		<link>http://www.re-design.de/2011/02/24/javascript-grundlagen-4/</link>
		<comments>http://www.re-design.de/2011/02/24/javascript-grundlagen-4/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 12:38:00 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Schulungen]]></category>
		<category><![CDATA[einzelcoaching]]></category>
		<category><![CDATA[grundlagen]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[kwtz]]></category>
		<category><![CDATA[seminar]]></category>
		<category><![CDATA[wdr]]></category>

		<guid isPermaLink="false">http://www.re-design.de/2011/02/24/javascript-grundlagen-4/</guid>
		<description><![CDATA[Nachdem Anfang November 2 Auszubildende des WDR ein HTML-Grundlagen-Seminar gebucht hatten, habe ich nun kurz vor ihrer Abschlussprüfung eine wiedergesehen und ihr ein knapp, aber doch aufschlussreiche Einführung in die JavaScript-Programmierung gegeben. Da sie absolute keine Programmiervorkenntnisse hatte, fing ich mit den Basics an und wir schafften es über Formularauswertungen und DOM-Scripting zu doch recht [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem Anfang November 2 Auszubildende des <a href="http://www.wdr.de" rel="nofollow">WDR</a> ein <a href="http://www.re-design.de/2010/11/05/webdesignaufbau/">HTML-Grundlagen-Seminar</a> gebucht hatten, habe ich nun kurz vor ihrer Abschlussprüfung eine wiedergesehen und ihr ein knapp, aber doch aufschlussreiche Einführung in die JavaScript-Programmierung gegeben. Da sie absolute keine Programmiervorkenntnisse hatte, fing ich mit den Basics an und wir schafften es über Formularauswertungen und DOM-Scripting zu doch recht komplexen Verarbeitungen innerhalb eines Tages.</p>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2011/02/12/javascript-grundlagen-3/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2010/10/15/javascript-grundlagen/" title="JavaScript Grundlagen">JavaScript Grundlagen</a></li><li><a href="http://www.re-design.de/2009/06/20/php-einzelcoaching/" title="PHP &#8211; Einzelcoaching">PHP &#8211; Einzelcoaching</a></li><li><a href="http://www.re-design.de/2009/02/06/cinema-4d-einzelcoaching/" title="Einzelcoaching &#8211; Cinema 4D">Einzelcoaching &#8211; Cinema 4D</a></li><li><a href="http://www.re-design.de/2011/02/24/html-css-grundlagen-2/" title="HTML &amp; CSS &ndash; Grundlagen">HTML &amp; CSS &ndash; Grundlagen</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2011/02/24/javascript-grundlagen-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript &#8211; Grundlagen</title>
		<link>http://www.re-design.de/2011/02/12/javascript-grundlagen-3/</link>
		<comments>http://www.re-design.de/2011/02/12/javascript-grundlagen-3/#comments</comments>
		<pubDate>Sat, 12 Feb 2011 11:55:00 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Schulungen]]></category>
		<category><![CDATA[einzelcoaching]]></category>
		<category><![CDATA[grundlagen]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[pc-college]]></category>
		<category><![CDATA[seminar]]></category>

		<guid isPermaLink="false">http://www.re-design.de/2011/02/12/javascript-grundlagen-3/</guid>
		<description><![CDATA[In den letzten beiden Tagen gab ich den 2. Mitarbeiter der Firma Babiel GmbH eine Schulung in Sachen clientseitige Programmierung mit JavaScript. Schon vor einem Monat hatte ich dazu eine Schulung für das PC-College gegeben. Auch hier hatte der Teilnehmer nur wenige Vorkenntnisse in allg. Programmierung, dafür aber um so mehr in HTML und CSS. [...]]]></description>
			<content:encoded><![CDATA[<p>In den letzten beiden Tagen gab ich den 2. Mitarbeiter der Firma <a href="http://babiel.com/" rel="nofollow">Babiel GmbH</a> eine Schulung in Sachen clientseitige Programmierung mit JavaScript. Schon vor einem Monat hatte ich dazu <a href="http://www.re-design.de/2011/01/15/javascript-grundlagen-2/">eine Schulung</a> für das <a href="http://pc-college.de/standort_duesseldorf.php" rel="nofollow">PC-College</a> gegeben.</p>
<p>Auch hier hatte der Teilnehmer nur wenige Vorkenntnisse in allg. Programmierung, dafür aber um so mehr in HTML und CSS. So konnten wir selbst in den 2 “kurzen” Tagen doch recht viel schaffen.</p>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2011/02/24/javascript-grundlagen-4/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/01/15/javascript-grundlagen-2/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/01/20/php-grundlagen/" title="PHP &ndash; Grundlagen">PHP &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2010/10/15/javascript-grundlagen/" title="JavaScript Grundlagen">JavaScript Grundlagen</a></li><li><a href="http://www.re-design.de/2009/06/20/php-einzelcoaching/" title="PHP &#8211; Einzelcoaching">PHP &#8211; Einzelcoaching</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2011/02/12/javascript-grundlagen-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript &#8211; Grundlagen</title>
		<link>http://www.re-design.de/2011/01/15/javascript-grundlagen-2/</link>
		<comments>http://www.re-design.de/2011/01/15/javascript-grundlagen-2/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 12:56:47 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Schulungen]]></category>
		<category><![CDATA[einzelcoaching]]></category>
		<category><![CDATA[grundlagen]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[pc-college]]></category>

		<guid isPermaLink="false">http://www.re-design.de/2011/01/15/javascript-grundlagen-2/</guid>
		<description><![CDATA[Vom 13. Januar – 14. Januar 2011 habe ich für das PC-College einen Grundlagen-Kurs für die Babiel GbmH, die viele Websites für unsere Bundesregierung bzw. Bundesministerien betreut, gegeben. Es war ein Einzelchoaching und so hatte wir, nicht zu Letzt durch das große Vorwissen des Teilnehmers, ein hohes Tempo. Hier ein kleines Beispiel aus dem Kurs. [...]]]></description>
			<content:encoded><![CDATA[<p>Vom 13. Januar – 14. Januar 2011 habe ich für das <a href="http://www.pc-college.de/standort_duesseldorf.php?smid=bcd09c299139db96545bd15b7c0aaf301" rel="nofollow">PC-College</a> einen Grundlagen-Kurs für die <a href="http://www.babiel.com" rel="nofollow">Babiel GbmH</a>, die viele Websites für unsere Bundesregierung bzw. Bundesministerien betreut, gegeben. Es war ein Einzelchoaching und so hatte wir, nicht zu Letzt durch das große Vorwissen des Teilnehmers, ein hohes Tempo.</p>
<p>Hier <a href="http://schulung.re-design.de/javascript/bestellung/demo.html">ein kleines Beispiel</a> aus dem Kurs. Es ist eine kleine Bestellseite, welches die Berechnung der Preise und das per DOM-Scripting erzeugte Formular übernimmt. Und hier gibt es den <a href="http://schulung.re-design.de/javascript/bestellung/Bestellung.zip">Download</a>.</p>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2011/02/12/javascript-grundlagen-3/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/02/24/javascript-grundlagen-4/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/02/26/php-nachschulung/" title="PHP &ndash; Nachschulung">PHP &ndash; Nachschulung</a></li><li><a href="http://www.re-design.de/2011/01/20/php-grundlagen/" title="PHP &ndash; Grundlagen">PHP &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2010/10/15/javascript-grundlagen/" title="JavaScript Grundlagen">JavaScript Grundlagen</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2011/01/15/javascript-grundlagen-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Offline Adressbuch</title>
		<link>http://www.re-design.de/2011/01/12/offline-adressbuch/</link>
		<comments>http://www.re-design.de/2011/01/12/offline-adressbuch/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 10:30:39 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[localstorage]]></category>

		<guid isPermaLink="false">http://www.re-design.de/2011/01/12/offline-adressbuch/</guid>
		<description><![CDATA[Gerade habe ich eine kleine JavaScript-Application geschrieben. Schon im Januar 2008 habe ich ein Tutorial veröffentlicht in dem ich erklärt habe, wie man mit PHP und AJAX ein Adressbuch verwirklicht. Nun habe ich diese Anwendung neu geschrieben und das permanente Speichern der Daten in den lokalen Speicher ausgelagert. So kann die Anwendung auch im Offline-Betrieb [...]]]></description>
			<content:encoded><![CDATA[<p>Gerade habe ich eine kleine JavaScript-Application geschrieben. Schon im Januar 2008 habe ich <a title="AJAX-Addressbook-Tutorial" href="http://weblabor.re-design.de/JavaScript/Offline_Adressbuch/addressbook.html">ein Tutorial</a> veröffentlicht in dem ich erklärt habe, wie man mit PHP und AJAX ein Adressbuch verwirklicht. Nun habe ich diese Anwendung neu geschrieben und das permanente Speichern der Daten in den lokalen Speicher ausgelagert. So kann die Anwendung auch im Offline-Betrieb der Browsers betrieben werden.</p>
<p>weiter zur <a title="JavaScript-Application Offline-Addressbook Demohref=" href="http://weblabor.re-design.de/HTML5/Addressbook/addressbook.html">Demo</a> bzw. zum <a title="JavaScript-Application Offline-Addressbook Download" href="http://downloads.re-design.de/HTML5/Offline_Adressbuch/REDAdrbook.zip">Download</a></p>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2011/02/24/javascript-grundlagen-4/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/02/24/html-css-grundlagen-2/" title="HTML &amp; CSS &ndash; Grundlagen">HTML &amp; CSS &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/02/12/javascript-grundlagen-3/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/01/15/javascript-grundlagen-2/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2010/12/20/html5-buch/" title="HTML5 &ndash; Buch">HTML5 &ndash; Buch</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2011/01/12/offline-adressbuch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 &#8211; Buch</title>
		<link>http://www.re-design.de/2010/12/20/html5-buch/</link>
		<comments>http://www.re-design.de/2010/12/20/html5-buch/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 15:09:00 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Bücher]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.re-design.de/2010/12/20/html5-buch/</guid>
		<description><![CDATA[Ich habe, zwar noch nicht komplett fertig, gerade dieses Buch gelesen und bin begeistert von den Möglichkeiten mit HTML5. HTML5. Webseiten innovativ und zukunftssicher Ähnliche BeiträgeSlideshow mit einer HTML-Seite Teil 2Slideshow mit einer HTML-Seite Teil 1Webdesign&#8211;AufbauWebdesign&#8211;EinzelcoachingWebprogrammierung mit HTML und CSS]]></description>
			<content:encoded><![CDATA[<p>Ich habe, zwar noch nicht komplett fertig, gerade dieses Buch gelesen und bin begeistert von den Möglichkeiten mit HTML5.</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><img src="http://ecx.images-amazon.com/images/I/41B0r6uK1YL._SL160_.jpg" /> </td>
<td valign="top"><a href="http://www.amazon.de/HTML5-Webseiten-innovativ-zukunftssicher-Kr%C3%B6ner/dp/393751497X%3FSubscriptionId%3D0JTCV5ZMHMF7ZYTXGFR2%26tag%3Dre-design-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D393751497X">HTML5. Webseiten innovativ und zukunftssicher</a> </td>
</tr>
</tbody>
</table>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/" title="Slideshow mit einer HTML-Seite Teil 2">Slideshow mit einer HTML-Seite Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/" title="Slideshow mit einer HTML-Seite Teil 1">Slideshow mit einer HTML-Seite Teil 1</a></li><li><a href="http://www.re-design.de/2010/11/05/webdesignaufbau/" title="Webdesign&ndash;Aufbau">Webdesign&ndash;Aufbau</a></li><li><a href="http://www.re-design.de/2010/10/08/webdesigneinzelcoaching/" title="Webdesign&ndash;Einzelcoaching">Webdesign&ndash;Einzelcoaching</a></li><li><a href="http://www.re-design.de/2010/10/08/webprogrammierung-mit-html-und-css/" title="Webprogrammierung mit HTML und CSS">Webprogrammierung mit HTML und CSS</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2010/12/20/html5-buch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Aufbau</title>
		<link>http://www.re-design.de/2010/10/15/javascript-aufbau/</link>
		<comments>http://www.re-design.de/2010/10/15/javascript-aufbau/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 10:01:00 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Schulungen]]></category>
		<category><![CDATA[aufbau]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[kwtz]]></category>
		<category><![CDATA[seminar]]></category>

		<guid isPermaLink="false">http://www.re-design.de/2010/10/15/javascript-aufbau/</guid>
		<description><![CDATA[Direkt nach dem JavaScript Grundlagen haben die beiden Teilnehmer auch noch den Aufbau-Kurs gebucht, so dass wir eine schöne Rundum-Sorglos-Schulung über einen größeren Zeitraum machen konnten. Ähnliche BeiträgeJavaScript &#8211; GrundlagenFlash &#8211; Grundlagen und AufbauJavaScript GrundlagenHTML AufbauFlash-Aufbau]]></description>
			<content:encoded><![CDATA[<p>Direkt nach dem <a href="http://www.re-design.de/2010/10/15/javascript-grundlagen/">JavaScript Grundlagen</a> haben die beiden Teilnehmer auch noch den Aufbau-Kurs gebucht, so dass wir eine schöne Rundum-Sorglos-Schulung über einen größeren Zeitraum machen konnten.</p>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2011/02/24/javascript-grundlagen-4/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2010/11/27/flash-grundlagen-und-aufbau/" title="Flash &ndash; Grundlagen und Aufbau">Flash &ndash; Grundlagen und Aufbau</a></li><li><a href="http://www.re-design.de/2010/10/15/javascript-grundlagen/" title="JavaScript Grundlagen">JavaScript Grundlagen</a></li><li><a href="http://www.re-design.de/2010/10/08/html-aufbau/" title="HTML Aufbau">HTML Aufbau</a></li><li><a href="http://www.re-design.de/2009/05/01/flash-aufbau-2/" title="Flash-Aufbau">Flash-Aufbau</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2010/10/15/javascript-aufbau/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Grundlagen</title>
		<link>http://www.re-design.de/2010/10/15/javascript-grundlagen/</link>
		<comments>http://www.re-design.de/2010/10/15/javascript-grundlagen/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 09:42:00 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Schulungen]]></category>
		<category><![CDATA[grundlagen]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[kwtz]]></category>
		<category><![CDATA[seminar]]></category>

		<guid isPermaLink="false">http://www.re-design.de/2010/10/15/javascript-grundlagen/</guid>
		<description><![CDATA[Auch in diesem Kurs hatte ich 2 Teilnehmer. Wie im Seminar “Webprogrammierung mit HTML und CSS” hatte ich eine Teilnehmer der ARAG IT GmbH dabei und einen Auszubildenden der TimoCom Soft- und Hardware GmbH. Ähnliche BeiträgeJavaScript &#8211; GrundlagenJavaScript &#8211; GrundlagenFlash &#8211; Grundlagen und AufbauFlash GrundlagenJavaScript Aufbau]]></description>
			<content:encoded><![CDATA[<p>Auch in diesem Kurs hatte ich 2 Teilnehmer. Wie im Seminar “<a href="http://www.re-design.de/2010/10/08/webprogrammierung-mit-html-und-css/">Webprogrammierung mit HTML und CSS</a>” hatte ich eine Teilnehmer der <a href="http://www.arag.de" rel="nofollow">ARAG IT GmbH</a> dabei und einen Auszubildenden der <a href="http://www.timocom.com" rel="nofollow">TimoCom Soft- und Hardware GmbH</a>.</p>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2011/02/24/javascript-grundlagen-4/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/02/12/javascript-grundlagen-3/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2010/11/27/flash-grundlagen-und-aufbau/" title="Flash &ndash; Grundlagen und Aufbau">Flash &ndash; Grundlagen und Aufbau</a></li><li><a href="http://www.re-design.de/2010/10/31/flash-grundlagen-4/" title="Flash Grundlagen">Flash Grundlagen</a></li><li><a href="http://www.re-design.de/2010/10/15/javascript-aufbau/" title="JavaScript Aufbau">JavaScript Aufbau</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2010/10/15/javascript-grundlagen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AJAX &#8211; PHP Schulung in Stuttgart</title>
		<link>http://www.re-design.de/2008/12/13/ajax-php-schulung-in-stuttgart/</link>
		<comments>http://www.re-design.de/2008/12/13/ajax-php-schulung-in-stuttgart/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 11:34:00 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Schulungen]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[pc-college]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[seminar]]></category>

		<guid isPermaLink="false">http://www.re-design.de/2008/12/13/ajax-php-schulung-in-stuttgart/</guid>
		<description><![CDATA[Vom Montag bis Dienstag habe ich ein Einzelcoaching zum Thema AJAX-PHP-Programmierung gegeben. Der Teilnehmer war im öffentlichen Dienst (Gerichte) tätig und hatte schon viele Vorkenntnisse in PHP. So haben wir uns dann auf die Schulung von JavaScript konzentriert. Thema war dann speziell das DOM-Scripting, sowie die Verarbeitung von XML-Daten und JSON. Um die einzelnen Themen [...]]]></description>
			<content:encoded><![CDATA[<p>Vom Montag bis Dienstag habe ich ein Einzelcoaching zum Thema AJAX-PHP-Programmierung gegeben. Der Teilnehmer war im öffentlichen Dienst (Gerichte) tätig und hatte schon viele Vorkenntnisse in PHP.</p>
<p>So haben wir uns dann auf die Schulung von JavaScript konzentriert. Thema war dann speziell das DOM-Scripting, sowie die Verarbeitung von XML-Daten und JSON.</p>
<p>Um die einzelnen Themen in einem kleinen Projekt besser verständlich zu machen, haben wir <a title="Demo-Anwendung" href="http://weblabor.re-design.de/AJAX-Adressbuch/demo.html">ein kleines Adressbuch</a> programmiert.</p>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2009/03/04/einzelcoaching-php-xml-schulung/" title="Einzelcoaching &ndash; PHP-XML Schulung">Einzelcoaching &ndash; PHP-XML Schulung</a></li><li><a href="http://www.re-design.de/2011/02/12/javascript-grundlagen-3/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/02/24/javascript-grundlagen-4/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/01/20/php-grundlagen/" title="PHP &ndash; Grundlagen">PHP &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/01/15/javascript-grundlagen-2/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2008/12/13/ajax-php-schulung-in-stuttgart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Skype-Animation</title>
		<link>http://www.re-design.de/2008/03/15/skype-animation/</link>
		<comments>http://www.re-design.de/2008/03/15/skype-animation/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 10:54:57 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=118</guid>
		<description><![CDATA[Da ich meinen Laptop gerade neu installiert habe, war ich seit langem mal wieder auf der Website von Skype. Dabei ist mir erst jetzt aufgefallen, das sie unter &#34;use skype&#34; eine tolle Animation haben. Erst dachte ich es w&#228;re, wie &#252;blich, mit Flash gemacht worden. Aber beim genaueren hinsehen, habe ich schnell festgestellt, dass das [...]]]></description>
			<content:encoded><![CDATA[<p>Da ich meinen Laptop gerade neu installiert habe, war ich seit langem mal wieder auf der <a href="http://www.skype.com/intl/de/" rel="nofollow">Website von Skype</a>. Dabei ist mir erst jetzt aufgefallen, das sie unter &quot;<a href="http://www.skype.com/intl/de/useskype/" rel="nofollow">use skype</a>&quot; eine tolle Animation haben. Erst dachte ich es w&#228;re, wie &#252;blich, mit Flash gemacht worden. Aber beim genaueren hinsehen, habe ich schnell festgestellt, dass das ganze komplett in JavaScript umgesetzt wurde.</p>
<p>Ein Kompliment an dieser Stelle von mir. Die Animation wird sehr schnell geladen, l&#228;uft fl&#252;ssig ab und reagiert sogar leicht auf die Mausbewegungen. So wird bestimmt irgendwann einmal Flash komplett durch offene Standards ersetzt. Nicht das ich Flash nicht mag, aber hier findet man ein gutes Beispiel wie es Pluginfrei funktioniert.</p>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2009/05/06/12-animationen-fur-flash-cs4/" title="12 Animationen für Flash CS4">12 Animationen für Flash CS4</a></li><li><a href="http://www.re-design.de/2011/02/24/javascript-grundlagen-4/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/02/12/javascript-grundlagen-3/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/01/15/javascript-grundlagen-2/" title="JavaScript &ndash; Grundlagen">JavaScript &ndash; Grundlagen</a></li><li><a href="http://www.re-design.de/2011/01/12/offline-adressbuch/" title="Offline Adressbuch">Offline Adressbuch</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2008/03/15/skype-animation/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>AJAX Abressbuch &#8211; Tutorial Teil 3</title>
		<link>http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/</link>
		<comments>http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/#comments</comments>
		<pubDate>Sun, 23 Dec 2007 00:00:24 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2007]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Webanwendung]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=96</guid>
		<description><![CDATA[Im dritten Teil meines Tutorials möchte ich euch zeigen wie ich per JavaScript eine Verbindung zum Server aufbaue und Daten zum Server schicke bzw. vom Server hole. Durch die Beschreibung in Teil 1 und Teil 2 meines Tutorials habe ich hoffentlich eine gute Basis geschaffen einen Schritt weiter zu gehen. Ok, als erstes wieder einmal [...]]]></description>
			<content:encoded><![CDATA[<p>Im dritten Teil meines Tutorials möchte ich euch zeigen wie ich per JavaScript eine Verbindung zum Server aufbaue und Daten zum Server schicke bzw. vom Server hole. Durch die Beschreibung in <a title="AJAX Adressbuch Teil 1" href="http://www.re-design.de/workbook/?p=89">Teil 1</a> und <a title="AJAX Adressbuch Teil 2" href="http://www.re-design.de/workbook/?p=91">Teil 2</a> meines Tutorials habe ich hoffentlich eine gute Basis geschaffen einen Schritt weiter zu gehen.</p>
<p><span id="more-96"></span></p>
<p>Ok, als erstes wieder einmal die Zusammenfassung aller Eigenschaften und Methoden der RED-Ajax-Objektes.</p>
<ol class="Sourcecode">
<li><code>// JavaScript Document</code></li>
<li><code>var RED_Ajax =</code></li>
<li><code>{</code></li>
<li><code> req : null,</code></li>
<li><code> url : null,</code></li>
<li><code> method : 'GET',</code></li>
<li><code> async : false,</code></li>
<li><code> body : null,</code></li>
<li><code> headers : [],</code></li>
<li><code> timer : null,</code></li>
<li><code> responseXML : null,</code></li>
<li><code> responseText : null,</code></li>
<li><code> init : function()</code> <code>{</code> <code>},</code></li>
<li><code> run : function()</code> <code>{</code> <code>},</code></li>
<li><code> header : function() </code><code>{</code><code>},<br />
</code></li>
<li><code> response : function()</code> <code>{</code><code>},<br />
</code></li>
<li><code> callback : function() {},</code></li>
<li><code> update : function() {},</code></li>
<li><code> error : function()</code> <code>{</code> <code>}</code></li>
<li><code>}</code></li>
</ol>
<p>Ich werde jetzt nicht alle Eigenschaften im Detail erklären, denn das passiert auf jeden Fall noch bei der Erklärung der einzelnen Methoden. Ich fange lieber direkt mit den Methoden an.</p>
<ol class="Sourcecode">
<li><code> init : function()</code></li>
<li><code> {</code></li>
<li><code> this.req = (window.XMLHttpRequest)</code></li>
<li><code> ?</code></li>
<li><code> new XMLHttpRequest()</code></li>
<li><code> :</code></li>
<li><code> ((window.ActiveXObject)</code></li>
<li><code> ?</code></li>
<li><code> new ActiveXObject('Microsoft.XMLHTTP')</code></li>
<li><code> :</code></li>
<li><code> null</code></li>
<li><code> );</code></li>
<li></li>
<li><code> if(this.req != null)</code></li>
<li><code> {</code></li>
<li><code> this.req.onreadystatechange = this.response;</code></li>
<li><code> }</code></li>
<li><code> },</code></li>
</ol>
<p>Wie immer gibt es bei mir eine <code>init()</code>-Methode. Diese hier legt in der reg-Eigenschaft ein Objekt ab, welche eine Verbindung zum Server aufbauen kann. Da jeder Browser ein anderes Objekt dazu benutzt, muss hier immer erst noch geprüft werden ob das ganze auch funktioniert. Wenn alles geklappt hat wird noch auf den readystatechange-Event ein Methodenverweise gemacht.</p>
<ol class="Sourcecode">
<li><code> run : function(u,m,f,b)</code></li>
<li><code> {</code></li>
<li><code> this.method = m || this.method;</code></li>
<li><code> this.async = f || this.async;</code></li>
<li><code> this.body = b || this.body;</code></li>
<li><code> this.url = u;</code></li>
<li><code> if(this.req != null)</code></li>
<li><code> {</code></li>
<li><code> this.req.open(this.method, this.url, this.async);</code></li>
<li><code> if(this.headers.length &gt; 0)</code></li>
<li><code> {</code></li>
<li><code> for(var i=0; i&lt;this.headers.length; i+=2)</code></li>
<li><code> {</code></li>
<li><code> this.req.setRequestHeader(this.headers[i], this.headers[i+1]);</code></li>
<li><code> }</code></li>
<li><code> }</code></li>
<li><code> this.req.send(this.body);</code></li>
<li><code> }</code></li>
<li><code> },</code></li>
</ol>
<p>Um dann aber auch die eigentlichen Daten vom bzw. zum Server zu schicken gibt es die <code>run()</code>-Methode. Ihr kann bis zu 4 Parameter mit übergeben werden, wobei der erste, die <abbr title="Uniform Resource Location">URL</abbr>-Angabe, nur Pflicht ist. Die weiteren Parameter sind die Übertragungsmethode (<code>GET</code> oder <code>POST</code>), ob die Ubertragung synchron (<code>true</code>) oder asynchron (<code>false</code>) stattfinden soll und der beim Senden mitgelieferte Body.</p>
<p>Bevor der Request aber geschickt wird, werden die im Vorfeld gesetzte Header-Angaben verarbeitet.</p>
<ol class="Sourcecode">
<li><code> header : function(k,v)</code></li>
<li><code> {</code></li>
<li><code> if(k != null)</code></li>
<li><code> {</code></li>
<li><code> this.headers.push(k);</code></li>
<li><code> this.headers.push(v);</code></li>
<li><code> }</code></li>
<li><code> }, </code></li>
</ol>
<p>Um eine Header-Angabe, die später mit übertragen werden soll, zu setzten, reicht es die <code>header()</code>-Methode mit ihren beiden Parametern <code>key</code> und <code>value</code> aufzurufen.</p>
<ol class="Sourcecode">
<li><code> response : function()</code></li>
<li><code> {</code></li>
<li><code> var a = ajax.req;</code></li>
<li><code> switch(a.readyState)</code></li>
<li><code> {</code></li>
<li><code> case 1:</code></li>
<li><code> break;</code></li>
<li><code> case 2:</code></li>
<li><code> this.timer = window.setTimeout(this.error, 10000);</code></li>
<li><code> break;</code></li>
<li><code> case 3: </code></li>
<li><code> this.timer = window.setTimeout(this.error, 10000);</code></li>
<li><code> break;</code></li>
<li><code> case 4:</code></li>
<li><code> window.clearTimeout(this.timer);</code></li>
<li><code> if(a.status==200 || a.statusText=='OK')</code></li>
<li><code> {</code></li>
<li><code> RED_Ajax.responseXML = a.responseXML;</code></li>
<li><code> RED_Ajax.responseText = a.responseText;</code></li>
<li><code> RED_Ajax.callback();</code></li>
<li><code> }</code></li>
<li><code> }</code></li>
<li><code> }, </code></li>
</ol>
<p>Beim Ausführen der Sende- bzw. Empfang-Vorganges durchläuft das Verbindungsobjekt verschiedene Stadien, die in der <code>response()</code>-Methode geprüft werden. Folgende Stati gibt es:</p>
<ol>
<li>Das Verbindungsobjekt existiert aber die <code>open()</code>-Methode wurde noch nicht aufgerufen.</li>
<li>Die <code>send()</code>-Methode wurde noch nicht ausgeführt.</li>
<li>Die <code>send()</code>-Methode wurde zwar ausgeführt, aber der Server hat noch nichts zurück geschickt.</li>
<li>Der Server hat angefangen Daten zu übermitteln, aber ist damit noch nicht fertig.</li>
<li>Der Übermittlungsvorgang wurde beendet und alle Date sind angekommen.</li>
</ol>
<p>Um den Übertragungsvorgang auch irgendwann abzubrechen, falls ein Fehler aufgetreten ist, habe ich im Status 2 und 3 eine Timeout eingefügt und hebe ihn im Status 4 wieder auf, da da ja alles angekommen ist. Wenn dann auch noch der Server mit &#8220;alles ok&#8221; übertragen hat, dann werden die übertragenen Werte einmal als reine Text und als <abbr title="Extentable Markup Language">XML</abbr>-Objekt abgespeichert. Zum Schluss rufe ich nur noch die <code>callback()</code>-Methode auf.</p>
<ol class="Sourcecode">
<li><code> callback : function(){},</code></li>
<li><code> update : function(){}</code>,</li>
</ol>
<p>Meine <code>callback()</code>-Methode ist ein sogenannter Huck und muss erst noch definiert werden. Ich habe deshalb offen gelassen, weil die Verarbeitung der übertragenen Daten sehr unterschiedlich sein kann. In Teil 2 habe ich erklärt wo und wie man diese Definition einsetzt.</p>
<p>Auch habe ich eine <code>update()</code>-Methode zwar eingesetzt, aber noch nicht definiert. Hier lasse ich mir die Möglichkeit offen zu einem späteren Zeitpunkt einen zyklischen Aufruf des Server zu bauen.</p>
<ol class="Sourcecode">
<li><code> error : function()</code></li>
<li><code> {</code></li>
<li><code> alert('Die Zeit ist um!');</code></li>
<li><code> this.req.abort();</code></li>
<li><code> }</code></li>
</ol>
<p>Meine letzte Methode ist die <code>error()</code>-Methode. Sie dient ausschließlich dazu bei zu langen Ladezeiten diesen Vorgang abzugrechen.</p>
<p>Wie immer gibt es zum Schluss den Download der beschriebenen Dateien:</p>
<ul>
<li><a title="RED_AJAX Datei" href="ftp://weblabor.re-design.de/AJAX-Adressbuch.zip">RED_AJAX Datei</a></li>
</ul>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/" title="AJAX Adressbuch &#8211; Tutorial Teil 2">AJAX Adressbuch &#8211; Tutorial Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/21/ajax-adressbuch-tutorial-teil-1/" title="AJAX Adressbuch &#8211; Tutorial Teil 1">AJAX Adressbuch &#8211; Tutorial Teil 1</a></li><li><a href="http://www.re-design.de/2007/12/24/ajax-adressbuch-tutorial-teil-4/" title="AJAX Adressbuch &#8211; Tutorial Teil 4">AJAX Adressbuch &#8211; Tutorial Teil 4</a></li><li><a href="http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/" title="Slideshow mit einer HTML-Seite Teil 2">Slideshow mit einer HTML-Seite Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/" title="Slideshow mit einer HTML-Seite Teil 1">Slideshow mit einer HTML-Seite Teil 1</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>AJAX Adressbuch &#8211; Tutorial Teil 2</title>
		<link>http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/</link>
		<comments>http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/#comments</comments>
		<pubDate>Sat, 22 Dec 2007 00:00:22 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2007]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=91</guid>
		<description><![CDATA[Nachdem ich gestern erklärt habe wie die HTML-Datei, das dazugehörige CSS-Design und die XML-Datenstruktur aufgebaut sind, werde ich mich nun der clientseitigen Programmierung widmen. Die Programmierung besteht hier nun aus 2 JavaScript-Dateien. Die eine ist für die Verarbeitung der Daten und die andere regelt die Übertragung zum und vom Server. Fangen wir nun mir der [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem ich <a title="AJAX Adressbuch Teil 1" href="http://www.re-design.de/2007/12/21/ajax-adressbuch-tutorial-teil-1/">gestern</a> erklärt habe wie die <abbr title="Hypertext Markup Language">HTML</abbr>-Datei, das dazugehörige <abbr title="Cascading Style Sheet">CSS</abbr>-Design und die <abbr title="Extentable Markup Language">XML</abbr>-Datenstruktur aufgebaut sind, werde ich mich nun der clientseitigen Programmierung widmen.</p>
<p>Die Programmierung besteht hier nun aus 2 JavaScript-Dateien. Die eine ist für die Verarbeitung der Daten und die andere regelt die Übertragung zum und vom Server.</p>
<p><span id="more-91"></span></p>
<p>Fangen wir nun mir der Verarbeitung an. Um in diesem Stadium der Programmierung nicht schon die serverseitigen Scripte geschrieben zu haben, arbeite ich immer mit einer Demo-XML-Datei.</p>
<ol class="Sourcecode">
<li><code>// JavaScript Document</code></li>
<li><code>var RED_Adrbook = </code></li>
<li><code>{</code></li>
<li><code> data : [],</code></li>
<li><code> alerts : </code><code>{</code> <code>},</code></li>
<li><code> zeiger : 0,</code></li>
<li><code> init : function()</code><code>{</code> <code>},</code></li>
<li><code> loadXML : function()</code> <code>{ </code><code>},</code></li>
<li><code> loadData : function(xml)</code> <code>{</code> <code>},</code></li>
<li><code> loadEvents : function()</code> <code>{</code> <code>},</code></li>
<li><code> loadSlides : function()</code> <code>{</code> <code>},</code></li>
<li><code> pager : function()</code> <code>{</code> <code>},</code></li>
<li><code> add : function()</code> <code>{</code> <code>},</code></li>
<li><code> insert : function()</code> <code>{</code> <code>},</code></li>
<li><code> edit : function()</code> <code>{},</code></li>
<li><code> update : function() </code><code>{</code><code>},</code></li>
<li><code> remove : function() {</code><code>}</code></li>
<li><code>}</code></li>
</ol>
<p>Wie schon bei den letzten Beispielen verwende ich bei solcher Programmierung gerne Literale. Die Eingenschaft data dient dann später dazu alle vom Server bekommen Kontakte in einen einzigen Array zu sammeln. Über die Eigenschaft zeiger wird dann das Weiterschalten zum nächsten Mitarbeiter geregelt. Die letzte Eigenschaft innerhalb des Objektes verwende ich um Meldungen vom System an den Benutzer zu kapseln. Ich habe mir dazu ein Unterobjekt angelegt.</p>
<p>Kommen wir nun zu den einzelnen Methoden des Obejktes:</p>
<ol class="Sourcecode">
<li><code> init : function()</code></li>
<li><code> {</code></li>
<li><code> RED_Ajax.init();</code></li>
<li><code> this.loadXML();</code></li>
<li><code> },</code></li>
</ol>
<p>In fast jedem Objekt lege ich eine <code>init()</code>-Methode an, um alle wichtigen Prozesse zu starten, die vor der eigentlichen Benutzung durch den Anwender gebraucht werden. In diesem Fall ist das die Vorbereitung der Verbindung zum Server und dann das Laden der XML-Daten vom Server.</p>
<ol class="Sourcecode">
<li><code> loadXML : function()</code></li>
<li><code> {</code></li>
<li><code> RED_Ajax.callback = function()</code></li>
<li><code> {</code></li>
<li><code> RED_Adrbook.loadData(this.responseXML);</code></li>
<li><code> };</code></li>
<li><code> RED_Ajax.run('mitarbeiter.xml','GET',false);</code></li>
<li><code> },</code></li>
</ol>
<p>Um die empfangen XML-Daten auch später zu verarbeiten, muss der Huck, also die <code>callback()</code>-Methode des RED_AJAX-Objektes definiert werden. Ich rufe hier die <code>loadData()</code>-Methode des <code>RED_AdrBook</code> auf und übergebe ihr die empfangenen XML-Werte. Nach allen Vorbereitungen rufe ich die <code>run()</code>-Methode auf und übergebe ihr als erstes die zu ladende Datei, dann mit welcher Methode die Übertragung stattfinden soll und zum Schluss ob es sich um eine synchrone Übertragung handelt. Nur selten ändern sich die beiden letzten Werte.</p>
<ol class="Sourcecode">
<li><code> loadData : function(xml)</code></li>
<li><code> {</code></li>
<li><code> this.data = [];</code></li>
<li><code> var personen = xml.getElementsByTagName('person');</code></li>
<li><code> for(var i=0; i&lt;personen.length; i++)</code></li>
<li><code> {</code></li>
<li><code> var person = {</code></li>
<li><code> Nachname : personen[i].childNodes[0].firstChild.nodeValue,</code></li>
<li><code> Vorname : personen[i].childNodes[1].firstChild.nodeValue,</code></li>
<li><code> Email : personen[i].childNodes[2].firstChild.nodeValue,</code></li>
<li><code> Telefon : personen[i].childNodes[3].firstChild.nodeValue,</code></li>
<li><code> ID : personen[i].getAttribute('id')</code></li>
<li><code> };</code></li>
<li><code> this.data.push(person);</code></li>
<li><code> }</code></li>
<li><code> this.loadEvents();</code></li>
<li><code> this.loadSlides();</code></li>
<li><code> },</code></li>
</ol>
<p>Nachdem alle Daten vom Server übertragen wurden, kann die eigentliche Verarbeitung beginnen. Als erstes leere ich den Array und hole mir aus den übergebenen Wert einen Array mit allen Mitarbeitern. Diesen Array durchlaufe ich und erzeuge mir ein eigenes Personen-Objekt zur späteren besseren Verarbeitung. Dieses Personen-Objekt wird dann im Data-Array abgespeichert.</p>
<p>Zum Schluss müssen natürlich noch die Events für die Buttons festgelegt werden und das aktuelle Slide, also der aktuelle, hier der erste, Mitarbeiter angezeigt werden.</p>
<ol class="Sourcecode">
<li><code> loadEvents : function()</code></li>
<li><code> {</code></li>
<li><code> document.getElementById('btn_next').onclick = function() </code><code>{</code></li>
<li><code> RED_Adrbook.pager(true);</code></li>
<li><code> }</code></li>
<li><code> document.getElementById('btn_prev').onclick = function() {</code></li>
<li><code> RED_Adrbook.pager(false);</code></li>
<li><code> }</code></li>
<li><code> document.getElementById('btn_edit').onclick = function() {</code></li>
<li><code> RED_Adrbook.edit();</code></li>
<li><code> </code><code>}</code></li>
<li><code> document.getElementById('btn_add').onclick = function() {</code></li>
<li><code> RED_Adrbook.add();</code></li>
<li><code> }</code></li>
<li><code> document.getElementById('btn_remove').onclick = function() {</code></li>
<li><code> RED_Adrbook.remove();</code></li>
<li><code> }</code></li>
<li><code> },</code></li>
</ol>
<p>Das festlegen welche Funktionen welcher Button hat ist recht einfach, da es dafür separate Methoden gibt.</p>
<ol class="Sourcecode">
<li><code> loadSlides : function()</code></li>
<li><code> {</code></li>
<li><code> var s = document.getElementById('RED_Book').getElementsByTagName('span');</code></li>
<li><code> s[0].innerHTML = this.zeiger;</code></li>
<li><code> s[1].innerHTML = this.data[this.zeiger]['Nachname'];</code></li>
<li><code> s[2].innerHTML = this.data[this.zeiger]['Vorname'];</code></li>
<li><code> s[4].innerHTML = this.data[this.zeiger]['Telefon'];</code></li>
<li><code> var link = '&lt;a href="mailto:';</code></li>
<li><code> link += this.data[this.zeiger]['Email'];</code></li>
<li><code> link += '"&gt;';</code></li>
<li><code> link += this.data[this.zeiger]['Email'];<br />
</code></li>
<li><code> link += '&lt;/a&gt;';</code></li>
<li><code> s[3].innerHTML = link;</code></li>
<li><code> },</code></li>
</ol>
<p>Bei Laden des aktuelle Slides werden als erstes alle <code>&lt;span&gt;</code>-Tags aus dem Formular mit der ID <code>RED_Book</code> in eine Array geladen. Dann werden die Daten aus dem aktuellen Silde per <code>innerHTML</code> in die Spans zugewiesen. Das <code>this.zeiger</code> immer den aktuellen Zeiger repräsentiert ist das ganze kein größeres Problem. Selbst eine <code>mailto:</code>-Link zu erzeugen stellt keine große Hürde da.</p>
<ol class="Sourcecode">
<li><code> pager : function(d)</code></li>
<li><code> {</code></li>
<li><code> if(d)</code></li>
<li><code> {</code></li>
<li><code> (this.zeiger == this.data.length-1) ?alert(this.alerts.last) :this.zeiger++; </code></li>
<li><code> }</code></li>
<li><code> else</code></li>
<li><code> {</code></li>
<li><code> (this.zeiger == 0) ?alert(this.alerts.first) :this.zeiger--;</code></li>
<li><code> }</code></li>
<li><code> this.loadSlides();</code></li>
<li><code> },</code></li>
</ol>
<p>Für der vor und zurück Blättern gibt es eine kleine und einfache Methode, die als erstes prüft wo der Zeiger steht und am Ende bzw. am Anfang der Liste diesen korrigiert. Dann wird noch per <code>loadSlides()</code>-Methode der richtige Mitarbeiter angezeigt.</p>
<ol class="Sourcecode">
<li><code> add : function()</code></li>
<li><code> {</code></li>
<li><code> var s = document.getElementById('RED_Book').getElementsByTagName('span');</code></li>
<li><code> s[0].innerHTML = 'neuer Datensatz';</code></li>
<li><code> s[0].innerHTML += '&lt;input type="hidden" name="f0" value="" /&gt;';</code></li>
<li><code> s[1].innerHTML = '&lt;input type="text" name="f1" /&gt;';</code></li>
<li><code> s[2].innerHTML = '&lt;input type="text" name="f2" /&gt;';</code></li>
<li><code> s[3].innerHTML = '&lt;input type="text" name="f3" /&gt;';</code></li>
<li><code> s[4].innerHTML = '&lt;input type="text" name="f4" /&gt;';</code></li>
<li><code> s[4].innerHTML += '&lt;br /&gt;';s[4].innerHTML += '&lt;input type="button" id="btn_save" value="speichern" /&gt;';</code></li>
<li><code> s[4].innerHTML += '&lt;input type="button" id="btn_cancel" value="abbrechen" /&gt;';</code></li>
<li><code> document.getElementById('btn_save').onclick = function()</code> <code>{</code></li>
<li><code> RED_Adrbook.insert(document.getElementById('RED_Book'));</code></li>
<li><code> };</code></li>
<li><code> document.getElementById('btn_cancel').onclick = function()</code> <code>{</code></li>
<li><code> RED_Adrbook.loadSlides();</code></li>
<li><code> };</code></li>
<li><code> document.getElementsByTagName('input')[1].focus();</code></li>
<li><code> },</code></li>
</ol>
<p>In der <code>add()</code>-Methode werden die Inhalte der <code>&lt;span&gt;</code>-Tags gelöscht und durch leere Eingabefelder erstetzt. Zusätzlich wird ein Speichern- und Cancel-Button eingefügt und ihnen natürlich auch noch die richtige Funktionalität zugewiesen. Zum Schluss bekommt das erste Eingabefeld den Focus, so dass der Anwender direkt losschreiben kann.</p>
<ol class="Sourcecode">
<li><code> insert : function(form)</code></li>
<li><code> {</code></li>
<li><code> var inputs = form.getElementsByTagName('input');</code></li>
<li><code> var body = 'f0='+escape(inputs[0].value)+'&amp;'+</code> <code>'f1='+escape(inputs[1].value)+'&amp;'+</code> <code>'f2='+escape(inputs[2].value)+'&amp;'+</code> <code>'f3='+escape(inputs[3].value)+'&amp;'+</code> &#8216;<code>f4='+escape(inputs[4].value);</code></li>
<li><code> RED_Ajax.callback = function()</code></li>
<li><code> {</code></li>
<li><code> RED_Adrbook.loadXML();</code></li>
<li><code> };</code></li>
<li><code> RED_Ajax.header('Content-Type', 'application/x-www-form-urlencoded');</code></li>
<li><code> RED_Ajax.run('eingabe.php','POST',false,body);</code></li>
<li><code> },</code></li>
</ol>
<p>Um die neu eingefügten, bzw. später geänderten Daten auch an der Server und damit in die Datenbank zu schreiben, wird beim Klick auf den Speichern-Button die <code>insert()</code>-Methode aufgerufen. Sie lädt alle Eingabefelder und fügt sie zu einem langen String mit <abbr title="Uniform Resource Location">URL</abbr>-konformer Schreibweise zusammen. Dann wird eine neue <code>callback()</code>-Methode des RED_Ajax-Objektes definiert, der Header zum Übertragen von Formular-Daten geändert und die Date an das Verarbeitungsscript gesendet. Nach dem Senden wird wiederum die <code>loadXML()</code>-Methode aufgerufen, um die neuen Daten vom Server abzufragen und anzugeigen.</p>
<ol class="Sourcecode">
<li><code> edit : function()</code> <code>{},</code></li>
<li><code> update : function(form) </code><code>{</code><code>},</code></li>
<li><code> remove : function() {</code><code>}</code></li>
<li><code>}</code></li>
</ol>
<p>Bleiben zum Schluss noch 3 weiter Methoden übrig. Als kleine Herausforderung habe ich mir überlegt diese von euch selber erstellen zu lassen. Das ist auch gar nicht so schwer.</p>
<p>Z.B. ähnelt die <code>edit()</code>-Methode ja der <code>add()</code>-Methode, nur dass hier jetzt noch die Daten des aktuellen Mitgliedes eingefügt werden müssen. Auch die <code>update()</code>-Methode ist nur eine abgewandelte Version der <code>insert()</code>-Methode und bei der <code>remove()</code>-Methode brauch ja nur die aktuelle ID an den Server übermittelt werden, um den richtigen Datansatz zu löschen. Ich glaube fest daran, dass das jeder Lesen schaffen kann.</p>
<p>Hier nochmals die gesamte JavaScript-Datei zum Download.</p>
<ul>
<li><a title="Adressbuch-Datei" href="http://weblabor.re-design.de/AJAX-Adressbuch.zip">Adressbuch-Datei</a></li>
</ul>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/" title="AJAX Abressbuch &#8211; Tutorial Teil 3">AJAX Abressbuch &#8211; Tutorial Teil 3</a></li><li><a href="http://www.re-design.de/2007/12/21/ajax-adressbuch-tutorial-teil-1/" title="AJAX Adressbuch &#8211; Tutorial Teil 1">AJAX Adressbuch &#8211; Tutorial Teil 1</a></li><li><a href="http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/" title="Slideshow mit einer HTML-Seite Teil 2">Slideshow mit einer HTML-Seite Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/" title="Slideshow mit einer HTML-Seite Teil 1">Slideshow mit einer HTML-Seite Teil 1</a></li><li><a href="http://www.re-design.de/2007/12/24/ajax-adressbuch-tutorial-teil-4/" title="AJAX Adressbuch &#8211; Tutorial Teil 4">AJAX Adressbuch &#8211; Tutorial Teil 4</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Slideshow mit einer HTML-Seite Teil 2</title>
		<link>http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/</link>
		<comments>http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/#comments</comments>
		<pubDate>Wed, 19 Dec 2007 00:00:45 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2007]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[literal]]></category>
		<category><![CDATA[s5]]></category>
		<category><![CDATA[slideshow]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=82</guid>
		<description><![CDATA[Nachdem ich gestern im ersten Teil den Aufbau der HTML-Seite und das Design mit CSS beschrieben habe, folgt nun die Programmierung das Ganzen. Es ist gar nicht so schwer wie man Denken könnte. Nur ganze 4 Funktionen brauche ich für meine einfache Slideshow. Die gesamte Funktionalität habe ich in ein eigenes Objekt gekapselt, um eine [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem ich gestern <a href="http://www.re-design.de/workbook/?p=81">im ersten Teil</a> den Aufbau der HTML-Seite und das Design mit <abbr title="Cascading Style Sheet">CSS</abbr> beschrieben habe, folgt nun die Programmierung das Ganzen. Es ist gar nicht so schwer wie man Denken könnte. Nur ganze 4 Funktionen brauche ich für meine einfache Slideshow.</p>
<p><span id="more-82"></span></p>
<p>Die gesamte Funktionalität habe ich in ein eigenes Objekt gekapselt, um eine übersichtlichere, einfach erweiterbare und flexible Programmierung zu haben. Für solchen Kapseln benutze ich fast immer Literale.</p>
<ol class="Sourcecode">
<li><code>var RED_Slideshow = {</code></li>
<li><code>    slides   : [],</code></li>
<li><code>    current  : 0,</code></li>
<li><code>    messages : {</code></li>
<li><code>                   first : 'Sie sind am Anfang.',</code></li>
<li><code>                   last : 'Sie sind am Ende der Präsentation.'</code></li>
<li><code>               },</code></li>
<li><code>    init     : function(element)</code> <code>{</code> <code>}</code> <code>,</code></li>
<li><code>    load     : function() {},</code></li>
<li><code>    goto     : function(d) </code><code>{</code><code>},</code></li>
<li><code>    create   : function() {</code><code>}</code></li>
<li><code>};</code></li>
</ol>
<p>Zusätzlich zu den 4 Funktion gibt es noch 3 Eigenschaften. In der Eigenschaft <code>slides</code> werden die anzuzeigenden Slides zwischengespeichert um sie schnell ein- und auszublenden. Die Eigenschaft <code>current</code> repräsentiert das aktuelle Slide welches gerade angezeigt wird und in der Eigenschaft messages existiert ein Unterobjekt welches Meldungen beinhaltet, die im Verlauf der Benutzung dem Betrachter angezeigt werden können.</p>
<p>Mit der Methode init wird die Anwendung gestartet. Sie sucht dabei im angegebenen Container die Slides.</p>
<ol class="Sourcecode">
<li><code>init : function(element)</code></li>
<li><code>{</code></li>
<li><code>    var div = document.getElementById(element).getElementsByTagName('div');</code></li>
<li><code>    for(var i=0; i&lt;div.length; i++)</code></li>
<li><code>    {</code></li>
<li><code>        if(div[i].className == 'slide')</code></li>
<li><code>        {</code></li>
<li><code>            this.slides.push(div[i]);</code></li>
<li><code>        }</code></li>
<li><code>    }</code></li>
<li></li>
<li><code>    this.load();</code></li>
<li><code>    this.create(); </code></li>
<li></li>
<li><code>    document.getElementById('helper').onclick = function()</code></li>
<li><code>    {</code></li>
<li><code>        slideshow.goto(+1);</code></li>
<li><code>    }</code></li>
<li><code>},</code></li>
</ol>
<p>Als erstes werden die <code>&lt;div&gt;</code>-Tages innerhalb des Containers gesucht, der Klassenname überprüft und dann in die Eigenschaft slides abgelegt. Dann rufe ich die <code>load()</code>-Methode auf, um das aktuelle Slide anzuzeigen. Danach lasse ich über die <code>create()</code>-Methode die dynamische Navigation erzeugen.</p>
<p>Zum Schluss füge ich dem Objekt mit der <abbr title="Identifikation">ID</abbr> helper einen Klick-Event hinzu. Dies soll nur verdeutlichen, wie auch ohne Buttons navigiert werden kann.</p>
<ol class="Sourcecode">
<li><code>load : function()</code></li>
<li><code>{</code></li>
<li><code>    for(var i=0; i&lt;this.slides.length; i++)</code></li>
<li><code>    {</code></li>
<li><code>        this.slides[i].style.display = 'none';</code></li>
<li><code>    }</code></li>
<li><code>    this.slides[this.current].style.display = 'block';</code></li>
<li><code>},</code></li>
</ol>
<p>Die <code>load()</code>-Methode ist super einfach. In ihr durchlaufe ich den Array mit den Slides und füge einen Style hinzu, der alle Slides unsichtbar schaltet. Zum Schluss wird dann das aktuelle Slide explizit auf sichtbar gesetzt.</p>
<p>Damit habe ich eine Methode die bei jedem Aufruf immer das aktuelle Slide anzeigt und alle anderen auf Unsichtbar setzt. So kann diese Methode später auch das Anzeigen von Slides außerhalb der Reihenfolge benutzt werden.</p>
<ol class="Sourcecode">
<li><code>create : function()</code></li>
<li><code>{</code></li>
<li><code>    var form = document.createElement('form');</code></li>
<li><code>    form.setAttribute('id', 'navigation');</code></li>
<li></li>
<li><code>    var btn1 = document.createElement('button');</code></li>
<li><code>    btn1.setAttribute('type', 'button');</code></li>
<li><code>    btn1.setAttribute('id', 'btn_prev');</code></li>
<li><code>    btn1.appendChild(document.createTextNode('zurück'));</code></li>
<li><code>    btn1.onclick = function()</code></li>
<li><code>    {</code></li>
<li><code>        </code><code>RED_Slideshow.goto(-1);</code></li>
<li><code>    }</code></li>
<li></li>
<li><code>    var btn2 = document.createElement('button');</code></li>
<li><code>    btn2.setAttribute('type', 'button');</code></li>
<li><code>    btn2.setAttribute('id', 'btn_next');</code></li>
<li><code>    btn2.appendChild(document.createTextNode('nächster'));</code></li>
<li><code>    btn2.onclick = function()</code></li>
<li><code>    {</code></li>
<li><code>        </code><code>RED_Slideshow.goto(+1);</code></li>
<li><code>    </code><code>}</code></li>
<li></li>
<li><code>    form.appendChild(btn1);</code></li>
<li><code>    form.appendChild(btn2);</code></li>
<li></li>
<li><code>    var body = document.getElementsByTagName('body')[0];</code></li>
<li><code>    var footer = document.getElementById('footer');</code></li>
<li></li>
<li><code>    body.insertBefore(form, footer);</code></li>
<li><code>}</code></li>
</ol>
<p>Nun zu der umfangreichsten Methode, da sie die dynamische Navigation erzeugt. Ich habe mich hier für ein kleines Formular entschieden, welches einfache Buttons beinhaltet. Ich erzeugt also zunächst den &lt;form&gt;-Tag und dann die 2 Buttons. Weiterhin fügt ich diesen Buttons noch Klick-Events hinzu, die wiederum eine Literal-Methode aufrufen.</p>
<p>Hier ist auf jeden Fall zu beachten, dass man nicht mit dem Schlüsselwort <code>this</code> arbeitet. Denn würde ich im Klick-Event <code>this</code> verwenden, dann würde sich das <code>this</code> auf den jeweiligen Button beziehen und nicht auf das Literal. Deshalb gehe ich den Umweg über den direkten Aufruf der Literal-Methode.</p>
<p>Zum Schluss setze ich das Formular vor meinen Fußbereich ein, in dem ich als erstes eine Verweis auf den <code>&lt;body&gt;</code>-Tag  und dann einen Verweis auf den Fußbereich erzeuge.</p>
<ol class="Sourcecode">
<li><code>goto : function(d)</code></li>
<li><code></code><code>{</code></li>
<li><code>    this.current += d;</code></li>
<li><code>    if(this.current == this.slides.length)</code></li>
<li><code>    {</code></li>
<li><code>        //alert(this.messages.last);</code></li>
<li><code>        this.current = 0;</code></li>
<li><code>    }</code></li>
<li><code>    if(this.current &lt; 0)</code></li>
<li><code>    {</code></li>
<li><code>        //alert(this.message.first);</code></li>
<li><code>        this.current = this.slides.length-1;</code></li>
<li><code>    }</code></li>
<li><code>    this.load();</code></li>
<li><code>},</code></li>
</ol>
<p>Die letzte Methode ist für die Navigation bestimmt. Ihr wird entweder der Wert 1 oder -1 übergeben. Dieser Parameter wird zum aktuellen Zähler hinzugefügt.</p>
<p>Als nächstes überprüft die Methode, ob das Ende oder der Anfang der Slideshow erreicht ist und setzt dann eigenständig den Zähler auf den passenden Wert um einen Schleifen-Vorgang zu erzeugen.</p>
<p>Zum Schluss ruft die Methode die <code>load()</code>-Methode auf, um das neue Slide auch anzuzeigen.</p>
<p>Damit ist auch schon das gesamte Slideshow-Literal erklärt. Es fehlt nur die Einbindung dieses Scriptes in die HTML-Datei und der Aufruf der Initialisierung mit der Parameter-Übergabe wo die Slides in der HTML-Datei liegen.</p>
<ol class="Sourcecode">
<li><code>// JavaScript Document</code></li>
<li><code>&lt;script type="text/javacript" src="RED_Slideshow.js"&gt;&lt;/script&gt;</code></li>
<li><code>&lt;script type="text/javascript"&gt;</code></li>
<li><code>//&lt;!{CDATA[</code></li>
<li><code>window.onload = function()</code></li>
<li><code>{</code></li>
<li><code>    RED_Slideshow.init('body');</code></li>
<li><code>};</code></li>
<li><code>//]]&gt;</code></li>
<li><code>&lt;/script&gt;</code></li>
</ol>
<p>Da wir mit der <code>create()</code>-Methode ein neues <abbr title="Document Object Model">DOM</abbr>-Objekt mit der ID navigation erzeugen, habe ich meine CSS-Datei um folgende Formatierung erweitert.</p>
<ol class="Sourcecode">
<li><code>#navigation {</code></li>
<li><code>    position:absolute;</code></li>
<li><code>    bottom:3em;</code></li>
<li><code>    border:1px solid;</code></li>
<li><code>    width:50%;</code></li>
<li><code>    height:2em;</code></li>
<li><code>    margin:auto;</code></li>
<li><code>    text-align:center;</code><code> </code><code></code></li>
<li><code>    z-index:2;</code></li>
<li><code>    left:25%;</code></li>
<li><code>}</code></li>
</ol>
<h4>Downloads</h4>
<ul>
<li><a href="http://www.re-design.de/workbook/wp-content/uploads/2007/12/demo2.html" rel="download">HTML-Datei</a></li>
<li><a href="http://www.re-design.de/workbook/wp-content/uploads/2007/12/red_slideshow.css">CSS-Datei</a></li>
<li><a href="http://www.re-design.de/workbook/wp-content/uploads/2007/12/red_slideshow.js">JavaScript-Datei</a></li>
<li><a href="http://www.re-design.de/workbook/wp-content/uploads/2007/12/slideshow-praesentation.zip">komplettes Set</a></li>
</ul>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/" title="Slideshow mit einer HTML-Seite Teil 1">Slideshow mit einer HTML-Seite Teil 1</a></li><li><a href="http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/" title="AJAX Adressbuch &#8211; Tutorial Teil 2">AJAX Adressbuch &#8211; Tutorial Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/21/ajax-adressbuch-tutorial-teil-1/" title="AJAX Adressbuch &#8211; Tutorial Teil 1">AJAX Adressbuch &#8211; Tutorial Teil 1</a></li><li><a href="http://www.re-design.de/2010/12/20/html5-buch/" title="HTML5 &ndash; Buch">HTML5 &ndash; Buch</a></li><li><a href="http://www.re-design.de/2008/02/11/css-import-macht-probleme/" title="CSS Import macht Probleme">CSS Import macht Probleme</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Slideshow mit einer HTML-Seite Teil 1</title>
		<link>http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/</link>
		<comments>http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 00:00:12 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2007]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[literal]]></category>
		<category><![CDATA[s5]]></category>
		<category><![CDATA[slideshow]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=81</guid>
		<description><![CDATA[Im nächsten Beispiel möchte ich zeigen wie man mit JavaScript wunderbar das DOM einer HTML-Datei ändern kann. Dazu habe ich mich für den Nachbau von S5 entschieden. Im ersten Teil werde ich den Aufbau der HTML- und CSS-Datei erklären, um dann morgen in die JavaScript-Programmierung einzusteigen. Fangen wir mit dem HTML an. Den Aufbau habe [...]]]></description>
			<content:encoded><![CDATA[<p>Im nächsten Beispiel möchte ich zeigen wie man mit JavaScript wunderbar das <abbr title="Document Object Model">DOM</abbr> einer <abbr title="Hypertext Markup Language">HTML</abbr>-Datei ändern kann. Dazu habe ich mich für den Nachbau von <abbr title="simples, standardbasiertes Slideshowsystem"><a href="http://yatil.de/s5/" title="zur deutsche Übersetzung von S5" target="_blank">S5</a></abbr> entschieden. Im ersten Teil werde ich den Aufbau der HTML- und <abbr title="Cascading Style Sheet">CSS</abbr>-Datei erklären, um dann morgen in die JavaScript-Programmierung einzusteigen.</p>
<p><span id="more-81"></span></p>
<p>Fangen wir mit dem HTML an. Den Aufbau habe ich bewusst nicht sehr komplex gestaltet, um die spätere Programmierung einfach zu halten. Im Grunde besteht die Datei aus 5 Hauptkontainern:</p>
<ol>
<li>header<br />
Hier besteht die Möglichkeit der Präsentation eine Überschrift und eine Tagline zu geben.</li>
<li>body<br />
Dieser Bereich enthält alle Slides die nacheinander angezeigt werden. Zusätzlich wird hier auch ein <code>&lt;noscript&gt;</code>-Tag eingebunden, um den Benutzern darauf hinzuweisen, dass die Präsentation nicht wie vorgesehen funktionieren kann bei deaktiviertem JavaScript.</li>
<li>helper<br />
Der helper-Bereich ist für zusätzliche Informationen vorgesehen und am Anfang noch leer.</li>
<li>navigation<br />
Dieser wird erst durch JavaScript erzeugt und beinhaltet die Navigationselemente.</li>
<li>footer<br />
Im letzen Bereich kann Platz für weitere Angaben, wie z.B. rechtliche Hinweise, genutzt werden.</li>
</ol>
<p>Hier nun de gesamte Quellcode mit gekürzten Texten:</p>
<ol class="Sourcecode">
<li><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</code></li>
<li><code>&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;</code></li>
<li><code>&lt;head&gt;</code></li>
<li><code>&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;</code></li>
<li><code>&lt;title&gt;RE-Design - JavaScript - Slideshow Präsentation&lt;/title&gt;</code></li>
<li><code>&lt;link rel="stylesheet" href="ssp.css" type="text/css" media="screen" /&gt;</code></li>
<li><code>&lt;script type="text/javascript" src="ssp.js"&gt;&lt;/script&gt;</code></li>
<li><code>&lt;script type="text/javascript"&gt;</code></li>
<li><code>/*&lt;!CDATA[*/</code></li>
<li><code>window.onload = function()</code></li>
<li><code>{</code></li>
<li><code>    slideshow.init();</code></li>
<li><code>}</code></li>
<li><code>/*]]&gt;*/</code></li>
<li><code>&lt;/script&gt;</code></li>
<li><code>&lt;/head&gt;</code></li>
<li><code>&lt;body&gt;</code></li>
<li><code>&lt;div id="header"&gt;</code></li>
<li><code>    &lt;h1&gt;Powerpoint Präsentation&lt;/h1&gt;</code></li>
<li><code>    &lt;h2&gt;Eine Slideshow mit JavaScript&lt;/h2&gt;</code></li>
<li><code>&lt;/div&gt;</code></li>
<li><code>&lt;div id="body"&gt;</code></li>
<li><code>    &lt;noscript&gt;</code></li>
<li><code>    &lt;p&gt;Sie brauchen unbedingt JavaScript, um die ganze Funktionalität benutzen zu können.&lt;/p&gt;</code></li>
<li><code>    &lt;/noscript&gt;</code></li>
<li><code>    &lt;div class="slide"&gt;</code></li>
<li><code>    &lt;h3&gt;Slide 1&lt;/h3&gt;</code></li>
<li><code>    &lt;p&gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit ... Nullam nunc.&lt;/p&gt;</code></li>
<li><code>    &lt;p&gt;Sed et lectus in massa imperdiet tincidunt ... Etiam mi libero, luctus nec, blandit ac, rutrum ac, lectus.&lt;/p&gt;</code></li>
<li><code>    &lt;/div&gt;</code></li>
<li><code>    &lt;div class="slide"&gt;</code></li>
<li><code>    &lt;h3&gt;Slide 2&lt;/h3&gt;</code></li>
<li><code>    &lt;p&gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit ... Nullam nunc.&lt;/p&gt;</code></li>
<li><code>    &lt;p&gt;Sed et lectus in massa imperdiet tincidunt ... Etiam mi libero, luctus nec, blandit ac, rutrum ac, lectus.&lt;/p&gt;</code></li>
<li><code>    &lt;p&gt;Morbi consequat felis vitae enim ... Mauris aliquam dui eget purus.&lt;/p&gt;</code></li>
<li><code>    &lt;p&gt;Sed ut metus sed wisi commodo viverra ... Curabitur a turpis at ligula lobortis cursus.&lt;/p&gt;</code></li>
<li><code>    &lt;/div&gt;</code></li>
<li><code>    &lt;div class="slide"&gt;</code></li>
<li><code>    &lt;h3&gt;Slide 3&lt;/h3&gt;</code></li>
<li><code>    &lt;p&gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit ... Nullam nunc.&lt;/p&gt;</code></li>
<li><code>    &lt;p&gt;Sed et lectus in massa imperdiet tincidunt ... Etiam mi libero, luctus nec, blandit ac, rutrum ac, lectus.&lt;/p&gt;</code></li>
<li><code>    &lt;/div&gt;</code></li>
<li><code>&lt;/div&gt;</code></li>
<li><code>&lt;div id="helper"&gt;&lt;/div&gt;</code></li>
<li><code>&lt;div id="footer"&gt;</code></li>
<li><code>    © 2007 - &lt;a href="http://www.re-design.de"&gt;RE-Design&lt;/a&gt;</code></li>
<li><code>&lt;/div&gt;</code></li>
<li><code>&lt;/body&gt;</code></li>
<li><code>&lt;/html&gt;</code></li>
</ol>
<p>Als nächstes erkläre ich die wichtigsten Punkte in der CSS-Datei</p>
<ol class="Sourcecode">
<li><code>@charset "utf-8";</code></li>
<li><code>/* CSS Document */</code></li>
<li></li>
<li><code>body {</code></li>
<li><code>margin:0;</code></li>
<li><code>padding:0;</code></li>
<li><code>font: 16px/130% normal normal Arial, Helvetica, sans-serif;</code></li>
<li><code>background-color:#b3d1e1;</code></li>
<li><code>}</code></li>
</ol>
<p>Als erstes die Body-Formatierung. Hier wird der Abstand zum Rand auf Null gesetzt, um jeden Platz der da ist auch zu nutzen. Zusätzlich habe ich Anpassungen an der Typographie vorgenommen und die Basis-Hintergrundfarbe eingestellt.</p>
<ol class="Sourcecode">
<li><code>#header {</code></li>
<li><code>position:absolute;</code></li>
<li><code>overflow:hidden;</code></li>
<li><code>top:0;</code></li>
<li><code>width:100%;</code></li>
<li><code>height:6em;</code></li>
<li><code>background-color:#069;</code></li>
<li><code>color:#fff;</code></li>
<li><code>padding:0 1em;</code></li>
<li><code>}</code></li>
</ol>
<p>Der Kopfbereich wird absolut links oben platziert. Mit einer relative Höhe wird fester Platz für ihn reserviert. Weiterhin habe ich eine passende Hintergrund- und Schriftfarbe festgelegt. Um absolut positionierte Layer auch über die gesamte Breite fließen zu lassen wird die Breite auf 100% gesetzt.</p>
<ol class="Sourcecode">
<li><code>#body {</code></li>
<li><code>position:absolute;</code></li>
<li><code>overflow:auto;</code></li>
<li><code>top:6em;</code></li>
<li><code>bottom:4em;</code></li>
<li><code>width:100%;</code></li>
<li><code>}</code></li>
</ol>
<p>Auch der mittlere Präsentationsbereich ist absolut positioniert. Um keine Überlappung mit die Kopfbereich zu erhalten, fängt der Layer erst dort an wo der Kopfbereich endet. Gleiche habe ich auch für den Fußbereich eingestellt.</p>
<ol class="Sourcecode">
<li><code>#footer {</code></li>
<li><code>position:absolute;</code></li>
<li><code>overflow:hidden;</code></li>
<li><code>height:3em;</code></li>
<li><code>bottom:0;</code></li>
<li><code>width:100%;</code></li>
<li><code>padding:.5em 1em;</code></li>
<li><code>background-color:#069;</code></li>
<li><code>}</code></li>
</ol>
<p>Ähnlich wie der Kopfbereich wird auch der Fußbereich eine feste Positionierung zugewiesen. Allerdings im unteren Bereich des Browsers. Dabei musste ich darauf achten, dass die Höhe des Fußbereiches sich aus der Layerhöhe plus dem Innenabstand des Layers zusammensetzt.</p>
<ol class="Sourcecode">
<li><code>#helper {</code></li>
<li><code>position:absolute;</code></li>
<li><code>overflow:hidden;</code> <code></code></li>
<li><code>width:50%;</code></li>
<li><code>height:2em;</code></li>
<li><code>bottom:3em;</code></li>
<li><code>left:25%;</code></li>
<li><code>z-index:2;</code></li>
<li><code>}</code></li>
</ol>
<p>Zwar ist in meinem helper-Layer noch nichts drin aber platzieren kann ich ihn auf jeden Fall schon mal. Das besondere daran ist, dass ich ihn über den Fußbereich halb überlappen lassen wollte. Um dieses zu erreichen muss über die z-index-Eigenschaft der Layer vor dem nachfolgenden Fußbereich gelegt werden.</p>
<ol class="Sourcecode">
<li><code>.slide {</code></li>
<li><code>margin:1em;</code></li>
<li><code>}</code></li>
</ol>
<p>Die Formatierung der einzelnen Slides habe ich nicht großartig verändert, um dem Umfang der CSS-Datei möglichst übersichtlich zu halten. Es ist aber jeder Zeit möglich, den einzelnen Slides über IDs ein individuells Design zu geben.</p>
<p>Und morgen <a href="http://www.re-design.de/workbook/?p=82" title="Slideshow mit einer HTML-Seite">im Teil 2</a> beschreibe ich die JavaScript-Programmierung die nötig ist um dem Ganzen Leben einzuhauchen.</p>
<h4>Downloads</h4>
<li><a href="http://www.re-design.de/workbook/wp-content/uploads/2007/12/demo2.html" rel="download">HTML-Datei</a></li>
<li><a href="http://www.re-design.de/workbook/wp-content/uploads/2007/12/red_slideshow.css">CSS-Datei</a></li>
<li><a href="http://www.re-design.de/workbook/wp-content/uploads/2007/12/red_slideshow.js">JavaScript-Datei</a></li>
<li><a href="http://www.re-design.de/workbook/wp-content/uploads/2007/12/slideshow-praesentation.zip">komplettes Set</a></li>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/" title="Slideshow mit einer HTML-Seite Teil 2">Slideshow mit einer HTML-Seite Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/" title="AJAX Adressbuch &#8211; Tutorial Teil 2">AJAX Adressbuch &#8211; Tutorial Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/21/ajax-adressbuch-tutorial-teil-1/" title="AJAX Adressbuch &#8211; Tutorial Teil 1">AJAX Adressbuch &#8211; Tutorial Teil 1</a></li><li><a href="http://www.re-design.de/2010/12/20/html5-buch/" title="HTML5 &ndash; Buch">HTML5 &ndash; Buch</a></li><li><a href="http://www.re-design.de/2008/02/11/css-import-macht-probleme/" title="CSS Import macht Probleme">CSS Import macht Probleme</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mit JavaScript DOM erzeugen</title>
		<link>http://www.re-design.de/2007/12/17/mit-javascript-xml-erzeugen/</link>
		<comments>http://www.re-design.de/2007/12/17/mit-javascript-xml-erzeugen/#comments</comments>
		<pubDate>Sun, 16 Dec 2007 23:00:25 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2007]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Container]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[dom-scripting]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=76</guid>
		<description><![CDATA[Hier nun ein weiterer Artikel zum Thema XML-Erzeugung mit Web-Programmiersprachen. Im Gegensatz zu gestern konzentriere ich mich heute auf das Erstellen mit JavaScript. Aber auch das ist nicht sehr schwierig. Anders als bei PHP gibt es in JavaScript keine direkte DOM-Objekte, sondern alles muss über das document-Objekt laufen. Auch hier gibt es nur ein paar [...]]]></description>
			<content:encoded><![CDATA[<p>Hier nun ein weiterer Artikel zum Thema <abbr title="Extensible Markup Language">XML</abbr>-Erzeugung mit Web-Programmiersprachen. Im Gegensatz zu gestern konzentriere ich mich heute auf das Erstellen mit JavaScript. Aber auch das ist nicht sehr schwierig.</p>
<p>Anders als bei <abbr title="PHP: Hypertext Preprocessor">PHP</abbr> gibt es in JavaScript keine direkte <abbr title="Document Object Model">DOM</abbr>-Objekte, sondern alles muss über das document-Objekt laufen. Auch hier gibt es nur ein paar wichtige Methoden die man kennen sollte:</p>
<ul>
<li>document.createElement();</li>
<li>document.createTextNode();</li>
<li>element.appendChild();</li>
<li>element.setAttribute();</li>
</ul>
<p><span id="more-76"></span><br />
Ich habe mir als Beispiel überlegt in einen <code>&lt;div&gt;</code>-Container eine ähnline Mitarbeiter-Liste zu erzeugen wie gestern mit PHP. Hier nun erstmal der Quellcode der <abbr title="Hypertext Markup Language">HTML</abbr>-Datei:</p>
<ol class="Sourcecode">
<li><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" ?="?">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</a>&gt; </code></li>
<li><code>&lt;html xmlns="<a href="http://www.w3.org/1999/xhtml" ?="?">http://www.w3.org/1999/xhtml"</a>&gt; </code></li>
<li><code>&lt;head&gt; </code></li>
<li><code>&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt; </code></li>
<li><code>&lt;title&gt;RED - JavaScript - XML-Loader&lt;/title&gt; </code></li>
<li><code>&lt;script language="javascript" type="text/javascript" src="red_xml.js"&gt;&lt;/script&gt; </code></li>
<li><code>&lt;script language="javascript" type="text/javascript"&gt; </code></li>
<li><code>window.onload = function() </code></li>
<li><code>{ </code></li>
<li><code>    RED_DOM.create('container'); </code></li>
<li><code>} </code></li>
<li><code>&lt;/script&gt; </code></li>
<li><code>&lt;/head&gt; </code></li>
<li><code>&lt;body&gt; </code></li>
<li><code>&lt;div id="container"&gt;&lt;/div&gt; </code></li>
<li><code>&lt;/body&gt; </code></li>
<li><code>&lt;/html&gt;</code></li>
</ol>
<p>Wie man deutlich sehen kann, wird nach dem Laden des Dokumente die Methode meiner Objectes aufgerufen und als Parameter die <abbr title="Identifikation">ID</abbr> des Containers übergeben.</p>
<p>In diesen Container wird nun die Mitarbeiterliste erzeugt.</p>
<ol class="Sourcecode">
<li><code>var RED_DOM =</code></li>
<li><code>{</code></li>
<li><code>create : function(node)</code></li>
<li><code>{</code></li>
<li><code>    var dom = document.getElementById(node);</code></li>
</ol>
<p>Als erstes erzeuge ich einen Verweis auf das Element.</p>
<ol class="Sourcecode" start="start">
<li><code>    var mitarbeiter = dom.appendChild(document.createElement('ul'));</code></li>
</ol>
<p>Dann füge ich eine ungeordnete Liste hinzu.</p>
<ol class="Sourcecode" start="start">
<li><code>    var person = mitarbeiter.appendChild(document.createElement('li'));</code></li>
<li><code>    person.setAttribute('id','2007-12-15-RE');</code></li>
</ol>
<p>Danach wird ein neuer Listeneintrag generiert und mit einer ID versehen.</p>
<ol class="Sourcecode" start="start">
<li><code>    var vorname = person.appendChild(document.createElement('span'));</code></li>
<li><code>    vorname.appendChild(document.createTextNode('Enrico')); </code></li>
<li><code>    var nachname = person.appendChild(document.createElement('span'));</code></li>
<li><code>    nachname.appendChild(document.createTextNode('Reinsdorf'));</code></li>
</ol>
<p>Der Vor- und Nachname wird, um ihn zu kapseln in einen <code>&lt;span&gt;</code>-Tag gelegt.</p>
<ol class="Sourcecode" start="start">
<li><code>    var contacts = person.appendChild(document.createElement('ul'));</code></li>
<li><code>    var email = contacts.appendChild(document.createElement('li'));</code></li>
<li><code>    email = email.appendChild(document.createElement('a'));</code></li>
<li><code>    email.setAttribute('href', 'mailto:enrico@re-design.de');</code></li>
<li><code>    email.appendChild(document.createTextNode('enrico@re-design.de'));</code></li>
</ol>
<p>Um alle Kontakt auflisten zu können, erzeuge ich eine weitere Unterliste. In die die Email als Verweis abgelegt wird.</p>
<ol class="Sourcecode" start="start">
<li><code>    var telefon = contacts.appendChild(document.createElement('li'));</code></li>
<li><code>    telefon.setAttribute('class', 'mobil');</code></li>
<li><code>    var vorwahl = telefon.appendChild(document.createElement('span'));</code></li>
<li><code>    vorwahl.appendChild(document.createTextNode('0177'));</code></li>
<li><code>    var nummer = telefon.appendChild(document.createElement('span'));<br />
</code></li>
<li><code>    nummer.appendChild(document.createTextNode('2822557'));</code></li>
<li><code>}<br />
</code></li>
<li><code>}</code> ;</li>
</ol>
<p>Zum Schluss füge ich noch die Listeneintrag für die Telefonnummer hinzu, welcher sich wiederum in 2 <code>&lt;span&gt;</code>-Tags aufsplittet.</p>
<p>Wie man erkennen kan ist der Ablauf dem von PHP sehr ähnlich. Was das spätere Arbeiten mit <abbr title="Asyncron JavaScript And XML">AJAX</abbr> sehr erleichtert. Auch verhält sich ActionScript fast gleich, da es ähnlich strukturiert ist wie JavaScript.</p>
<ul>
<li><a href="http://www.re-design.de/workbook/wp-content/uploads/2007/12/demo1.html" title="HTML-Datei">HTML-Datei</a></li>
<li><a href="http://www.re-design.de/workbook/wp-content/uploads/2007/12/red_xml.js" title="JavaScript-Datei">JavaScript-Datei</a></li>
<li><a href="http://www.re-design.de/workbook/wp-content/uploads/2007/12/js-xml-creater.zip" title="komplettes Set">komplettes Set</a></li>
</ul>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2007/12/16/schnelle-erstellung-mit-mit-php/" title="schnelle Erstellung von XML mit PHP">schnelle Erstellung von XML mit PHP</a></li><li><a href="http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/" title="AJAX Abressbuch &#8211; Tutorial Teil 3">AJAX Abressbuch &#8211; Tutorial Teil 3</a></li><li><a href="http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/" title="AJAX Adressbuch &#8211; Tutorial Teil 2">AJAX Adressbuch &#8211; Tutorial Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/" title="Slideshow mit einer HTML-Seite Teil 2">Slideshow mit einer HTML-Seite Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/" title="Slideshow mit einer HTML-Seite Teil 1">Slideshow mit einer HTML-Seite Teil 1</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2007/12/17/mit-javascript-xml-erzeugen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX-Klasse, einfach gebaut</title>
		<link>http://www.re-design.de/2007/12/15/ajax-klasse-einfach-gebaut/</link>
		<comments>http://www.re-design.de/2007/12/15/ajax-klasse-einfach-gebaut/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 23:00:19 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2007]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[beispiel]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[klasse]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=32</guid>
		<description><![CDATA[Bei der Erstellung von moderen Websites spielt AJAX eine immer wichtigere Rolle. In diesem Tutorial möchte ich euch eine kleine JavaScript-Klasse vorstellen. Diese Klasse kann dann Grundlage für weiter tolle Webanwendungen sein kann. Die einfache und trotzdem flexible Verwendung der erstellten Klasse lag mir dabei besonders am Herzen. Verwendung der AJAX-Klasse Eingebunden und verwendet wird [...]]]></description>
			<content:encoded><![CDATA[<p>Bei der Erstellung von moderen Websites spielt AJAX eine immer wichtigere Rolle. In diesem Tutorial möchte ich euch eine kleine JavaScript-Klasse vorstellen. Diese Klasse kann dann Grundlage für weiter tolle Webanwendungen sein kann.</p>
<p>Die einfache und trotzdem flexible Verwendung der erstellten Klasse lag mir dabei besonders am Herzen.<br />
<span id="more-32"></span></p>
<h3>Verwendung der AJAX-Klasse</h3>
<p>Eingebunden und verwendet wird die Klasse über folgende Befehle:</p>
<ol class="Sourcecode">
<li><code>&lt;script type="text/javascript" src="ajax.js"&gt;&lt;/script&gt; </code></li>
<li><code>&lt;script type="text/javascript"&gt; </code></li>
<li><code>//&lt;![CDATA[ </code></li>
<li><code>function afterLoad(xml) </code></li>
<li><code>{ </code></li>
<li><code>    alert(xml.toString()); </code></li>
<li><code>} </code></li>
<li><code>ajax.callback = function() </code></li>
<li><code>{ </code></li>
<li><code>    afterLoad(this.responseXML); </code></li>
<li><code>} </code></li>
<li><code>  </code></li>
<li><code>ajax.init(); </code></li>
<li><code>ajax.load('getXML.php'); </code></li>
<li><code>  </code></li>
<li><code>//]]&gt; </code></li>
<li><code>&lt;/script&gt;</code></li>
</ol>
<p>Wie ihr seht ist diese Verarbeitung sehr einfach einzusetzen. Als erstes muss natürlich die Klasse in das HTML-Dokument eingebunden werden. Dann legt man fest was passieren soll, wie die Daten verarbeiter werden sollen. Zusätzlich sollte man in der eigentlichen Klasse definieren das diese Funktion auch aufgerufen wird, sonst passiert gar nichts. Dazu habe ich einen sogenannten Hock vordefiniert, der dann einfach mit Funktionalität gefüllt wird. Zum Schluß initialisiert man nur nach die Klasse, um das XMLHttpRequest-Objekt anzulegen und läd dann die entsprechende Datei von Server. Fertig ist ist ein flexibles Ladesystem per JavaScript.</p>
<h3>Detail zur AJAX-Klasse</h3>
<p>Natürlich möchte ich euch auch noch den Inhalt meiner Klasse kurz präsentieren, denn ich denke dadurch wird der Ausbau ud die Erweiterung relativ einfach.</p>
<ol class="Sourcecode">
<li><code>var ajax = { </code></li>
<li><code>    req             : null, </code></li>
<li><code>    url             : null, </code></li>
<li><code>    method          : 'GET', </code></li>
<li><code>    async           : false, </code></li>
<li><code>    responseXML     : null, </code></li>
<li><code>    responseText    : null, </code></li>
<li><code>    init : function() </code></li>
<li><code>        { </code></li>
<li><code>            try </code></li>
<li><code>            { </code></li>
<li><code>                this.req = new XMLHttpRequest(); </code></li>
<li><code>            } </code></li>
<li><code>            catch(e) </code></li>
<li><code>            { </code></li>
<li><code>                try </code></li>
<li><code>                { </code></li>
<li><code>                    this.req = new ActiveXObject('Microsoft.XMLHTTP'); </code></li>
<li><code>                } </code></li>
<li><code>                catch(e) </code></li>
<li><code>                { </code></li>
<li><code>                    this.req = null; </code></li>
<li><code>                } </code></li>
<li><code>            } </code></li>
<li><code>            if(this.req != null) </code></li>
<li><code>            { </code></li>
<li><code>                this.req.onreadystatechange = this.response; </code></li>
<li><code>            } </code></li>
<li><code>        }, </code></li>
<li><code>    load : function(u,m,a) </code></li>
<li><code>        { </code></li>
<li><code>            this.url = u; </code></li>
<li><code>            this.method = m || this.method; </code></li>
<li><code>            this.async = a || this.async; </code></li>
<li><code>            if(this.req != null) </code></li>
<li><code>            { </code></li>
<li><code>                this.req.open(this.method,this.url,this.async); </code></li>
<li><code>                this.req.send(); </code></li>
<li><code>            } </code></li>
<li><code>        }, </code></li>
<li><code>    response : function() </code></li>
<li><code>        { </code></li>
<li><code>            var a = ajax.req; </code></li>
<li><code>            if(a.readyState == 4) </code></li>
<li><code>            { </code></li>
<li><code>                if(a.status==0 || a.status==200 || a.statusText=='OK') </code></li>
<li><code>                { </code></li>
<li><code>                    ajax.responseXML = a.responseXML; </code></li>
<li><code>                    ajax.responseText = a.responseText; </code></li>
<li><code>                    ajax.callback(); </code></li>
<li><code>                } </code></li>
<li><code>            } </code></li>
<li><code>        }, </code></li>
<li><code>    callback : function(){} </code></li>
<li><code>};</code></li>
</ol>
<p>Ich habe mich bei der Erstellung der Klasse für Literal-Objekt entschieden, da ich die Verwendbarkeit dadurch als sehr einfach empfinde und das Instanzieren des Objektes entfällt.</p>
<h4>Eigenschaften der Klasse</h4>
<ul>
<li><strong>req</strong><br />
Hier wird später das XMLHttpRequest-Objekt abgespeichert, welches ja für den Verbindungsaufbau zu Datenquellen nötig ist.</li>
<li><strong>url</strong><br />
Um später die URL auch in einem regelmäßigen Verfahren immer wieder abzurufen, wird sie in dieser Eigenschaft abgespeichert.</li>
<li><strong>method</strong><br />
Auch wird für weitere Verwendung die Übertragungsmethode als Eigenschaft festgehalten. Mögliche sinnvolle Werte sind in diesem Fall HEAD, PUT und GET, wobei letzteres der Defaultwert ist.</li>
<li><strong>async</strong><br />
Um eine synchrone Übertragen der Daten ein zustellen, setzt man diese Eigenschaft auf true.</li>
<li><strong>responseXML</strong> und <strong>responseText</strong><br />
In diesen beiden Eigenschaften wird nach erfolgreicher Übertragung der Daten die Ergebnis gespeichert. Einmal als normale Zeichenkette und einmal als ein XML-Objekt.</li>
</ul>
<h4>Methoden der Klasse</h4>
<ul>
<li><strong>init()</strong><br />
Diese Methode sollte immer vor allen anderen Methodenaufrufen benutzt werden, da sie das XMLHttpREquest instanziert und gleichzeitig wird festgelegt, dass die response()-Methode beim Statuswechsel aufgerufen werden soll.</li>
<li><strong>load(u,m,a)</strong><br />
Durch die 3 übergebenen Parameter wird als erstes die URL der Datenquelle, die Übertragungsmethode und synchrone oder asynchrone Art festgelegen. Dann wird die Datenquelle geladen.</li>
<li><strong>response()</strong><br />
In dieser Methode wird der Status der Übertragung und der Status des Übertragenen überprüft. Im Erfolgsfall werden die übertragenen Daten in die entsprechenen Eigenschaften übertragen und die callback()-Methode aufgerufen.</li>
<li><strong>callback()</strong><br />
Dieser Hock dient zur flexiblen Benutzung der Klassen. Mit dem Überschreiben der leeren Funktion bestimmt man extern was mit dem Daten nach dem Laden geschehen soll.</li>
</ul>
<h4>Download der Dateien</h4>
<ul>
<li><a href="http://www.er-design.de/Downloads/AJAX-Klasse/ajax.js">AJAX-Klasse</a></li>
<li><a href="http://www.er-design.de/Downloads/AJAX-Klasse/ajax.html">HTML-Datei </a></li>
<li><a href="http://www.er-design.de/Downloads/AJAX-Klasse/ajax-klasse.zip">Kompletes Beispiel als ZIP-Datei</a></li>
</ul>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2007/12/12/dynamische-linkliste-bringt-mehr-usability/" title="dynamische Linkliste bringt mehr Usability">dynamische Linkliste bringt mehr Usability</a></li><li><a href="http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/" title="AJAX Abressbuch &#8211; Tutorial Teil 3">AJAX Abressbuch &#8211; Tutorial Teil 3</a></li><li><a href="http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/" title="AJAX Adressbuch &#8211; Tutorial Teil 2">AJAX Adressbuch &#8211; Tutorial Teil 2</a></li><li><a href="http://www.re-design.de/2008/12/13/ajax-php-schulung-in-stuttgart/" title="AJAX &ndash; PHP Schulung in Stuttgart">AJAX &ndash; PHP Schulung in Stuttgart</a></li><li><a href="http://www.re-design.de/2008/01/29/ajax-adressbuch/" title="AJAX Adressbuch">AJAX Adressbuch</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2007/12/15/ajax-klasse-einfach-gebaut/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Toolbar-Programmierung bei Joomla</title>
		<link>http://www.re-design.de/2007/12/14/toolbar-programmierung-bei-joomla/</link>
		<comments>http://www.re-design.de/2007/12/14/toolbar-programmierung-bei-joomla/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 09:11:04 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[joomla]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=72</guid>
		<description><![CDATA[Joomla ist schon ne Sache f&#252;r sich. Wieder einmal habe ich nach l&#228;ngere Suche eine Merkw&#252;rdigkeit herausgefunden, die mir so nicht nicht wirklich klar war. Ich schreibe gerade an einer Kalender-Komponente. Diese hat 2 Bereiche zur Verwaltung. Einmal gibt es da die Auflistung der Termine und es soll die Auflistung von Kategorien geben in denen [...]]]></description>
			<content:encoded><![CDATA[<p>Joomla ist schon ne Sache f&#252;r sich. <a title="Joomla - Illegale Variable" href="http://www.re-design.de/workbook/?p=34" rel="relativ">Wieder einmal</a> habe ich nach l&#228;ngere Suche eine Merkw&#252;rdigkeit herausgefunden, die mir so nicht nicht wirklich klar war.</p>
<p>Ich schreibe gerade an einer Kalender-Komponente. Diese hat 2 Bereiche zur Verwaltung. Einmal gibt es da die Auflistung der Termine und es soll die Auflistung von Kategorien geben in denen sich die Termine befinden. Dazu habe ich nun im Admin-Bereich 2 Icons in die Toolbar gelegt und ein eigenes JavaScript geschrieben, denn das Icon f&#252;r die Termine &#252;bergibt 2 Werte:</p>
<ol class="Sourcecode">
<li><code>&lt;a class=&quot;toolbar&quot; href=&quot;javascript:submitbutton('list', 'dates');&quot;&gt;Termine&lt;/a&gt;</code> </li>
</ol>
<p>In dem JavaScript habe ich dann folgenden Code geschrieben:</p>
<ol class="Sourcecode">
<li><code>function submitbutton(task, section)</code> </li>
<li><code>{</code> </li>
<li><code>&#160;&#160;&#160; document.adminForm.task.value=task;</code> </li>
<li><code>&#160;&#160;&#160; document.adminForm.section.value=section;</code> </li>
<li><code>&#160;&#160;&#160; try {</code> </li>
<li><code>&#160;&#160;&#160;&#160;&#160;&#160;&#160; document.adminForm.onsubmit();</code> </li>
<li><code>&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</code> </li>
<li><code>&#160;&#160;&#160; catch(e){}</code> </li>
<li><code>&#160;&#160;&#160; document.adminForm.submit();</code> </li>
<li><code>} </code></li>
</ol>
<p>Ganz so wie es Joomla braucht. Klar habe ich noch eine unsichtbares Feld f&#252;r der Wert section erstellt. Nun ist aber bei mir zuhause beim Ausf&#252;hren des Scriptes der Apache-Server immer abgest&#252;rzt und ich wusste eine sehr lange Zeit nicht warum. Bis ich aus Verzweiflung den Namen der unsichtbaren Feldes ge&#228;ndert habe. Nun hei&#223;t es area und alles funktioniert. Anscheinend wird der Wert section schon in Joomla anderweitig gebraucht und blockiert dadurch das korrekte Ausf&#252;hren des Scriptes.</p>
<p>Ich hoffe, ich konnte euch mit dieser kleinen Feststellung helfen.</p>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2008/03/25/dozent-an-der-macromedia-fachhochschule/" title="Dozent an der Macromedia Fachhochschule">Dozent an der Macromedia Fachhochschule</a></li><li><a href="http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/" title="AJAX Abressbuch &#8211; Tutorial Teil 3">AJAX Abressbuch &#8211; Tutorial Teil 3</a></li><li><a href="http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/" title="AJAX Adressbuch &#8211; Tutorial Teil 2">AJAX Adressbuch &#8211; Tutorial Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/" title="Slideshow mit einer HTML-Seite Teil 2">Slideshow mit einer HTML-Seite Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/" title="Slideshow mit einer HTML-Seite Teil 1">Slideshow mit einer HTML-Seite Teil 1</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2007/12/14/toolbar-programmierung-bei-joomla/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dynamische Linkliste bringt mehr Usability</title>
		<link>http://www.re-design.de/2007/12/12/dynamische-linkliste-bringt-mehr-usability/</link>
		<comments>http://www.re-design.de/2007/12/12/dynamische-linkliste-bringt-mehr-usability/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 23:00:26 +0000</pubDate>
		<dc:creator>Enrico Reinsdorf</dc:creator>
				<category><![CDATA[Adventskalender 2007]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[beispiel]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[link-generator]]></category>

		<guid isPermaLink="false">http://www.re-design.de/workbook/?p=61</guid>
		<description><![CDATA[Heute möchte ich euch ein kleines JavaScript geben, welches aus einem vorgegebenen &#60;div&#62;-Container alles Links extrahiert und sie als Linkliste am Ende des Containers anhängt. Hier gibt es das Demo. Warum macht es Sinn eine solche Linkliste zu erstellen? Nun fast jeder der sich mit benutzerfreundlichen Websites auseinandersetzt weiß, dass Links innerhalb von Fließtext den [...]]]></description>
			<content:encoded><![CDATA[<p>Heute möchte ich euch ein kleines JavaScript geben, welches aus einem vorgegebenen <code>&lt;div&gt;</code>-Container alles Links extrahiert und sie als Linkliste am Ende des Containers anhängt. Hier gibt es das <a title="weiter zur Demonstration" rel="demo" href="http://weblabor.re-design.de/Linklist/demo.html">Demo</a>.</p>
<p>Warum macht es Sinn eine solche Linkliste zu erstellen? Nun fast jeder der sich mit benutzerfreundlichen Websites auseinandersetzt weiß, dass Links innerhalb von Fließtext den Lesefluss stören. Außerdem kann es möglich sein Leser zu verlieren, wenn sie den Links innerhalb des Textes folgen und nicht wieder zurück kommen. Es ist besser erst am Ende des Textes alle im Text empfohlenen Links aufzulisten.<br />
<span id="more-61"></span><br />
Leider kann es sehr mühselig sein, die Passagen im Text mit Fußnoten zu kennzeichnen und dann im unteren Bereich eine Linkliste mit Ankerpunkten zu erstellen. Sowas kann wunderbar JavaScript mit einem Automatismus übernehmen.</p>
<h3>Einbindung des Link-Generators</h3>
<p>Ich habe mir überlegt, dass die Einbindung möglichst einfach sein sollte. Deshalb habe ich ein externes Script geschrieben, welches eine Variable mit einem Literal erzeugt. Dieses Script muss nur in die eigene Website eingebunden werden und ein Event festgelegt werden, wann die Abarbeitung beginnen soll.</p>
<ol class="Sourcecode">
<li><code>&lt;script src="RED_LinkGenerator.js" type="text/javascript"&gt;&lt;/script&gt;</code></li>
<li><code>&lt;script type="text/javascript"&gt;</code></li>
<li><code>//&lt;![CDATA[</code></li>
<li><code>window.onload = function()</code></li>
<li><code>{</code></li>
<li><code>var content = document.getElementById('content');</code></li>
<li><code>RED_LinkGenerator.init(content);</code></li>
<li><code>RED_LinkGenerator.writeList();</code></li>
<li><code>}</code></li>
<li><code>//]]&gt;</code></li>
<li><code>&lt;/script&gt;</code></li>
</ol>
<p>Als Übergabeparameter für die Initialisierung wird der Container gewählt in dem die Links enthalten sind. Hier z.B. der <code>&lt;div&gt;</code>-Container mit der ID <dfn>content</dfn>. Als nächstes muss nur noch die <code>writeList()</code>-Methode ausgeführt werden und das Script erzeugt am Ende des übergebenen Containers eine sortierte Liste.</p>
<p>Ich habe extra diesen Vorgang in 2 Schritte unterteilt, um flexibel zu bleiben, denn ich kann mir vorstellen später eine Methode zu schreiben, die in einen komplett anderen Container die Liste schreibt oder auch einfach nur den Array zurückgibt.</p>
<h3>Der Link-Generator selbst</h3>
<p>Ich werde jetzt hier nicht jeden einzelnen Schritt erklären. Ich versuche mich auf die wichtigsten Punkte zu beschränken.</p>
<h4>Die Initialisierung</h4>
<p>Hier wird einfach nur der übergebene Container abgespeichert.</p>
<ol class="Sourcecode">
<li><code>init: function(content)</code></li>
<li><code>{</code></li>
<li><code>this.container = content;</code></li>
<li><code>},</code></li>
</ol>
<h4>Die Methode <code>writeList()</code></h4>
<ol class="Sourcecode">
<li><code>writeList: function()</code></li>
<li><code>{</code></li>
<li><code>var nodes = this.container.getElementsByTagName('A');</code></li>
<li><code>var ol = document.createElement('OL');</code></li>
<li><code>for(var n=nodes.length-1, f=nodes.length; n&gt;=0; n--, f--)</code></li>
<li><code>{</code></li>
<li><code>var parent = nodes[n].parentNode;</code></li>
<li><code>var a = document.createElement('A');</code></li>
<li><code>a.setAttribute('href', '#a_'+n);</code></li>
<li><code>a.appendChild(document.createTextNode('['+f+']'));</code></li>
<li><code>var foot = document.createElement('SUB');</code></li>
<li><code>foot.appendChild(a);</code></li>
<li><code>var span = document.createElement('SPAN');</code></li>
<li><code>span.appendChild(document.createTextNode(nodes[n].firstChild.nodeValue));</code></li>
<li><code>span.appendChild(foot);</code></li>
<li><code>var li = document.createElement('LI');</code></li>
<li><code>var a = document.createElement('A');</code></li>
<li><code>a.appendChild(document.createTextNode(nodes[n].firstChild.nodeValue));</code></li>
<li><code>a.setAttribute('href', nodes[n].href);</code></li>
<li><code>a.setAttribute('id', 'a_'+n);</code></li>
<li><code>li.appendChild(a);</code></li>
<li><code>this.list.push(li);</code></li>
<li><code>parent.insertBefore(span, nodes[n]);</code></li>
<li><code>parent.removeChild(nodes[n+1]);</code></li>
<li><code>}</code></li>
<li><code>for(var n=this.list.length-1; n&gt;=0;n--)</code></li>
<li><code>{</code></li>
<li><code>ol.appendChild(this.list[n]);</code></li>
<li><code>}</code></li>
<li><code>this.container.appendChild(ol);</code></li>
<li><code>}</code></li>
</ol>
<p>In Zeile 15 werden aus dem Text alle Link gesucht und in Zeile 16 schon mal ein <abbr title="Hypertext Markup Language">HTML</abbr>-Knoten für die sortierte Liste angelegt.</p>
<p>Danach wird über eine <code>for</code>-Schleife alle Link-Knoten von hinten nach vorne verarbeitet, die Erklärung folgt später. Dabei wird als Erstes ein Verweis auf den Eltern-Knoten gespeichert und dann ein Link als Fußnote generiert (Zeile 22 &#8211; 27).</p>
<p>Diese Fußnote wird zusammen mit dem Linktext in einen neuen <code>&lt;span&gt;</code>-Tag gestellt (Zeile 29 &#8211; 31).</p>
<p>Danach wird der Listeneintrag mit einer Kopie des Orginallinks erzeugt (Zeile 33 &#8211; 39). Dieser Listeneintrag wird erstmal in einem Array zwischengespeichert.</p>
<p>Anschließend wird der Span-Knoten vor dem eigentlichen Link eingesetzt (Zeile 42) und der Link gelöscht (Zeile 43). Dabei muss aber darauf geachtet werden, dass in der Variablen <var>nodes</var> ein Verweis auf alle Links innerhalb des Container ist und wenn wie hier ein neuer Link, die Fußnote, hinzukommt auch die Anzahl der Links innerhalb des Textes steigt. Deshalb muss beim Löschen <code>n+1</code> gerechnet werden. Durch diese dynamische Änderung der Menge der Links im Array hat mich auch veranlasst von hinten nach vorne zu arbeiten, denn dadurch wird der Löschvorgang vereinfacht.</p>
<p>Zum Schluss muss nur noch die geordnete Liste erzeugt werden. Da aber die Links im Array in der verkehrten Reihenfolge stehen, habe ich wieder von hinten nach vorne gearbeitet, um die richtige Reihenfolge zu bekommen (Zeile 45 &#8211; 48).</p>
<h4>Fazit</h4>
<p>Ich hoffe ich konnte mit diesem kleine Beispiel zeige, wie JavaScript das Arbeiten im Web erleichtern kann. Keine Ahnung ob das schon ein Ansatz von Web 2.0 ist, aber ich finde der Automatismus kann sich schon sehen lassen.</p>
<ul>
<li><a title="komplettes Set" href="http://weblabor.re-design.de/linklist.zip">Download</a></li>
</ul>
<h3  class="related_post_title">Ähnliche Beiträge</h3><ul class="related_post"><li><a href="http://www.re-design.de/2007/12/15/ajax-klasse-einfach-gebaut/" title="AJAX-Klasse, einfach gebaut">AJAX-Klasse, einfach gebaut</a></li><li><a href="http://www.re-design.de/2007/12/23/ajax-abressbuch-tutorial-teil-3/" title="AJAX Abressbuch &#8211; Tutorial Teil 3">AJAX Abressbuch &#8211; Tutorial Teil 3</a></li><li><a href="http://www.re-design.de/2007/12/22/ajax-adressbuch-tutorial-teil-2/" title="AJAX Adressbuch &#8211; Tutorial Teil 2">AJAX Adressbuch &#8211; Tutorial Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/19/slideshow-mit-einer-html-seite-teil-2/" title="Slideshow mit einer HTML-Seite Teil 2">Slideshow mit einer HTML-Seite Teil 2</a></li><li><a href="http://www.re-design.de/2007/12/18/slideshow-mit-einer-html-seite-teil-1/" title="Slideshow mit einer HTML-Seite Teil 1">Slideshow mit einer HTML-Seite Teil 1</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.re-design.de/2007/12/12/dynamische-linkliste-bringt-mehr-usability/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

