330 likes | 477 Vues
This guide provides a comprehensive overview of client-side scripting technologies, focusing on JavaScript and jQuery. It explores the Document Object Model (DOM), event handling, and utility functions within jQuery, including practical examples. The piece also covers jQuery UI, integrating advanced components like datepickers and draggable elements. Additionally, it briefly touches on server-side scripting with PHP, highlighting its background, features, and evolution as a major web development language. Ideal for web developers seeking to deepen their understanding of these essential technologies.
E N D
Client side scripting Webtechnologie Lennart Herlaar
Inhoud • JavaScript • Document Object Model • Event model • jQuery
Client side scripting jQuery Webtechnologie Lennart Herlaar
jQuery mechanisme • $ is de basis • Alias voor het jQuery object • Utility functions • $.each is de each methode van het jQuery object • jQuery objecten • $("p") maakt een nieuw jQuery object aan dat refereert aan alle <p> elementen (selector) = jQuery(document).ready(handler); jQuery().ready(handler); jQuery(handler); $(document).ready(handler); $().ready(handler); $(handler); $(document).ready(function(){ // rest van jQuery code }); document.addEventListener("DOMContentLoaded", myFunc, false); window.addEventListener("load", myFunc, false);
jQuery voorbeelden $(function() { $("a").click(function(e){ alert("Hello world"); e.preventDefault(); }); }); $(function() { $("#orderedlist > li").addClass("blue"); }); $("ul.important").children().css("background-color", "red"); $("div.test").add("p.quote").addClass("blue").slideDown("slow"); $("form").submit(function(e) { if ($("input:first").val() == "correct") { $("span").text("Validated...").show(); } else { $("span").text("Not valid!").show().fadeOut(1000); e.preventDefault(); } });
jQuery UI • Uitbreiding op jQuery • High level abstraction • Widgets • Datepicker, progressbar, autocomplete, ... • Effects • Coloranimation, toggleclass, hide (explode, blind), ... • Interactions • Draggable, droppable, selectable, sortable, ... • Merk op: deels ook in HTML5 / CSS3
As simple as that! • Aanvullende JavaScript file • Na jQuery zelf <script type="text/javascript" src="js/jquery-ui"></script> $(function() { $("#sortable").sortable(); $("#sortable").disableSelection(); }); $(function() { $("#datepicker").datepicker(); });
Erzijnmeerwegen… • Vaakkunnen we kiezen • JavaScript • jQuery (UI) • HTML5 / CSS3 • En zelfs: server side scripting! • Afhankelijk van beschikbaarheid (requirements), browser support, kenniswebdeveloper, … • Beweging steeds meerrichting HTML5 / CSS3? • jQueryis zelfeenstandaardaan het worden • Integratie in platformen van Microsoft, Nokia
Server side scripting Webtechnologie Lennart Herlaar
Inhoud • PHP • Meer PHP • En nog meer PHP
Server side scripting revisited • Server side scripts wordenuitgevoerdop de webserver (of application server) • Erbestaanverschillendeintegratiemethoden • CGI, inlining code, webserver integratie • Veelalhet "one resource at a time" paradigma • Het draaien van eenwebapplicatie is eenlange reeks script aanroepen • Veel variatie in server side scripting talen • PHP, Python, Perl, Ruby, ASP.NET, ...
Centraalarchitectuur diagram Form, parameters, … Web Browser + Applicatie Parameters, code Interpreter of compiler Webserver HTML, CSS, JavaScript, JSON, … HTML, JavaScript, JSON, … File access File SQL Result set Files RDBMS
PHP • Ontwikkeld door Rasmus Lerdorf in 1995 • Op basis van een verzameling Perl scripts • Personal (Pretty?) Home Page Tools • Personal Home Page/Forms Interpreter (PHP/FI) • C implementatie, te gebruiken als CGI binary • Verdere ontwikkeling door Zend Technologies • PHP: Hypertext Preprocessor • Inmiddels al bijna 10 jaar op versie 5 • Versie 6 is uitgesteld door met name Unicode issues • Op één na populairste scripting taal op het web
Rol en werking van PHP • Specifiek ontwikkeld voor web development • Van webpage toolset tot general purpose server side scripting voor dynamische database driven websites • Kan ook op de command line gebruikt worden • Perl en C invloeden in syntax en werking • PHP is een filter • Input: stream met tekst / HTML en PHP code • Output: stream met tekst, meestal HTML • PHP code wordt vervangen door z'n uitvoer • PHP vergt installatie op de webserver
PHP: Hypertext Preprocessor <html> <body> <p> <?php echo "HelloWorld"; ?><br/> <?php $d=date("D"); if($d=="Wed" || $d=="Fri") echo "Lecture time!"; ?> </p> </body> </html> <html> <body> <p> HelloWorld<br/> Lecturetime! </p> </body> </html>
PHP als scripting taal • PHP is een scripting taal • Compilatie naar bytecode door een PHP parser • Bytecode uitgevoerd door een PHP engine • Multi-paradigma • Object-georiënteerd • Imperatief • Class based • Zwakgetypeerd, dynamisch Vergelijk dit met JavaScript...
PHP als scripting taal • Goedevoorzieningenvoortekstmanipulatie • Reguliereexpressies • Veel functies in de core language • Veel extensions beschikbaar • Diverse frameworks beschikbaar • Pragmatisch, eenvoudig te leren, it just works • Eén ding is PHP niet... • Elegant
Means of escape • Met <?php en ?> spring je in en uit PHP context • En dus uit en in HTML context... • Afhankelijk van config ook met <? ?> of <% %> • Of zelfs met het <script> element (maar...) • Dunne scheidslijntussen code en content • Steeds in en uit context springen • De code wordtsnelonleesbaar • Ongelimiteerd misbruik mogelijk
Escape to hell <?php if ($expression) { ?> <strong>This is true.</strong> <?php } else { ?> <strong>This is false.</strong> <?php } ?> <h<?php echo "t" ?>ml> <head> <title>Escape to hell</title> </he<?php echo "ad" ?>> <body> Dante’s Inferno. </<?php echo "b" ?>o<?php echo "d" ?>y> </html> // Dubbele slash betekent // commentaar tot einde regel <?php // echo '<?xml ... ?>'; // Huh? ?>
No escape • Een PHP toepassing kan omvangrijk worden • In tegenstelling tot veel JavaScript toepassingen • Scheiding code en content wenselijk • Overzichtelijker, beter onderhoudbaar • Modernereinsteek • Alle HTML gegenereerdvanuit de code • Templates voorvasteonderdelen • MVC frameworks waarbij de HTML paginanietveelmeer is daneenaanroep van een generate functie
Server side scripting Meer PHP Webtechnologie Lennart Herlaar
Yet Another Language • Variabelen met $, anders functie of constante • Variabelen hebben een dynamisch type • Declaratie is niet nodig • De-allocatie is niet nodig • Globale en lokale variabelen • Lokaal tenzijgedeclareerd met global • Met uitzondering van de zogenaamde superglobals • Verdergebruikelijke (function) scoping en shadowing • (Gebruik parameter passing in plaats van global)
Herkenbarezaken? • Gebruikelijketypen • boolean, integer, float, string, array • associative array, float in decimal of scientific notatie • Maar ook: object, resource, null • Gebruikelijkecontrol structures • if else, elseif, while, do while, for, foreach, switch • Gebruikelijke operators • + - * / = += -= ++ -- == != < > <= >= && || if ($page == "home") { generate_homepage(); } elseif ($page == "shop") { generate_shop(); } elseif ($page == "forum") { generate_forum(); } else { generate_notfound(); } switch ($page) { case "home": generate_homepage(); break; case "shop": generate_shop(); break; case "forum": generate_forum(); break; default: generate_notfound(); } if ($page == "home"): generate_homepage(); elseif ($page == "shop"): generate_shop(); elseif ($page == "forum"): generate_forum(); else: generate_notfound(); endif; is_logged_on($user) ? welcome($user) : login();
Herkenbare zaken? • Functies • Call-by-value parameter passing (maar objecten...) • Call-by-reference met & • Variabel aantal parameters en defaults mogelijk • Object-georiënteerd paradigma • Classes, objecten, methods • Case sensitivity, maar niet voor functienamen • Statement termination met ; (verplicht) • Multi-line strings (maar: HTML negeert whitespace) • Commentaar met /* */, // of # function foo($arg_1, &$arg_2, ..., $arg_n = "42") { global $myvar; echo "Example function.\n"; ... return $retval;}
Strings • Strings bestaan / bestonden uit 8-bits karakters • Dubbele of enkele quotes • Interpolatie van strings • Strings in dubbele quotes worden geïnterpoleerd • Strings in enkele quotes worden letterlijk genomen • \n, \t, \", \$, \\ • \', \\ $str = "A single quote is ', right?"; $str = 'A double would be "!'; <p> <?php $user = "Lennart"; echo 'Hello $user'; echo "\n<br/>\n"; echo "Hello $user"; ?> </p> $str = "Single (') and double (\")."; $str = 'Single (\') and double (").';
String functies • . voor concatenatie • strlen, printf, ltrim, trim, rtrim, str_pad • strtolower, strtoupper, ucfirst, ucwords • strcmp, strncmp, strcasecmp, ... (-1, 0, 1) • substr, strpos, strstr, stripos, strrpos, strripos • str_repeat, str_replace, str_ireplace, str_rot13 • strtr, nl2br, strtotime, count_chars, ... • Frustrerende functienamen en inconsistenties $str = "Hello " . $user . '. Welcome back!'; $str = substr("Hello World!", 6, 5); // World $str = substr("Hello World!", -6, -1); // World $pos = strpos("Hello World!", "World"); // 6 $str = strstr("Hello World!", "World"); // World! $ts = strtotime("28 February 2014"); // 1393545600
Arrays • Arrays beelden keys op values af • Values mogen van elk type zijn, door elkaar • Arrays zijn heterogeen • Keys mogen integers of strings zijn • Integer indices kunnen overal beginnen en negatief zijn; alleen de gebruikte keys worden opgeslagen • Arrays kunnen meerdimensionaal zijn • Arrays zijn stiekem associative arrays • Hashes, maps $a = array("Hello World", 24, NULL, "something big"); $b = array(1 => "One", 20 => "Twenty", "a" => "One"); $a[100] = array(1 => "One", 20 => "Twenty", "a" => "One"); // a[4] - a[99] undefined echo ($a[100]["a"]); // Let op de quotes; One $i = 20; echo ($a[100][$i]); // Geen quotes; Twenty $a[] = "My favourite index"; // a[101] unset($a[3]); // Wat ruimte besparen...
Associative arrays • Arrays beelden keys op values af • Ook als de indices integers zijn • Pas op met aannames m.b.t. de volgorde • Veel array functies • in_array, array_search, array_merge, array_reverse, array_flip, array_pop, array_push, array_map, ... $myarray = array(1 => "Dog", "Cat", "Scary" => "Bat"); $myarray2 = array(0, 2 => 5, 3); $myarray[0] = "Rat"; print_r($myarray); foreach ($students as $student) { echo("$student\n"); } foreach ($library as $isbn => $title) { echo "Book with ISBN $isbn has title $title\n"; } // Volgorde? array_keys($myarray); // (1, 2, "Scary", 0) array_values($myarray); // ("Dog", "Cat", "Bat", "Rat") count($myarray); // 4 list($a, , $c) = $myarray2; // $a is 0, $c is 5
Sorteren • Grote hoeveelheid sorteerfuncties • sort(), asort(), arsort(), ksort(), krsort(), rsort(), usort(), uasort(), uksort(), natsort, ... • Sort is de basis; herordening, integer keys • r = reversed, a = value, k = key, u = user defined • a en k laten de associatie intact • nat voor "natuurlijk" sorteren: img2.gif vs. img12.gif $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana"); ksort($fruits); // a => orange, b => banana, d => lemon asort($fruits); // b => banana, d => lemon, a => orange sort($fruits); // 0 => banana, 1 => lemon, 2 => orange
Strings en arrays revisited $name = "Blob"; echo ":$name:"; // :Blob: echo "$nameje"; // lege string echo "{$name}je"; // Blobje echo "\{$name\}"; // \{Blob\} $a[2][3] = $name; echo "De {$a[2][3]}!"; // De Blob! echo "De " . $a[2][3] . "!"; // De Blob! echo "En niet de $a[2][3]!"; // En niet de Array[3]! $words = explode(" ","Jack in the box"); // Array! $str = implode("-", $words); // Jack-in-the-box strtr($posting, array("ROTFLMAO" => "rolling on the floor...", ...)); strtr($posting, "äåö", "aao");
Type juggling en casting • Daar gaan we weer... Vergelijk dit met JavaScript... $myFirstVar = 42; $myFirstVar = 'We are sorry for the inconvenience'; $x = 1 + true; $x = NULL + false; $x = (bool)0; $x = (bool)0.0; $x = (bool)""; $x = (bool)"0"; $x = (bool)"0.0"; $x = ("0" == true); $x = (true == "false"); $x = ("1" == 1); $x = ("1" === 1); var_dump($x); var_export($x); $x = array_search($myval, $myarray); $x = "the answer is " . "42"; $x = 3 . "5"; $x = "the answer is " + "42"; $x = 3 + "5"; $x = 3 * "5"; $x = "this is " + true;