Professional Documents
Culture Documents
Προγραμματισμό του
Παγκόσμιου Ιστού
Ελευθέριος Μωυσιάδης
Ο προγραμματισμός του
Παγκόσμιου Ιστού
Native Development vs. Browser
Based
• HyperText
• Markup
• Relation with instructional programming
Client-Server Communication
page
request
request
HTML, PHP
CSS,
Javascript
Η εξέλιξη της HTML
HTML XHTML
XHTML HTML5
• Σημασιολογικά στοιχεία
• Εξελιγμένες φόρμες
• Εξελιγμένη διαχείριση ήχου και βίντεο
• Καμβάς για ζωγραφική
• Αποθήκευση δεδομένων σε τοπικό
επίπεδο
• Εφαρμογές εκτός σύνδεσης
• Γεωτοποθεσία
Περιβάλλοντα ανάπτυξης
Text Editors
NotePad++
NetBeans
2
3 <html>
4 <head>
5 <title>Hello World</title>
6 <meta charset="UTF-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1.0">
8 </head>
9 <body>
10 <p>Hello World!!!</p>
11 </body>
12 </html>
Αταξινόμητη Λίστα
27 <ol>
28 <li> Αταξινόμητες Λίστες </li>
29 <li> Ταξινομημένες Λίστες </li>
30 <li> Λίστες ορισμών </li>
31 </ol>
Λίστα Ορισμών
<h3> Λίστα Ορισμών </h3>
<dl>
<dt>Unordered list</dt>
<dd>A list where each list element is marked by a bullet</dd>
<dt>Ordered</dt>
<dd>A list where each list element is marked by a number</dd>
<dt>Definition List</dt>
<dd>This is a definition List</dd>
</dl>
Αλλαγή γραμμής και
Υπερσύνδεσμοι
Ενσωματωμένη διαμόρφωση
<style>
h1 { color: fuchsia }
</style>
• Διαμόρφωση που αφορά μόνο στην συγκεκριμμένη ιστοσελίδα
• Το στοιχείο style τοποθετείται στο head
Διαμόρφωση Ετικέτας
Παράδειγμα: Διαμόρφωση
Επικεφαλίδας
1 h1 {
2 color: coral;
3 font-size: xx-large;
4 text-align: center;
5}
Παράδειγμα: Διαμόρφωση
Επικεφαλίδας
h1 {
color: coral;
font-size: xx-large; Ιδιότητα color
text-align: center;
}
Παράδειγμα: Διαμόρφωση
Επικεφαλίδας
h1 {
color: coral;
font-size: xx-large; Ιδιότητα font-size
text-align: center;
}
• Παραδείγματα τιμών:
left, right, justify, κά
padding
1p{
2 text-align: justify;
3 padding-left: 10px;
4 padding-right: 10px;
5 }
Μηχανισμοί επιλογής
.c {
<body>
<div class="c" id="myId" style="color: red;"> color:green;
Περιεχόμενο }
</div>
</body>
#myId {
color:blue;
}
div {
color:yellow;
}
Αλληλεπικάλυψη Διαμόρφωσης
Cascading
Διαμόρφωση ετικέτας
Ενσωματωμένη διαμόρφωση
Εξωτερική διαμόρφωση
Διαμόρφωση φυλλομετρητή
Κληρονομικότητα
Inheritance
• H διαμόρφωση κληρονομείται απο ένα στοιχείο
στα περιεχόμενα στοιχεία του.
• Η κληρονομούμενη διαμόρφωση υπερισχύει
μόνον της διαμόρφωσης φυλλομετρητή.
• Δεν κληρονομούνται όλοι οι ορισμοί
διαμόρφωσης
Table of Contents
Κεφάλαιο 1 Εισαγωγή ............................................................................... 2
1.1 Ανάπτυξη στον Παγκόσμιο Ιστό ......................................................................................... 2
1.2 Δομή και Διαμόρφωση ............................................................................................................ 3
1.3 Προγραμματισμός στον πελάτη .......................................................................................... 4
1.4 Προγραμματισμός στον εξυπηρετητή .............................................................................. 4
1.5 HTML5............................................................................................................................................ 5
Βιβλιογραφία .......................................................................................... 19
1
Κεφάλαιο 1 Εισαγωγή
Για την ανάπτυξη εφαρμογών σε περιβάλλοντα κινητών συσκευών
(τηλεφώνων, ταμπλετών, κά) διατίθενται δύο βασικές προσεγγίσεις. Η πρώτη
προσέγγιση είναι η ανάπτυξη εφαρμογών με εργαλεία που εξειδικεύονται για το
συγκεκριμμένο περιβάλλον (native code), π.χ. java για android, c objective για ios, c#
για Microsoft phone, κοκ. Η προσέγγιση αυτή δίνει την δυνατότητα για
ολοκληρωτικό έλεγχο της κινητής συσκευής. Έχει όμως και ως βασικό μειονέκτημα
την απαίτηση για ξεχωριστή ανάπτυξη σε κάθε περιβάλλον. Η δεύτερη προσέγγιση
είναι η ανάπτυξη εφαρμογών που βασίζονται σε φυλλομετρητή (browser based
applications). Η προσέγγιση αυτή έχει το προφανές πλεονέκτημα ότι οι εφαρμογές
τρέχουν σε κάθε περιβάλλον που τρέχει φυλλομετρητής. Ειδικά, με την εξέλιξη της
HTML που μας δίνει πλέον δυνατότητες που σχετίζονται άμεσα με την συσκευή, π.χ.
διάβασμα τιμών GPS, οι εφαρμογές που βασίζονται σε φυλλομετρητές γίνονται
ολοένα και πιο δημοφιλείς.
Ο σκοπός αυτής της ενότητας είναι η εισαγωγή στην HTML και τα CSS που
αποτελεί προαπαιτούμενο για την μελέτη της τεχνολογίας ανάπτυξης εφαρμογών
βασιζόμενων σε φυλλομετρητή.
2
δυνατότητα να σημειώνουμε πως αυτό το τμήμα του περιεχομένου είναι π.χ.
επικεφαλίδα, ένα άλλο τμήμα μπορεί να είναι λίστα, κοκ. Παράλληλα, με τους
υπερσυνδέσμους μας δίνεται η δυνατότητα να μεταπηδούμε απο ένα σημείο του
περιεχομένου σε ένα άλλο του ίδιου ή άλλου περιεχομένου που βρίσκεται στον ίδιο ή
άλλον υπολογιστή. Στην εικόνα 1 παρουσιάζεται η λειτουργία των υπερσυνδέσμων
που βασίζεται στο μοντέλο πελάτη – εξυπηρετητή (client-server architecture). Πιο
συγκεκριμένα, όταν ο χρήστης ενεργοποιεί έναν υπερσύνδεσμο, στέλνει στην πράξη
μια αίτηση (http request) με την οποία ζητά μια ιστοσελίδα απο κάποιoν εξυπηρετητή
του ΠΙ (web server). Η αίτηση περιλαμβάνει την διεύθυνση της ζητούμενης σελίδας η
οποία με την σειρά της περιλαμβάνει την διεύθυνση του server στον οποίο βρίσκεται
η σελίδα. Με αυτά τα στοιχεία δρομολογείται η αίτηση στον προορισμό της, δηλ.
στον κατάλληλο web server ο οποίος αποκρίνεται αποστέλλοντας την σελίδα στον
πελάτη.
Html page
http request
web server
3
οδηγίες του τύπου, αυτό το περιεχόμενο να είναι μεγενθυμένο, εκείνο το κείμενο να
είναι χρώματος μπλέ, κά. Ωστόσο, έχει επικρατήσει η λειτουργικότητα μιας
ιστοσελίδας να διαχωρίζεται απο την διαμόρφωσή του. Γενικότερα, έχει επικρατήσει
η λειτουργικότητα ενός λογισμικού να διαχωρίζεται απο την διεπαφή χρήστη (user
interface) του λογισμικού. Υπάρχουν πολλοί ικανοί λόγοι για μια τέτοια διευθέτηση.
Έτσι, για παράδειγμα, οι οδηγίες διαμόρφωσης ενός ιστοχώρου που αποτελείται απο
μερικές εκατοντάδες σελίδες, καταλαμβάνουν λίγες σελίδες και η αλλαγή στην
διαμόρφωση δεν απαιτεί επεξεργασία όλων των σελίδων παρά μόνον αυτών των
λίγων που αφορούν στην διαμόρφωση.
Παλιότερα οι οδηγίες διαμόρφωσης διατυπωνόταν σε html και ήταν
ανακατεμένες με οδηγίες δομής. Σήμερα ωστόσο η πρακτική αυτή έχει
αντικατασταθεί απο τον διαχωρισμό δομής-διαμόρφωσης. Για δε την διαμόρφωση
έχει αναπτυχθεί μια ειδική γλώσσα γνωστή κυρίως με το ακρωνύμιο CSS (Cascading
Style Sheets).
4
απαιτείται κώδικας που εκτελείται στην πλευρά του εξυπηρετητή. Και εδω έχουν
προταθεί αρκετές γλώσσες προγραμματισμού με πρωταγωνίστρια την PHP
1.5 HTML5
Με την βασική τεχνολογία που περιγράφεται παραπάνω, το περιβάλλον
ανάπτυξης του ΠΙ γίνεται πολύ ισχυρό και μπορεί να υποστηρίξει την ανάπτυξη
ποικίλης λειτουργικότητας. Ας σημειωθεί πως εκτός απο ιστοχώρους, υποστηρίζεται
και η ανάπτυξη εφαρμογών εκτός σύνδεσης (offline applications). Οι εφαρμογές
αυτές έχουν το πλεονέκτημα πως εκτελούνται από φυλλομετρητή και επομένως είναι
διαπλατφορμικές (platform-intepented). Το χαρακτηριστικό αυτό αποκτά ιδιαίτερη
σημασία, ειδικά σήμερα με την ανάπτυξη των κινητών και την συνακόλουθη αύξηση
των λειτουργικών στα οποία επιθυμούμε να εκτελούνται οι εφαρμογές μας.
Οι πολλές δυνατότητες του περιβάλλοντος ανάπτυξης συνετέλεσαν και στην
περαιτέρω αύξηση των αναγκών. Σε αυτό το πλαίσιο η εξέλιξη του περιβάλλοντος
ανάπτυξης είναι απολύτως αναμενόμενη. Έτσι, το 1998, η κοινοπραξία του ΠΙ
(WWW Consortium ή απλώς W3C), αποφάσισε να σταματήσει την ανάπτυξη της
HTML και να την αντικαταστήσει με ένα άλλο αυστηρότερο πρότυπο, την XHTML
(Extended HTML). Η XHTML σε σχέση με την HTML παρουσιάζει αυστηρότερο
συντακτικό. Ωστόσο, οι φυλλομετρητές, κυρίως για λόγους συμβατότητας με τις
υφιστάμενες σελίδες συνέχισαν να υποστηρίζουν την παλιότερη HTML. Αυτό είχε ως
αποτέλεσμα, οι web developers να συνεχίσουν να χρησιμοποιούν την HTML γεγονός
που συνέβαλλε στην αποτυχία της XTHML και στην εκ νέου υιοθέτηση της HTML
με την μορφή της HTML5. Αναλυτική ιστορική αναδρομή για την εξελικτική πορεία
της HTML παρουσιάζεται στο [2].
Ας σημειωθεί πως η HTML5 είναι επέκταση της παλιότερης HTML και όχι
ένα διαφορετικό πρότυπο. Στην πράξη η HTML, κατ’αναλογία προς τις φυσικές
γλώσσες, χαρακτηρίζεται ως μια ζωντανή γλώσσα, δηλ. μια γλώσσα που συνεχώς
εξελίσσεται.
Tα σημαντικότερα νέα στοιχεία που υποστηρίζονται απο την HTML5 είναι:
Σημασιολογικά στοιχεία
Εξελιγμένες φόρμες
Εξελιγμένη διαχείριση ήχου και βίντεο
Καμβάς για ζωγραφική
Αποθήκευση δεδομένων σε τοπικό επίπεδο
5
Εφαρμογές εκτός σύνδεσης
Γεωτοποθεσία
Στην συνέχεια, γίνεται εισαγωγή στις HTML και CSS που αποτελεί αναγκαία
προυπόθεση για να προχωρήσουμε στην μελέτη των νέων στοιχείων της HTML5.
Εδώ επισημαίνουμε στον browser πως το περιεχόμενο που είναι το Hello World
συνιστά μια παράγραφο. Οι ετικέτες είναι οι <p> και </p>, η πρώτη ονομάζεται
ετικέτα αρχής (start tag) και η δεύτερη ετικέτα τέλους (end tag). Πολλά στοιχεία
απαιτούν ετικέτα αρχής και τέλους ενω άλλα μόνον μια ετικέτα. Τα πρώτα
ονομάζονται περιέκτες (container elements) και τα δεύτερα αυθύπαρκτα (standalone
elements). Ενα παράδειγμα αυθύπαρκτου στοιχείου είναι η οδηγία για αλλαγή
γραμμής με ετικέτα <br/>. Προσέξτε πως η ετικέτα <br/> περιλαμβάνει τον
χαρακτήρα / ως μια ένδειξη ότι πρόκειται για standalone στοιχείο.
6
απο όλους τους φυλλομετρητές. Ωστόσο, στα αρχεία html συνηθίζουμε να δίνουμε
την ακόλουθη ελάχιστη δομή :
1 <!DOCTYPE html>
2
3 <html>
4 <head>
5 <title>Hello World</title>
6 <meta charset="UTF-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1.0">
8 </head>
9 <body>
10 <p>Hello World!!!</p>
11 </body>
12 </html>
Κώδικας 1: Βασική html σελίδα
7
φυλλομετρητές, μηχανές αναζήτησης ή άλλες υπηρεσίες του ΠΙ. Τα αυθύπαρκτα
meta μεταφέρουν πληροφορίες στις ιδιότητές τους. Γενικότερα, ένα html στοιχείο
μπορεί να έχει ιδιότητες (attributes) οπότε το συντακτικό του αποκτά την εξής μορφή
<tagName atr1=”value1” atr2=”value2” …>. Περισσότερα για τα meta στοιχεία θα
πούμε αργότερα σε αυτές τις σημειώσεις, ωστόσο είναι σημαντικό να γνωρίζετε πως
θα πρέπει να φροντίζετε η κωδικοποίηση της σελίδας σας να είναι UTF-8. Αυτό θα
γίνει αυτόματα σε μερικούς editors αλλά όχι σε όλους. Ο τίτλος και τα meta
μπαίνουν πάντα στο head στοιχείο.
Στην συνέχεια, στο στοιχείο <body> περιλαμβάνεται όλο το περιεχόμενο της σελίδας.
8
1 <!DOCTYPE html>
2
3 <html>
4 <head>
5 <title>TODO supply a title</title>
6 <meta charset="UTF-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1.0">
8 </head>
9 <body>
10 <h1> Απλά HTML στοιχεία </h1>
11 <p> Στην ενότητα αυτή παρουσιάζουμε ορισμένα βασικά στοιχεία της HTML. Πιο συγκεκριμμένα
παρουσιάζονται τα στοιχεία για να φτιάχνουμε επικεφαλίδες,
12 παραγράφους, λίστες, να τραβάμε οριζόντιες γραμμές και να τοποθετούμαι εικόνες </p>
13 <h2> Επικεφαλίδες </h2>
14 <p> Υπάρχουν επικεφαλίδες 6 επιπέδων: <h1>,<h2>, <h3>, <h4>, <h5>,<h6>
</p>
15 <h2>Horizontal line</h2>
16 <p> Αν θέλετε μια οριζόντια γραμμή για να διαχωρίσετε το περιεχόμενο δεν έχετε παρά να
χρησιμοποιήσετε την <hr>, π.χ. </p>
17 <hr/>
18 <h2> Λίστες </h2>
19 <p> Ιδιαίτερο ενδιαφέρον παρουσιάζουν οι Λίστες. Υπάρχουν λίστες ταξινομημένες, αταξινόμητες και
λίστες ορισμών για την κατασκευή λεξικών </p>
20 <h3> Αταξινόμητη Λίστα </h3>
21 <ul>
22 <li> Αταξινόμητες Λίστες </li>
23 <li> Ταξινομημένες Λίστες </li>
24 <li> Λίστες ορισμών </li>
25 </ul>
26 <h3> Ταξινομημένη Λίστα </h3>
27 <ol>
28 <li> Αταξινόμητες Λίστες </li>
29 <li> Ταξινομημένες Λίστες </li>
30 <li> Λίστες ορισμών </li>
31 </ol>
32 <h3> Λίστα Ορισμών </h3>
33 <dl>
34 <dt>Unordered list</dt>
35 <dd>A list where each list element is marked by a bullet</dd>
36 <dt>Ordered</dt>
37 <dd>A list where each list element is marked by a number</dd>
38 <dt>Definition List</dt>
39 <dd>This is a definition List</dd>
40 </dl>
41 <p> To <br> <br/> αλλάζει γραμμή </p>
42 <h3> Υπερσύνδεσμοι </h3>
43 <p> Ιδιαίτερο ενδιαφέρον έχουν οι <a href="hyperlinks.html" > υπερσύνδεσμοι </a></p>
44
45 </body>
46 </html>
Κώδικας 2: Βασικά html στοιχεία
9
ετικέτας. Τι συμβαίνει όμως αν θέλουμε απλως να εμφανίσουμε τον χαρακτήρα
αυτόν χωρίς η ύπαρξή του να σηματοδοτεί την αρχή μιας ετικέτας; Στην περίπτωση
αυτή θα πρέπει να χρησιμοποιήσουμε τους ειδικούς χαρακτήρες της html (html
character entities). Στους ειδικούς χαρακτήρες μπορούμε να αναφερθούμε με τον
χαρακτήρα ‘&’ ακολουθούμενο απο τον κωδικό του ειδικού χαρακτήρα που μας
ενδιαφέρει. Ετσι ‘<’ σημαίνει ‘<’ (lt απο less than). Πλήρη λίστα των ειδικών
χαρακτήρων μπορείτε να βρείτε στo [6] ενω περισσότερα για το ίδιο θέμα στο [7].
Επίσης, οι ειδικοί χαρακτήρες είναι χρήσιμοι για τις περιπτώσεις που θέλουμε να
εμφανίσουμε κάποιο χαρακτήρα που δεν υπάρχει στο πληκτρολόγιο.
Στην συνέχεια του κώδικα 2, στην γραμμή 21, αναπτύσσεται μια αταξινόμητη
λίστα με το στοιχείο <ul> (unordered list) και τα στοιχεία <li> (list item). Απο την
γραμμή 27 έως 31 αναπτύσσεται μια αριθμημένη λίστα με τα στοιχεία <ol> (ordered
list) και τα <li>. Απο την γραμμή 33 έως 40 αναπτύσσεται μια λίστα ορισμών με το
στοιχείο <df> (definition list) και τα στοιχεία <dt> (dictionary term) και <dd>
(dictionary definition).
Στην συνέχεια στην γραμμή 41 γίνεται επίδειξη του αυθύπαρκτου στοιχείου
<br/> με το οποίο αλλάζουμε γραμμή.
Στην γραμμή 43 αναπτύσσεται ένας υπερσύνδεσμος με το <a> (anchor
element). Όπως φαίνεται στον κώδικα 2, το στοιχείο αυτό διαθέτει μιαν ιδιότητα, την
href με την οποία ορίζεται ο προορισμός του υπερσυνδέσμου. Το περιεχόμενο του
στοιχείου είναι αυτό που εμφανίζεται στον χρήστη ως υπερσύνδεσμος. Στο
παράδειγμά μας ακολουθώντας τον υπερσύνδεσμο μεταβαίνουμε στην σελίδα
“hyperlinks.html”. Ο κώδικας της “hyperlinks.html” παρουσιάζεται παρακάτω στον
κώδικα 3.
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>TODO supply a title</title>
5 <meta charset="UTF-8">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 </head>
8 <body>
9 <h1> Σελίδα Υπερσυνδέσμων </h1>
10 <a href="index.html"> Back </a>
11 <hr>
12 <h2> Εκόνες </h2>
13 <a href="index.html">
14 <img alt="backarrow" src="backArrow.jpeg"/>
15 </a>
16 </body>
17 </html>
Κώδικας 3: Υπερσύνδεσμοι και Εικόνες
10
Στον κώδικα 3, βλέπουμε καταρχάς έναν υπερσύνδεσμο στο περιεχόμενο
“Back” με href το index.html. Αυτός ο υπερσύνδεσμος έχει σαν αποτέλεσμα να
επιστρέφουμε στην προηγούμενη σελίδα. Στην γραμμή 14 βλέπουμε το στοιχείο img.
Πρόκειται για εμφάνιση εικόνας. Η εικόνα που θέλουμε να εμφανιστεί βρίσκεται
όπου λέει η ιδιότητα src. Σε περίπτωση που η εικόνα βρίσκεται στον ίδιο φάκελο με
την html σελίδα, αρκεί μόνο το όνομα της εικόνας αλλιώς χρειάζεται το σχετικό path
της εικόνας και αν αυτή βρίσκεται σε άλλον υπολογιστή το URL της. Αυτό ισχύει και
για την ιδιότητα href του <a> στοιχείου. Η ιδιότητα alt (alternative) του img παρέχει
εναλλακτική πληροφορία για την εικόνα. Η ιδιότητα alt είναι πολύ σημαντική και δεν
θα πρέπει να παραλείπετε. Αξιοποιείται απο screen readers που χρησιμοποιούνται
απο άτομα με προβλήματα όρασης αλλά η σπουδαιότερη χρήση της είναι η
αξιοποίησή της απο τις μηχανές αναζήτησης.
Επιπλέον, προσέξτε πως η εικόνα αποτελεί περιεχόμενο σε ένα <a> στοιχείο.
Με αυτόν τον τρόπο η εικόνα γίνεται υπερσύνδεσμος.
11
πληροφορίες διαμόρφωσης. Ενα παράδειγμα στοιχείου <link> δίνεται
ακολούθως:
<link rel="stylesheet" href="basicHtml.css" type="text/css" />
Το στοιχείο <link> μπαίνει στο <head> ενός HTML εγγράφου. Με αυτόν τον
τρόπο είναι δυνατόν να διαμορφωθεί ένα σύνολο απο σελίδες, π.χ. ένας
ιστοχώρος, με την χρήση ενός αρχείου διαμόρφωσης. Συνεπώς, η
διαμόρφωση ενός ολόκληρου συνόλου ιστοσελίδων μπορεί να μεταβληθεί
σαν αποτέλεσμα της επεξεργασίας ενός μόνο αρχείου διαμόρφωσης.
2. Eνσωματωμμένο φύλλο διαμόρφωσης. Ενα φύλλο διαμόρφωσης μπορεί να
συμπεριληφθεί εξολοκλήρου σε μια ιστοσελίδα. Αυτή η μέθοδος
χρησιμοποιείται στην περίπτωση που η ιστοσελίδα διαμορφώνεται με έναν
μοναδικό τρόπο. Αποτελεί κακή πρακτική να επιδιώκουμε παρόμοια
διαμόρφωση ενός συνόλου απο σελίδες αντιγράφοντας το ενσωματτωμένο
στυλ απο την μια σελίδα στην άλλη. Στην περίπτωση αυτή αλλαγή στην
διαμόρφωση απαιτεί επεξεργασία του συνόλου των σελίδων. Μια σελίδα
μπορεί να διαθέτει τόσο εξωτερικό όσο και ενσωματτωμένο φύλλο
διαμόρφωσης. Στην περίπτωση αυτή είναι δυνατόν να προκύπτει σύγκρουση,
δηλ. διαφορετική διαμόρφωση μεταξύ εξωτερικού και ενσωματτωμένου
φύλλου διαμόρφωσης για το ίδιο στοιχείο, π.χ. η επικεφαλίδα επιπέδου 1
ορίζεται στο εξωτερικό φύλλο να είναι με κόκκινα γράμματα και στο
ενσωματτωμένο με μπλε. Στις περιπτώσεις που υπάρχει σύγκρουση
υπερισχύει το ενσωματτωμένο φύλλο διαμόρφωσης. Το ενσωματτωμένο
φύλλο διαμόρφωσης, τοποθετείται μέσα σε ένα container element <style>
</style>. Για παράδειγμα
<style>
h1 { color: fuchsia }
</style>
στο παραπάνω παράδειγμα ο φυλλομετρητής καθοδηγείται να κάνει φούξια,
το χρώμα του φόντου των επικεφαλίδων h1.
3. Διαμόρφωση ετικέτας. Στην περίπτωση αυτή οι οδηγίες διαμόρφωσης σε CSS
αφορούν ένα HTML στοιχείο και τοποθετούνται στην ετικέτα έναρξης του.
Για το σκοπό αυτό αξιοποιείται η ιδιότητα style που έχουν όλα τα html
στοιχεία που προκαλούν έξοδο στην οθόνη. Για παράδειγμα,
<h1 style="color: fuchsia"> Απλά HTML στοιχεία </h1>
12
Σε περίπτωση σύγκρουσης με εξωτερικά ή ενσωματτωμένα φύλλα
διαμόρφωσης, η διαμόρφωση ετικέτας υπερισχύει. Η διαμόρφωση ετικέτας
χρησιμοποιείται κυρίως στις περιπτώσεις που θέλουμε να διαμορφώσουμε
κάποιο στοιχείο κατά τρόπο που να μην είναι δυνατή η μεταβολή της
διαμόρφωσής του απο ενσωματτωμένα ή εξωτερικά κυρίως φύλλα στυλ.
13
χρησιμοποιούμε μια σταθερά. Οι διαθέσιμες σταθερές είναι : medium, xx-small, x-
small, small, large, x-large, xx-large, smaller, larger. Το αρχικό (default) μέγεθος του
φόντου αντιστοιχεί στην σταθερά medium. Επίσης, το μέγεθος φόντου μπορεί να
ορισθεί με μια σειρά από διαθέσιμες μονάδες μέτρησης όπως px (pixels), cm, pt, κ.ά.
[13], π.χ. font-size: 10px; Ας σημειωθεί πως αυτός ο τρόπος διαμορφώνει σταθερό
μέγεθος φόντου που έχει ως αποτέλεσμα να μην προσαρμόζεται το φόντο σε
διαφορετικές αναλύσεις. Αυτό το πρόβλημα λύνεται χρησιμοποιώντας τις σχετικές
μονάδες μεγέθους. Παραδείγματα σχετικών μονάδων είναι η em και το %. Το
αρχικό μέγεθος του φόντου είναι 1 em. Επομένως, αν το μέγεθος φόντου τεθεί ίσο
με 2em αυτό σημαίνει πως θέλουμε φόντο διπλάσιο από το αρχικό. Ας σημειωθεί
πως όπως το αρχικό μέγεθος προσαρμόζεται στην ανάλυση της οθόνης, έτσι
προσαρμόζεται και το διπλάσιο. Με αντίστοιχο τρόπο χρησιμοποιείται και το %, π.χ.
font-size: 200%; σημαίνει φόντο διπλάσιου μεγέθους απο το αρχικό. Ας σημειωθεί
πως το αρχικό φόντο έχει μέγεθος 100%. Περισσότερες πληροφορίες σχετικά με το
μέγεθος του φόντου θα βρείτε στο [14]. Τέλος, στην γραμμή 4, έχουμε τον κώδικα
text-align: center; Το αποτέλεσμα είναι να στοιχηθούν οι επικεφαλίδες επιπέδου 1
στο κέντρο της σελίδας. Αλλες πιθανές τιμές για την στοίχιση του κειμένου είναι οι
left, right, justify, κ.ά. [15].
Στην συνέχεια αναλύουμε την ιδιότητα padding.
1p{
2 text-align: justify;
3 padding-left: 10px;
4 padding-right: 10px;
5 }
Κώδικας 5: Ιδιότητα padding
14
προς το περιεχόμενό της στην μέση μιας γραμμής. Ωστόσο, το επόμενο στοιχείο, ας
υποθέσουμε πως πρόκειται επίσης για παράγραφο, δεν αρχίζει απο την μέση της
γραμμής αλλά σε επόμενη γραμμή. Αυτό επιτυγχάνεται καθώς μπορεί η παράγραφος
ως περιεχόμενο να τερματίζεται στη μέση μιας γραμμής αλλά ως html στοιχείο
καταλαμβάνει τον χώρο έως το τέλος της γραμμής. To padding ορίζει πόσος κενός
χώρος υπάρχει υποχρεωτικά μεταξύ των ορίων του χώρου ενός στοιχείου και του
περιεχομένου του στοιχείου. Στον κώδικα 4, το padding δίνεται σε pixels. To padding
μπορεί επίσης να ορισθεί με %, κ.ά., [16].
1 <body>
2 <div class="c" id="myId" style="color: red;">Περιεχόμενο</div>
3 </body>
Κώδικας 6: Στοιχείο div, ιδιότητες class και id
Το στοιχείο div (division) δεν καθορίζει μια ενότητα μέσα σε ένα html
έγγραφο. Ο κύριος τρόπος χρήσης του είναι η ομαδοποίηση ενός συνόλου στοιχείων
με σκοπό την διαμόρφωσή τους. Στον κώδικα 6, γίνεται χρήση των ιδιοτήτων class
και id. Στην html5, oι ιδιότητες class και id μπορούν να εφαρμοστούν σε οποιοδήποτε
στοιχείο και όχι μόνο στο div. Ο σκοπός των ιδιοτήτων αυτών είναι να
χρησιμοποιηθούν σαν επιλογείς.
1 .c {
2 color:green;
3 }
4
5 #myId {
6 color:blue;
7 }
8
9 div {
10 color:yellow;
15
11 }
Κώδικας 7: css με αξιοποίηση div, class και id
16
<ul>, κλπ. Γενικότερα, ένα στοιχείο περιέκτης μπορεί να περιέχει άλλα στοιχεία
χωρίς περιορισμό στον αριθμό τους. Περιορισμός δεν υπάρχει επίσης στο βάθος, δηλ.
το α στοιχείο μπορεί να περιέχει το β που περιέχει το γ το οποίο περιέχει το δ, κοκ.
Σύμφωνα με την αρχή της κληρονομικότητας της HTML, η διαμόρφωση ενός
στοιχείου κληρονομείται στα περιεχόμενα στοιχεία του. Αυτό ισχύει υπο 2
προυποθέσεις: Δεν υπάρχει επικαλυπτόμενος κανόνας διαμόρφωσης που ορίζεται στο
επίπεδο του περιεχόμενου στοιχείου με οποιονδήποτε απο τους τρόπους που
προαναφέραμε πλην της διαμόρφωσης φυλλομετρητή και η ιδιότητα θα πρέπει να
κληρονομείται. Υπάρχουν ιδιότητες που κληρονομούνται και άλλες που δεν
κληρονομούνται. Πως θα γνωρίζει κανεις αν μια ιδιότητα κληρονομείται η όχι;
Προφανώς, κοιτάζοντας τον ορισμό της ιδιότητας, π.χ. στο w3Schools.
Τέλος, αλληλεπικάλυψη μπορεί να υπάρχει και απο ιδιότητες που
καθορίζονται στο ίδιο επίπεδο. Ενα χαρακτηριστικό παράδειγμα μπορούμε να δούμε
με την βοήθεια του κώδικα 6 και 7. Στον κώδικα 6, το στοιχείο div ανήκει στην
κλάση c και έχει id ίσο με myID. Στο css του κώδικα 7, καθορίζονται τρία
διαφορετικά χρώματα για τις γραμματοσειρές των στοιχείων div, των στοιχείων που
ανήκουν στην κλάση c και του στοιχείου με id ίσο με myId. Επομένως, καθορίζονται
στο ίδιο επίπεδο του εξωτερικού φύλλου διαμόρφωσης, τρία χρώματα
γραμματοσειράς για το ίδιο στοιχείο. Ποιό χρώμα θα επικρατήσει; Γενικά ισχύει πως
επικρατεί το ειδικότερο. Στην προκειμένη περίπτωση ειδικότερο είναι το id καθώς
μόνο ένα στοιχείο έχει αυτό το id, στην συνέχεια το class και τέλος το στοιχείο div.
Με άλλα λόγια, η διαμόρφωση του div αφορά σε όλα τα div του εγγράφου, η
διαμόρφωση class αφορά σε όλα τα στοιχεία που ανήκουν στην συγκεκριμένη κλάση
ενώ η διαμόρφωση με βάση το id αφορά σε ένα συγκεκριμένο στοιχείο. Ας σημειωθεί
ότι στην ίδια κλάση μπορεί να ανήκουν ένα σύνολο απο div αλλά και άλλα στοιχεία.
17
δωρεάν και μπορεί να εντοπιστεί εύκολα με queries του τύπου html tutorial, css
tutorial, κλπ.
4.1 Άσκηση
Κατασκευάστε την προσωπική σας ιστοσελίδα. Φροντίστε να αποτελείται απο
τουλάχιστον 2 σελίδες, και να περιλαμβάνει κατ’ ελάχιστο, την φωτογραφία σας, τις
σπουδές σας σε μορφή λίστας και τα στοιχεία επικοινωνίας σας.
18
Javascript
Εισαγωγή
Τι είναι η Javascript?
Που αξιοποιείται;
Είναι και οι 2
αντικειμενοστραφείς αλλά δεν
έχουν άλλη σχέση
Περιβάλλον ανάπτυξης
Βασικά χαρακτηριστικά
<head>
<script type="text/javascript">
alert('hello world!');
</script>
</head>
<head>
<script type="text/javascript">
document.write('<p>Hello world!</p>');
</script>
</head>
Δήλωση εξωτερικού αρχείου Javascript
Μεταβλητές
sum=0;
name="Lefteris Moussiades";
String concatenation
function f1() {
alert("Hello "+name+'!');
}
var array=[];
a[0]="De";
a[1]="Tr";
a[a.length-1]="Te";
a[a.length]="Pe";
for (i=0; i<a.length; i++) document.writeln(a[i]+"<br/>");
Σχόλια
while (i<a.length)
document.writeln(a[i++]+"<br/>");
do
do {
document.writeln(a[--i]+"<br/>");
} while (i>0);
Η συνάρτηση στην Javascript
document.write("<"+tag+">"+msg+"</"+tag+">");
}
Επιλογείς συγγενών
Descendant (Απογόνων) $('#nΒ a') όλα τα anchor στοιχεία που
ορίζονται μέσα στο στοιχείο με id nB
Άμεσων Απογόνων $('#nΒ > a') τα anchor στοιχεία που ορίζονται
ως άμεσοι απόγονοι του στοιχείου με id
nB
Adjacent sibling (Διαδοχικού αδερφού) $('h2 + div') τα στοιχεία div που ακολουθούν
στοιχεία h2
Επιλογείς ιδιοτήτων
Attribute $('img[alt]') τα στοιχεία img που έχουν set την ιδιότητα alt
$('img[alt=”lion”]') Τα στοιχεία img που έχουν την σειρά lion ως τιμή της
ιδιότητας alt
$('a[href^="http"]') τα anchor στοιχεία η διεύθυνση των οποίων αρχίζει
από "http"
$('a[href$=".pdf"]') τα anchor στοιχεία η διεύθυνση των οποίων
τελειώνει σε pdf
$('a[href*="dx"]') τα anchor στοιχεία η διεύθυνση των οποίων περιέχει
την σειρά dx
Φίλτρα (1)
Φίλτρο Περιγραφή Παράδειγμα Επιλέγει
:even, :odd Επιλογή μόνο των $('tr:even') τις άρτιες γραμμές των πινάκων
στοιχείων που
βρίσκονται σε άρτιες ή
περιττές θέσεις μια
επιλογής
$('.dt tr:odd) τις περιττές γραμμές των πινάκων
της κλάσης striped
:first and :last Επιλογή μόνο του $('p:first') την τελευταία παράγραφο
πρώτου ή τελευταίου
στοιχείου
Φίλτρα (2)
:not() Επιλογή των $('a:not(.A)'); τα anchor elements που δεν ανήκουν
στοιχείων που δεν στην κλάση Α
καλύπτονται από
επιλογέα που περνά
παραμετρικά στην not
:has() Επιλέγει τα $('li:has(a)') τα στοιχεία λίστας (list items) που
στοιχεία που περιέχουν anchor elements
περιέχουν άλλα
συγκεκριμένα στοιχεία
:contains() Επιλογή όσων $('a:contains(Click Me!)') Τα στοιχεία anchor που έχουν ως
στοιχείων περιέχουν κείμενο το Click Me!
συγκεκριμένο κείμενο
:hidden $('div:hidden') Τα κρυφά divisions
$(document).ready(function () {
alert($('#inner').html());
});
Αντικατάσταση της html
$(document).ready(function () {
});
Πρόσθεση html
• Πρόσθεση html πριν ή μετά από μια επιλογή, before() και after(),
αντίστοιχα.
Διαχείριση Ιδιοτήτων
• addClass(‘className’)
• removeClass(‘className’)
• toggleClass(‘className’)
• attr(‘attributeName’)
• attr(‘attributeName’,’value’)
• $('. img').attr('alt','portait')
each και this (1)
<body>
<p> Υπάρχουν πολλά και ενδιαφέρονται tutorials για να μάθει κανεις Javascript.
Επίσης, για beginners πολύ καλό είναι το tutorial sto <a href="http://htmldog.com/guides/javascript/"> htmldog </a>.
</p>
<ul id="bib"></ul>
</body>
$(selector).eventHandler(function)
$(document).ready(function)
$("p").click(function(){ code })
Event Object
$(document).click(function (e) {
Η απόσταση σε pixels του δείκτη του ποντικιού από A jQuery object used with the on() function to pass
screenY την κορυφή του παράθυρου της οθόνης data data to an event handling function (page 167).
2 τρόποι
<p> Υπάρχουν πολλά και ενδιαφέρονται tutorials για να μάθει κανεις Javascript.
Επίσης, για beginners πολύ καλό είναι το tutorial sto <a href="http://htmldog.com/guides/javascript/"> htmldog </a>.
To <a href="https://www.codecademy.com/en/tracks/javascript">codeacademy</a> είναι πάντα στα sites που έχουν καλά tutorials.
</p>
</body>
$('#disable').click(function () {
$('a').off('mouseover');
});
}); // end of ready() function
</script>
Η μέθοδος on()
• Απλή σύνδεση γεγονότων με διαχειριστή
• Σύνδεση διαχειριστή με στοιχείο που δημιουργείται μετά την
σύνδεση.
• Σύνδεση πολλαπλών γεγονότων σε ένα στοιχείο
• Σύνδεση με παραμετρικό διαχειριστή. Σε πολλές περιπτώσεις,
χρειάζεται να περάσουμε δεδομένα στον διαχειριστή.
function pageLinks() {
var current = this;
current.t = [];
$("a").each(function () {
var extLink = $(this).attr('href');
current.t.push(extLink);
});
current.l = 0;
}
1
1. Εισαγωγή στην Javascript
Η Javascript είναι η γλώσσα που χρησιμοποιείται για να προσδώσει γενική
λειτουργικότητα στις ιστοσελίδες. Ξεκίνησε το 1995 από την εταιρία Netscape.
Αρχικά ήταν μια γλώσσα με περιορισμένες δυνατότητες. Με το πέρασμα των ετών
όμως εξελίχθηκε πάρα πολύ, κυρίως ωθούμενη από μεγάλες εταιρείες, όπως η
Google, η Yahoo και άλλες που αξιοποίησαν την Javascript για την ανάπτυξη των
ιστοχώρων τους.
Σήμερα η Javascript συνοδευόμενη από διάφορες βιβλιοθήκες (σε Javascript)
αποτελεί την επικρατούσα επιλογή για λειτουργική ανάπτυξη του web. Με αυτήν την
έννοια, η Javascript βρίσκεται παντού, π.χ. σε εφαρμογές για το IPhone ή το Android,
δίνει την δυνατότητα προστιθέμενων scripts σε εφαρμογές όπως το Acrobat, το
Photoshop, κα.
Μερικές φορές, η Javascript συγχέεται με την Java. Οι δύο γλώσσες δεν έχουν
κάποια ιδιαίτερη σχέση μεταξύ τους. Η Javascript δεν λειτουργεί από μόνη της αλλά
κυρίως σε συνδυασμό με την HTML και τα CSS. Έτσι, η HTML οργανώνει τα
δομικά στοιχεία μιας ιστοσελίδας, τα CSS κάνουν τα στοιχεία αυτά να φαίνονται
όμορφα και η Javascript προσδίδει λειτουργικότητα (που περιλαμβάνει και
διαδραστικότητα) στην ιστοσελίδα. Η Javascript είναι αντικειμενοστραφής γλώσσα·
ωστόσο, η εκμάθηση της Javascript απαιτεί καλή κατανόηση της HTML και των
CSS.
H ανάπτυξη εφαρμογών Javascript μπορεί να γίνει με την αξιοποίηση ενός
απλού text editor. Ωστόσο, ιδανικό περιβάλλον αποτελεί το NetBeans. Για την σειρά
αυτών των μαθημάτων, κατεβάστε και εγκαταστήστε την τελευταία έκδοση του
NetBeans.
Η Javascript εκτελείται από τους φυλλομετρητές. Έτσι, έχει επικρατήσει να
θεωρείται interpreter [1]. Κάτι τέτοιο δεν είναι απολύτως σωστό, κυρίως με την
έννοια ότι δεν αποτελεί προδιαγραφή (specification) της γλώσσας. Μάλιστα, η
έκδοση 8 (V8 JavaScript VM used in Chrome) δεν περιλαμβάνει interpreter. Αντίθετα
περιλαμβάνει 2 compilers, έναν “γρήγορο” που παράγει υποβέλτιστο κώδικα και έναν
που παράγει βέλτιστο κώδικα. Η Javascript είναι untyped γλώσσα, δηλ. οι μεταβλητές
της δεν έχουν συγκεκριμένο τύπο που καθορίζεται πριν την χρήση τους και είναι
σταθερός καθόλη την διάρκεια της ζωής τους. Επίσης, η Javascript είναι
αντικειμενοστραφής (Object Oriented). Ωστόσο, παρουσιάζει μια σημαντική διαφορά
2
από το κλασικό μοντέλο αντικειμενοστραφούς προγραμματισμού καθώς η JavaScript
δεν είναι class based αλλά prototype based. Ας σημειωθεί πως C++, Java αλλά και η
μεγάλη πλειοψηφία των OOP γλωσσών είναι class based. Περισσότερα για το
αντικειμενοστραφές μοντέλο της Javascript μπορείτε να βρείτε στο [2].
<head>
<title>TODO supply a title</title>
<script type="text/javascript">
alert('hello world!');
</script>
</head>
<head>
<title>TODO supply a title</title>
<script type="text/javascript">
document.write('<p>Hello world!</p>');
3
</script>
</head>
Κώδικας 2: Γράφοντας δυναμικά στην ιστοσελίδα
1.2 Μεταβλητές
Oι βασικοί τύποι δεδομένων στην Javascript είναι τρεις: Numbers, Strings και
Booleans. Τα Numbers λαμβάνουν ακέραιες και δεκαδικές τιμές, π.χ. 5, 5.6, κά. Τα
Strings είναι αλφαριθμητικές σειρές, π.χ. “Hello World!” ή “He said: \”Hello
World\”” και οι Booleans τιμές είναι οι γνωστές true και false. Προσέξτε, στο
παράδειγμα για τα Strings, στο δεύτερο String όπου θέλουμε το “ (double quote) να
αποτελεί μέρος του String, χρησιμοποιήσαμε τον χαρακτήρα διαφυγής \ (backslash).
Οι μεταβλητές στην Javascript μπορούν να δηλωθούν με την δεσμευμένη λέξη
var. Τα ονόματά τους είναι case sensitive και αποτελούνται από γράμματα (λατινικοί
χαρακτήρες), αριθμούς και τους χαρακτήρες $ και _ (underscore). Ο πρώτος
χαρακτήρας πρέπει πάντα να είναι γράμμα.
4
Κώδικας 4: Δήλωση μεταβλητών
Στην Javascript όσο αφορά τις πράξεις μεταξύ αριθμών ισχύουν τα προφανή.
Επιπλέον, ο τελεστής + χρησιμοποιείται για String concatenation,
function f1() {
var name=prompt("Enter your name");
alert("Hello "+name+'!');
}
Κώδικας 7: Εξωτερικό αρχείο Javascript
<html>
<head>
<title>TODO supply a title</title>
5
<script type="text/javascript" src="foredit.js">
</script>
</head>
<body>
<script type="text/javascript">
f1();
</script>
</body>
</html>
Κώδικας 8: κλήση javascript από εξωτερικό αρχείο
1.4 Πίνακες
Στον κώδικα 9, παρουσιάζονται εναλλακτικοί τρόποι δήλωσης και
δημιουργίας πινάκων.
var array=[];
var a2=['Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat', 'Sun'];
var a2=new Array('Mon', 'Tues', 'Wed');
var a3=[1,2,"tria",4.5, true];
Κώδικας 9: Δήλωση και δημιουργία πίνακα
6
στο τέλος ενός πίνακα μπορεί να χρησιμοποιηθεί η μέθοδος push. Τέλος, με την pop
διαγράφεται ένα στοιχείο από το τέλος ενός πίνακα και με την shift από την αρχή του.
Σημείωση (Σχόλια)
Ας σημειωθεί πως τα σχόλια στην Javascript μπαίνουν με τον ίδιο τρόπο που
μπαίνουν στην C++, δηλ. με // σημειώνονται τα σχόλια μέχρι τέλος γραμμής ενώ
σχόλια που εκτείνονται σε περισσότερες ή σε τμήμα γραμμής εσωκλείονται σε /* */.
do {
document.writeln(a[--i]+"<br/>");
7
} while (i>0);
Στον κώδικα 12, η while επαναλαμβάνεται έως ότου το i φτάσει από 0 που
είναι η αρχική τιμή του στο 3 που είναι το μήκος του πίνακα a. Στην συνέχεια, η do
επαναλαμβάνεται έως ότου η τιμή του i γίνει και πάλι 0. Προσέξτε την χρήση του
προθεματικού τελεστή προσαύξησης (prefix increment operator) και του
μεταθεματικού (suffix increment operator). Όπως φαίνεται από το παράδειγμα, οι 2
τελεστές ορίζονται όπως και στην C++. Ας σημειωθεί πως η έξοδος του κώδικα 12
είναι:
Mon
Tues
Wed
Wed
Tues
Mon
1.7 Συναρτήσεις
Οι συναρτήσεις είναι επίσης απλές στην Javascript.
function print(msg, tag) {
document.write("<"+tag+">"+msg+"</"+tag+">");
}
Κώδικας 13: Συνάρτηση Javascript
Στον κώδικα 13, παρουσιάζεται μια συνάρτηση Javascript. Για τον ορισμό της
χρησιμοποιείται η δεσμευμένη λέξη function ενώ οι παράμετροί της στην λίστα
παραμέτρων είναι χωρίς τύπο. Η συνάρτηση μπορεί να κληθεί με διάφορες
παραμέτρους, π.χ. print("Home Page", "h1") ή print("A paragraph text", "p"), κά.
8
2. Αλληλεπίδραση με την ιστοσελίδα
H jQuery είναι μια βιβλιοθήκη γραμμένη σε Javascript. Η jQuery απλοποιεί
σημαντικά τον φόρτο του προγραμματισμού σε Javascript και η χρήση της έχει
επικρατήσει σε βαθμό που να θεωρείται από πολλούς πως αποτελεί αναπόσπαστο
μέρος της Javascript. Η jQuery παρέχεται χωρίς χρέωση και μπορεί ο καθένας να την
κατεβάσει από το επίσημο site [3] της. Πιο συγκεκριμένα για αυτήν την σειρά των
μαθημάτων κατεβάστε στον υπολογιστή σας την έκδοση compressed, production
jQuery 1.11.3. Ο στόχος της jQuery είναι η απλοποίηση των διαδικασιών
αλληλεπίδρασης με την σελίδα. Έτσι, η jQuery, παρέχει ποικίλες δυνατότητες, όπως
αλλαγή των ιδιοτήτων ενός ή περισσοτέρων html στοιχείων, αξιολόγηση (validation)
της εισόδου από τον χρήστη, πρόσθεση, διαγραφή ή μεταβολή html στοιχείων, κά. Ας
δούμε τώρα έναν εισαγωγικό κώδικα.
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>TODO supply a title</title>
5 <meta charset="UTF-8">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <script src="jquery-1.11.3.min.js">
8 </script>
9 <script>
10 $(document).ready(function() {
11 alert($('div').html());
12 });
13 </script>
14 </head>
15 <body>
16 <div>TODO write content</div>
17 </body>
18 </html>
Κώδικας 14: Εισαγωγικός κώδικας στην jQuery
Στην γραμμή 7 του κώδικα 14, περιλαμβάνουμε την βιβλιοθήκη jQuery. Από
την γραμμή αυτή και μετά μπορούμε να καλούμε τις συναρτήσεις της jQuery, στο
head ή το body του εγγράφου ανάλογα με τις ανάγκες μας. Στην γραμμή 11,
βγάζουμε το μήνυμα $('div').html() με την alert. Τι ακριβώς είναι το μήνυμα αυτό; Ο
κώδικας $('div') είναι ένας επιλογέας (Selector). Θυμηθείτε την έννοια των επιλογέων
στα CSS. Με το όνομα ενός στοιχείου, π.χ. div μπορούμε να επιλέξουμε όλα τα
divisions και να τους εφαρμόσουμε κάποια διαμόρφωση. Αυτήν ακριβώς την έννοια
9
έχουν και εδώ οι επιλογείς. Μας δίνουν την δυνατότητα να επιλέξουμε διάφορα
στοιχεία μιας σελίδας ώστε στην συνέχεια να τα επεξεργαστούμε ποικιλοτρόπως.
Το γενικό συντακτικό των jQuery επιλογέων είναι $('css selector'). Στο
παράδειγμά μας, αφού επιλέξουμε το μοναδικό division της σελίδας ζητάμε την html
του την οποία και τυπώνουμε. Όλος αυτός ο κώδικας είναι τοποθετημένος μέσα σε
$(document).ready(function() { }); Το $(document).ready() έχει ως αποτέλεσμα ο κώδικας
να εκτελεστεί μόνο μόλις η ιστοσελίδα έχει φορτωθεί εξολοκλήρου στον Browser.
Έτσι, το μήνυμα που θα τυπώσει η alert είναι “TODO write content”. Αν βγάλουμε την
$(document).ready(), τότε το μήνυμα που θα τυπωθεί είναι η σειρά “undefined”. Το άλλο
ενδιαφέρον στοιχείο σε αυτόν τον κώδικα είναι η ανώνυμη συνάρτηση που
χρησιμοποιείται. Γενικά, η Javascript, δίνει την δυνατότητα να χρησιμοποιούμε
ανώνυμες συναρτήσεις. Αυτές είναι πολύ χρήσιμες, εκεί όπου χρειάζεται μια
συνάρτηση ως παράμετρος ή οποία συνάρτηση δεν πρόκειται να χρησιμοποιηθεί
αλλού.
10
$('a[href$=".pdf"]') τα anchor στοιχεία η διεύθυνση των οποίων
τελειώνει σε pdf
$('a[href*="dx"]') τα anchor στοιχεία η διεύθυνση των οποίων
περιέχει την σειρά dx
11
έχουν visibility = invisible
1 <!DOCTYPE html>
2
3 <html>
4 <head>
5 <title>TODO supply a title</title>
6 <script type="text/javascript" src="jquery.1.11.2.js">
7 </script>
8 <script>
9 $(document).ready(function () {
10 alert($('#inner').html());
11 });
12 </script>
13
14 </head>
15 <body>
16 <div id="outer">
17 <div id="inner">
12
18 <h2>Content</h2>
19 </div>
20 </div>
21 </body>
22 </html>
Κώδικας 15: Ανάγνωση της html
μετά την γραμμή 10 στον κώδικα 15, τρέξτε τον κώδικα και παρατηρήστε το
αποτέλεσμα. Στον φυλλομετρητή και ενώ τρέχετε τον τροποποιημένο κώδικα 15,
επιλέξτε «Προβολή κώδικα Σελίδας». Παρατηρήστε και πάλι το αποτέλεσμα.
Συγγενής με την append είναι η prepend. Στο παράδειγμά μας, αν η prepend
αντικαταστήσει την append, το αποτέλεσμα θα είναι να προστεθεί ο html κώδικας
(<p> Paragrafos under header 2 </p>) πριν τον κώδικα <h2>Content</h2>.
Αν θέλεις να προσθέσεις html πριν ή μετά από μια επιλογή, χρησιμοποίησε τις
συναρτήσεις before() και after(), αντίστοιχα. Επίσης, μπορεί να χρησιμοποιηθούν οι
συναρτήσεις remove() και replaceWith() για να διαγραφούν ή να αντικατασταθούν
κάποια στοιχεία.
13
φυλλομετρητές που μας δείχνουν τον κώδικα όπως εξελίσσεται. Στον Google Chrome
η δυνατότητα αυτή παρέχεται από τα Developer tools.
14
3 <html>
4 <head>
5 <title>TODO supply a title</title>
6 <meta charset="UTF-8">
7 <script type="text/javascript" src="jquery.1.11.2.js">
8 </script>
9 <script>
10 $(document).ready(function () {
11 $("a").each(function () {
12 var extLink = $(this).attr('href');
13 $('#bib').append('<li>' + extLink + '</li>');
14 });
15 }); // end of ready( ) function
16 </script>
18
19 </head>
20 <body>
21 <p> Υπάρχουν πολλά και ενδιαφέρονται tutorials για να μάθει κανεις Javascript.
22 Το tutorial στο <a href="http://www.w3schools.com/js/">w3Schools</a>.
23 Ένα tutorial για beginners στο <a href="http://www.tutorialspoint.com/javascript/"> tutorialspoint </a>.
24 Επίσης, για beginners πολύ καλό είναι το tutorial sto <a href="http://htmldog.com/guides/javascript/">
htmldog </a>.
25 To <a href="https://www.codecademy.com/en/tracks/javascript">codeacademy</a> είναι πάντα στα
sites που έχουν καλά tutorials.
26 </p>
27 <ul id="bib"></ul>
28 </body>
29 </html>
Στο body έχουμε μια παράγραφο που περιέχει διάφορα links (anchor
elements). Επίσης, έχουμε και μια λίστα (ul) που είναι όμως άδεια, δηλ. δεν διαθέτει
κατάλληλα list items. Καταρχάς, ο κώδικας θα εκτελεστεί αφού φορτωθεί το έγγραφο
(γραμμή 10). Στην συνέχεια, από κάθε link λαμβάνουμε την διεύθυνση (γραμμές 11
και 12) και τέλος, προσθέτουμε την διεύθυνση αυτή ως list item. Βλέπουμε στην
γραμμή 12 πως διαβάζουμε την ιδιότητα href. Ποιανού όμως στοιχείου είναι η
ιδιότητα αυτή; Είναι του στοιχείου που καλεί την each, δηλ. ενός anchor στοιχείου σε
κάθε κλήση. Πως όμως θα προσπελάσουμε το στοιχείο μέσα στην each. Ο μόνος
τρόπος είναι η αξιοποίηση του this.
3. Διαχείριση Γεγονότων
Σε πολλές περιπτώσεις είναι χρήσιμο το πρόγραμμά μας να απαντά σε
διάφορα γεγονότα, όπως για παράδειγμα, το πάτημα ενός πλήκτρου ή η κίνηση του
ποντικιού. Έτσι προκύπτει η έννοια του Γεγονοδηγούμενου Προγραμματισμού (Event
Driven). Στο πλαίσιο αυτό έχουμε την πυροδότηση (event fires), δηλ. την παραγωγή
15
του γεγονότος και την διαχείρισή του (event handling). Η διαχείριση του γεγονότος
γίνεται με την ανάπτυξη κατάλληλης συνάρτησης γνωστής ως διαχειριστή γεγονότος
(event handler).
Έχουμε ήδη χρησιμοποιήσει έναν τέτοιο handler. Πρόκειται για το
$(document).ready(function). Το event ready πυροδοτείται μόλις το html έγγραφο
φορτωθεί ολόκληρο στην μνήμη. Καθώς το γεγονός αυτό αφορά αποκλειστικά το
τρέχων έγγραφο υποστηρίζεται συντακτικό που δεν απαιτεί επιλογή (selection) αλλα
επιτρέπει κατευθείαν την κλήση της συνάρτησης, δηλ. $(function) είναι ισοδύναμο με
$(document).ready(function). Γενικότερα όμως ισχύει το ακόλουθο συντακτικό
$(selector).eventHandler(function), π.χ. $("p").click(function(){ code }); καθορίζει
τον κώδικα που θα τρέξει όταν κάποιος πατήσει το ποντίκι πάνω σε μια παράγραφο.
Άλλα παραδείγματα : $('html').dblclick() όταν έχουμε double click οπουδήποτε σε
ένα html έγγραφο, $('a').mouseover() όταν το ποντίκι περάσει πάνω από ένα anchor
στοιχείο, κλπ.
Σε γενικές γραμμές μπορούμε να χωρίσουμε τα γεγονότα που πυροδοτούνται
από τους φυλλομετρητές ως ακολούθως:
Mouse events: click, dbclick, mousedown, mouseup, mouseover, mouseout,
mousemove.
Document events: load, resize, scroll, unload.
Form Events: submit, reset (πυροδοτείται όταν ενεργοποιείται ένα button
τύπου reset), change, focus (πυροδοτείται όταν εστιάζουμε σε ένα text field), blur
(πυροδοτείται κατά την έξοδο από ένα εστιασμένο πεδίο, το αντίθετο του focus)
Keyboard Events: keypress, keydown, keyup
Πλήρη λίστα με τα events που υποστηρίζει η jQuery μπορείτε να βρείτε στο
[6].
16
του mouseover και η δεύτερη από την πυροδότηση του mouseout. Στον κώδικα 17
δίνεται σχετικό παράδειγμα.
$('#menu').hover(
function () {
$('#submenu').show();
}, // end mouseover
function () {
$('#submenu').hide();
} // end mouseout
); // end hover
17
Στον κώδικα 18, στην ανώνυμη συνάρτηση που περνάμε στον click handler
του εγγράφου, ονομάζουμε μια παράμετρο. Η παράμετρος αυτή είναι το αντικείμενο
event. Στην συνέχεια, στο σώμα της συνάρτησης, παίρνουμε από το e τις
συντεταγμένες στις οποίες συνέβη το click.
18
3.4 Απενεργοποίηση διαχειριστών γεγονότων
Σε κάποιες περιπτώσεις θέλουμε να απενεργοποιήσουμε έναν διαχειριστή
γεγονότος. Στον κώδικα 19 παρουσιάζεται ένα σχετικό παράδειγμα.
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<script type="text/javascript" src="jquery.1.11.2.js">
</script>
<script>
$(document).ready(function () {
$("a").mouseover(function () {
alert('You moved the mouse over me!');
});
$('#disable').click(function () {
$('a').off('mouseover');
});
}); // end of ready() function
</script>
</head>
<body>
<p> Υπάρχουν πολλά και ενδιαφέρονται tutorials για να μάθει κανεις Javascript.
Το tutorial στο <a href="http://www.w3schools.com/js/">w3Schools</a>.
Ένα tutorial για beginners στο <a href="http://www.tutorialspoint.com/javascript/">
tutorialspoint </a>.
Επίσης, για beginners πολύ καλό είναι το tutorial sto <a
href="http://htmldog.com/guides/javascript/"> htmldog </a>.
To <a href="https://www.codecademy.com/en/tracks/javascript">codeacademy</a> είναι πάντα
στα sites που έχουν καλά tutorials.
</p>
Στο body (του κώδικα 19), υπάρχει μια παράγραφος που περιλαμβάνει μια σειρά από
links (anchor elements). Στο head του ιδίου κώδικα γίνεται σύνδεση (binding) ενός
handler για το γεγονός mouseover σε anchor element. Η σύνδεση αυτή αφορά όλα τα
anchor elements. O handler που εγγράφεται είναι μια ανώνυμη συνάρτηση που βγάζει
το μήνυμα 'You moved the mouse over me!'. Επανερχόμαστε πάλι στο body όπου μετά την
παράγραφο με τα links συναντάμε ένα button με id="disable". Στο head γίνεται εγγραφή
άλλης ανώνυμης συνάρτησης στο γεγονός click του στοιχείου με id="disable", δηλ. στο
click του button. Σε αυτήν την συνάρτηση καλείται ο κώδικας $('a').off('mouseover'), η
λειτουργία του οποίου είναι πλέον προφανής. Επομένως, η jQuery μας παρέχει την
συνάρτηση off με την οποία μπορούμε να απενεργοποιήσουμε εγγεγραμμένους
19
διαχειριστές γεγονότων. Ας σημειωθεί ότι σε περίπτωση που θα γίνει refresh η σελίδα
ο handler mouseover θα ενεργοποιηθεί εκ νέου.
20
Εικόνα 1: Εφαρμογή αξιοποίησης της on()
1 3 <html>
4 <head>
5 <title>TODO supply a title</title>
6 <meta charset="UTF-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1.0">
8 <script type="text/javascript" src="jquery.1.11.2.js"> </script>
9
10 <script>
11 function pageLinks() {
12 var current = this;
13 current.t = [];
14 $("a").each(function () {
15 var extLink = $(this).attr('href');
16 current.t.push(extLink);
17 });
18 current.l = 0;
19 }
20
21 $(document).ready(function () {
22 this.tbl = new pageLinks();
23 $('#updbib').on('click', {rF: this}, function upd(evt) {
24 if (evt.data.rF.tbl.l < evt.data.rF.tbl.t.length)
25 $('#bib').append('<li> <a href=\"' + evt.data.rF.tbl.t[evt.data.rF.tbl.l] +
21
26 '\" target=\"_blank\">' + evt.data.rF.tbl.t[evt.data.rF.tbl.l++] + '</a></li>');
27 });
28 $("#bib").on("click", "li", function () {
29 $(this).css('text-decoration', 'line-through');
30 });
31
32 }); // end of ready( ) function
33
34 </script>
35
36 </head>
37 <body>
38 <p> Υπάρχουν πολλά και ενδιαφέρονται tutorials για να μάθει κανεις Javascript.
39 Το tutorial στο <a href="http://www.w3schools.com/js/">w3Schools</a>.
40 Ένα tutorial για beginners στο <a href="http://www.tutorialspoint.com/javascript/">
tutorialspoint </a>.
41 Επίσης, για beginners πολύ καλό είναι το tutorial sto <a href=
"http://htmldog.com/guides/javascript/"> htmldog </a>.
42 To <a href="https://www.codecademy.com/en/tracks/javascript">codeacademy</a> είναι
πάντα στα sites που έχουν καλά tutorials.
43 </p>
44
46 <button id="updbib">Update Link List</button>
47 <ul id="bib"><li> aaa </li></ul>
48 </body>
49 </html>
Κώδικας 20: Εφαρμογές της on()
1
H Javascript είναι μια αντικειμενοστραφής γλώσσα. Ωστόσο, το μοντέλο
που ακολουθεί είναι σημαντικά διαφορετικό από της C++. Πιο συγκεκριμένα, η
Javascript δεν είναι class based αλλά είναι prototype based. Ένα αντικείμενο
παράγεται στην Javascript από μια συνάρτηση (δεν είναι ο μόνος τρόπος). Η
συνάρτηση pageLinks() παράγει ένα αντικείμενο που έχει 2 data members: το t και το
l.
22
πως ο κύριος selector είναι η λίστα και όχι τα li. Ωστόσο, ο επιλογέας li έχει
προστεθεί ως δεύτερη παράμετρος στην on. To πρόβλημα εδώ είναι ότι όταν έχει
φορτωθεί η σελίδα δεν υπάρχουν τα li, επομένως δεν μπορούν να συνδεθούν με τον
διαχειριστή του click. Υπάρχει όμως η λίστα που είναι parent στοιχείο για τα li. Η
λίστα συνδέεται με τον διαχειριστή και στην συνέχεια μεταβιβάζει τον handler στα
child elements που δηλώνονται στην θέση της παραμέτρου childSelector. Πρόκειται
για μια τεχνική γνωστή ως Event Delegation [9].
23
Ειςαγωγι ςτον Προγραμματιςμό
του Παγκόςμιου Ιςτοφ
Η γλϊςςα PHP
Τι είναι θ PHP
• Ανοιχτοφ κϊδικα (ςε αντίκεςθ με ASP,
ColdFusion κλπ)
• Δθμιουργία δυναμικϊν ιςτοςελίδων
• Λειτουργίεσ
– Αποςτολι HTTP κεφαλίδων
– Cookies
– Authentication
– Σφνδεςθ με βάςεισ δεδομζνων
– Συνεργαςία με εξωτερικζσ βιβλιοκικεσ
Ειςαγωγι ςτον Προγραμματιςμό του
2
Παγκόςμιου Ιςτοφ - Χριςτοσ Λυτρίδθσ
Εκτζλεςθ
Σφνταξθ
• Παραγωγι κϊδικα HTML (από αρχεία php)
<html>
<head>
<title>Testing PHP</title></head>
<body>
<?php print "hello there!"; ?>
</body>
</html>
<html>
<head>
<title>Testing PHP</title></head>
<body>
hello there!
</body>
</html>
Ειςαγωγι ςτον Προγραμματιςμό του
4
Παγκόςμιου Ιςτοφ - Χριςτοσ Λυτρίδθσ
Σχόλια
• Μια γραμμι
echo "hello there!"; //sxolio mias grammis
• Πολλαπλζσ γραμμζσ
/*
echo "hello ";
echo "there!";
*/
Μεταβλθτζσ
• Προθγείται το ςφμβολο $
• Δεν δθλϊνεται τφποσ
<html>
<body>
<?php
$var1 = 1;
$var2 = 4;
$sum = $var1 + $var2;
echo "The result of $var1 + $var2 is $sum";
?>
</body>
</html>
Παραδείγματα
<?php
$a = 1.234; if ($action == "show_version") {
$b = 1.2e3; echo "The version is 1.23";
$c = 7E-10; }
?>
<?php
$foo = True;
?> $var = 1; -- this is an integer
$var = 0; -- this is an integer
$var = "1"; -- this is a string.
<?php
$var = "This is a";
This is a test
print "$var test<br>";
$var test
print '$var test';
?>
Ζνωςθ ςυμβολοςειρϊν
• Σφμβολο .
$num = 4;
echo "Three times ".$num. 'is '.3*$num;
This is a test
Αρικμθτικοί τελεςτζσ
Τελεςτήσ Λειτουργία Παράδειγμα
+ Πρόςκεςθ $var + $var2
- Αφαίρεςθ $var - $var2
* Πολλαπλαςιαςμόσ $var * $var2
/ Διαίρεςθ $var/$var2
% Modulus $var%$var2
$num = 4;
echo 3*$num;
<?php
$storedpassword = "mypassword";
$enteredpassword = "mypassword";
if ($storedpassword == $enteredpassword) {
echo "The entered password was correct!";
}else {
echo "The entered password was wrong!";
}
?> Ειςαγωγι ςτον Προγραμματιςμό του
13
Παγκόςμιου Ιςτοφ - Χριςτοσ Λυτρίδθσ
Λογικοί τελεςτζσ
Τελεςτήσ Περιγραφή Παράδειγμα
&& Λογικό ΚΑΙ (AND) $var && $var2
|| Λογικό Ή (OR) $var || $var2
! Λογικό ΌΧΙ (NOT) !$var
<?php
$var1= 3;
$var2= "yes";
if ($var1==3 && $var2== "yes") {
echo "True";
}else {
echo "false";
}
?>
Ειςαγωγι ςτον Προγραμματιςμό του
14
Παγκόςμιου Ιςτοφ - Χριςτοσ Λυτρίδθσ
Δομι if-else-else if
• Δομι ελζγχου
<?php
$x=1;
if ($x == 2) {
echo '$x is equal to 2';
} else if ($x == 1) {
echo '$x is equal to 1';
} else {
echo '$x does not equal 2 or 1';
}
?>
Δομι for
• Δομι επανάλθψθσ
<?php
for($x=1; $x<=10; $x++) {
echo "$x<br>";
}
?>
<?php
$x=1;
while ($x <=10) {
echo "$x<br>";
$x++;
}
?>
Δομι do-while
• Δομι επανάλθψθσ
<?php
$x=11;
do {
echo "$x<br>";
$x++;
} while ($x <=10);
?>
<?php
$array = array("http://www.yahoo.com",
"http://www.bbc.co.uk",
"http://www.google.com",
"http://www.cnn.com/");
?>
Πίνακεσ
• Προβολι ςτοιχείων απλοφ πίνακα
χρθςιμοποιϊντασ τθν δομι επανάλθψθσ for
<?php
$array = array("http://www.yahoo.com",
"http://www.bbc.co.uk",
"http://www.google.com",
"http://www.cnn.com/");
for($i=0;$i<=count($Array);$i++) {
echo "$array[i]<br>";
}
?>
<?php
$array = array("weather" => "http://www.yahoo.com",
"news" => "http://www.bbc.co.uk",
"search" => "http://www.google.com",
"sports" => "http://www.cnn.com/");
?>
Δομι foreach
• Προβολι ςτοιχείων απλοφ πίνακα
χρθςιμοποιϊντασ τθν δομι επανάλθψθσ
foreach
<?php
$array = array("weather" => "http://www.yahoo.com",
"news" => "http://www.bbc.co.uk",
"search" => "http://www.google.com",
"sports" => "http://www.cnn.com/");
foreach($array as $value) {
echo "$value<br>";
}
?>
Ειςαγωγι ςτον Προγραμματιςμό του
22
Παγκόςμιου Ιςτοφ - Χριςτοσ Λυτρίδθσ
Συναρτιςεισ
• Οριςμόσ
<?php <?php
function say_hi() { function say_hi() {
echo "Hi there!"; return "Hi there!";
} }
?> ?>
• Εκτζλεςθ
<?php <?php
say_hi(); $var = say_hi();
?> echo $var;
echo say_hi();
?>
Συναρτιςεισ
• Παράμετροι ςυναρτιςεων
<?php
function say_hi($name, $greeting) {
return "$greeting $name!";
}
• POST
– Υποβάλλει δεδομζνα ςε ςυγκεκριμζνο πόρο
POST /test/demo_form.php HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
test.php
<?php
if (isset($_POST['submit'])) {
echo "Πατήθηκε το κουμπί Υποβολή<br><br>";
echo "Τιμή πεδίου κειμένου: ".$name;
}
?>
Εκτζλεςθ
• Πλθκτρολόγθςθ κειμζνου και πάτθμα
κουμπιοφ υποβολισ
#include
• Ειςαγωγή κώδικα από άλλο αρχείο
<?php
include "text.txt";
?>
<?php
include "text.html";
?>
<?php
include "text.php";
?>
// method declaration
public function displayVar() {
echo $this->var;
}
}
?>
Χρήςη
• Δημιουργία αντικειμζνου
$object = new SimpleClass();
• Πρόςβαςη ςε ιδιότητεσ
$var2 = $object->var;
• Πρόςβαςη ςε μεθόδουσ
echo $object->displayVar();
phpmyadmin
Ειςαγωγή δεδομζνων
Συνάρτηση Περιγραφή
mysql_select_db() Επιλογή βάςησ
mysql_connect() Σφνδεςη ςε βάςη
mysql_close() Κλείςιμο βάςησ
mysql_create_db() Δημιουργία βάςησ
mysql_query() Ερώτημα MySQL
mysql_fetch_array() Επιςτροφή εγγραφών
mysql_fetch_row() Επιςτροφή μιασ εγγραφήσ
mysql_num_rows() Αριθμόσ εγγραφών
2. Σφνδεςη με ΒΔ
$con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD)
3. Ερώτημα MySQL
$result = mysql_query('SELECT * FROM users');
4. Χρήςη αποτελεςμάτων
while ($row = mysql_fetch_array($result)) { }
Ειςαγωγή ςτον Προγραμματιςμό του
11
Παγκόςμιου Ιςτοφ - Χρήςτοσ Λυτρίδησ