﻿<?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>GreekTuts &#187; Pantso</title>
	<atom:link href="http://greektuts.net/author/pantso/feed/" rel="self" type="application/rss+xml" />
	<link>http://greektuts.net</link>
	<description>Ελληνικά Βοηθήματα</description>
	<lastBuildDate>Thu, 22 Jul 2010 19:56:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
  <link>http://greektuts.net</link>
  <url>http://www.greektuts.net/images/favicon4.ico</url>
  <title>GreekTuts</title>
</image>
		<item>
		<title>CSS SuperHero : Βασικές Αρχές</title>
		<link>http://greektuts.net/css-superhero-basic-principles/</link>
		<comments>http://greektuts.net/css-superhero-basic-principles/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 15:54:15 +0000</pubDate>
		<dc:creator>Pantso</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[basic]]></category>
		<category><![CDATA[basic principles]]></category>
		<category><![CDATA[cascading]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[css principles]]></category>
		<category><![CDATA[css superhero]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[hero]]></category>
		<category><![CDATA[id]]></category>
		<category><![CDATA[pantso]]></category>
		<category><![CDATA[paragraph]]></category>
		<category><![CDATA[super]]></category>
		<category><![CDATA[superhero]]></category>
		<category><![CDATA[βασικές αρχές]]></category>
		<category><![CDATA[βασικές αρχές των css]]></category>
		<category><![CDATA[γρηγορόπουλος παναγιώτης]]></category>

		<guid isPermaLink="false">http://greektuts.net/?p=4029</guid>
		<description><![CDATA[Σε αυτό το πρώτο μέρος της σειράς βοηθημάτων, που θα σας μετατρέψει από αρχάριο, σε CSS Super Hero, θα κάνουμε τα πρώτα μας βήματα στον μαγευτικό κόσμο των CSS και θα φτάσουμε να γνωρίζουμε ότι χρειάζεται για να τα χρησιμοιποιήσουμε στις ιστοσελίδες μας αλλά ακόμα και επαγγελματικά.]]></description>
			<content:encoded><![CDATA[<h1>Τι είναι τα CSS;</h1>
<p>CSS σημαίνει Cascading Style Sheets. Και τι σημαίνει αυτό; Ας το πάρουμε από την αρχή.</p>
<p>Η γνωστή σε όλους μας γλώσσα προγραμματισμού ιστοσελίδων και εφαρμογών, η HTML, χρησιμοποιείται για την δημιουργία και την περιγραφή στοιχείων σε μια ιστοσελίδα. Όταν λοιπόν εμείς διαβάζουμε ένα κείμενο, όπως αυτό που διαβάζεται αυτήν την στιγμή, o browser μας, δεν το &#8220;διαβάζει&#8221; όπως και εμείς. Συνήθως τα κείμενα που βρίσκονται σε μια ιστοσελίδα, είναι περιτρυγυρισμέμα σε <strong>paragraph tags</strong>. Τα Tags είναι ο τρόπος που χρησιμοποιείται για να περιγράψουμε αντικείμενα. Έτσι, ότι βρίσκεται ανάμεσα σε tags, παίρνει και τις αντίστοιχες ιδιότητες.</p>
<p>Αν λοιπόν το κείμενο &#8220;<strong>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</strong>&#8221; το γράψουμε <strong>&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&lt;/p&gt;</strong>, αυτό θα πάρει τις ιδιότητες της παραγράφου, ενώ αν το γράψουμε <strong>&lt;b&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&lt;/b&gt;</strong> θα γίνει bold.</p>
<p>Ωραία ως εδώ. Τι γίνεται όμως όταν θέλουμε αυτό το κείμενο να έχει μεγαλύτερο μέγεθος από κάποιο άλλο στοιχείο paragraph στην ιστοσελίδα μας; H ακόμα χειρότερα άμα θέλουμε να έχουμε 8 διαφορετικά είδη παραγράφων και τίτλων; Εδώ έρχονται και συμπληρώνουν τα CSS. Μέσα από τους selectors (επιλογέας) μπορούμε να &#8220;στοχεύσουμε &#8221; στοιχεία στην HTML σελίδα, και να τους δώσουμε στυλ.</p>
<h1>Σύνταξη &#8211; Δομή</h1>
<p>Για να στοχεύσουμε λοιπόν τα διάφορα στοιχεία στην σελίδα μας, πρέπει να γνωρίζουμε την δομή και την σύνταξη μιας CSS εντολής. Ας δούμε καλύτερα σε ένα γράφιμα</p>
<blockquote>
<p style="text-align: center;"><img class="size-full wp-image-4095 aligncenter" src="http://greektuts.net/wp-content/uploads3/2010/07/css-basic-principles1.jpg" alt="" width="571" height="131" /></p>
</blockquote>
<p>Το παραπάνω παράδειγμα, &#8220;στοχεύει&#8221; όλα τα στοιχεία H1 στην ιστοσελίδα μας. H1 είναι ο μεγαλύτερος σε μέγεθος τίτλος σε ένα κείμενο. Αρχίζοντας λοιπόν, σαν selector, χρησιμοποιούμε το όνομα του tag που θέλουμε να αλλάξουμε. Αφήνουμε ένα κενό, και  ανοίγουμε αγκύλες. Ότι περιέχεται μέσα στις αγκύλες είναι η δήλωση μας . Χρησιμοποιόντας την ιδιότητα (property) <strong>color</strong> στοχεύουμε το χρώμα του κειμένου. Αμέσως μετά την ιδιότητα βάζουμε άνω και κάτω τελείες και δίνουμε την τιμή μας. Για να κλείσουμε την πρώτη δήλωση, χρησιμοποιούμε το ελληνικό ερωτηματικό (semicolon). Στην δεύτερη δήλωση, χρησιμοποιούμε την ιδιότητα <strong>font-size</strong>, η οποία αλλάζει το μέγεθος του κειμένου. Βάζουμε άνω και κάτω τελείες και δίνουμε την τιμή που θέλουμε να έχει σε pixels. Κλείνουμε με ελληνικό ερωτηματικό, και με την ανάποδη αγκύλη.</p>
<p>Χρησιμοποιόντας λοιπόν τα CSS μπορούμε να επιλέξουμε όλα τα στοιχεία της ιστοσελίδας μας, και να τους δώσουμε ζωή. Δείτε τον κώδικα ζωντανά μέσω του w3scholls.com χρησιμοποιόντας τον σύνδεσμο που ακολουθεί</p>
<p style="text-align: center;"><a title="Δοκιμάστε τον κώδικα" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_syntax1" target="_blank"><img class="size-full wp-image-4097 aligncenter" src="http://greektuts.net/wp-content/uploads3/2010/07/tryitoutbtn.png" alt="" width="450" height="24" /></a></p>
<h1>Id και Class</h1>
<p>Επειδή τα tags της HTML είναι περιορισμένα, τα CSS μας δίνουν την δυνατότητα να δηλώσουμε τα δικά μας μοναδικά ή μη στοιχεία, και να τους δώσουμε στύλ. Αυτό το κάνουμε χρησιμοποιόντας μέσα στα division tags της HTML (τα γνωστά divs) , ID και CLASS. Πως το κάνουμε αυτό; Ας δούμε ένα γράφιμα.</p>
<blockquote>
<p style="text-align: center;"><img class="size-full wp-image-4102 aligncenter" src="http://greektuts.net/wp-content/uploads3/2010/07/css-basic-principles2.jpg" alt="" width="580" height="600" /></p>
</blockquote>
<p>Στα παραπάνω παραδείγματα, βλέπουμε πως μπορούμε να &#8220;τυλίξουμε&#8221; την παράγραφο μας μέσα σε divs, και να επιλέξουμε ακριβώς αυτό που θέλουμε για να του δώσουμε στύλ. Στην πρώτη περίπτωση μπορεί να θέλουμε να βάλουμε το κείμενο στο κέντρο αλλά να μην θέλουμε το ίδιο για όλα τα &lt;p&gt; tags της σελίδας μας. Έτσι γράφουμε</p>
<pre name="code" class="css">
.test { color: black; text-align:center;}
</pre>
<p>Αυτό θα επιλέξει όλο το div και θα μετακινίσει το κείμενο του στο κέντρο, χωρίς να επιρεάσει άλλα paragraphs στην σελίδα.</p>
<p>Αν θέλουμε να επιλέξουμε την παράγραφο που υπάρχει μέσα στο div, γράφουμε</p>
<pre name="code" class="css">
.test p { color: black; text-align:left;}
</pre>
<p>Γενικότερα, όταν θέλουμε να επιλέξουμε στοιχεία μέσα σε divs, γράφουμε αναλυτικά όλο το &#8220;μονοπάτι&#8221; μέχρι να φτάσουμε σε αυτά. Ας δούμε για παράδειγμα το 3 κώδικα στο γράφιμα παραπάνω. Έχουμε ένα paragraph μέσα σε ένα div μέσα σε ένα id. Για να επιλέξουμε και να δώσουμε στυλ μόνο στην παράγραφο, γράφουμε</p>
<pre name="code" class="css">
#test .test p { color:white; }
</pre>
<p>Παρατηρήστε ότι έχουμε το ίδιο όνομα στο class και στο id μας. Αυτό δεν πειράζει καθόλου. Τα ID και τα Classes είναι διαφορετικά στοιχεία και έτσι επιτρέπεται να έχουν το ίδιο όνομα.</p>
<p><strong>ΠΡΟΣΟΧΗ</strong>: Το σωστό είναι όταν χρησιμοποιούμε ID να μην εμφανίζουμε το ίδιο στοιχείο πάνω από μια φορά στην σελίδα μας. Τα ID δηλώνουν μοναδικά στοιχεία. Το αντίθετο συμβαίνει με τα Classes. Μπουρούμε να έχουμε απεριόριστα αντίγραφα του class μέσα στην σελίδα μας.</p>
<p style="text-align: center;"><a title="Δοκιμάστε τον κώδικα" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_syntax_id" target="_blank"><img class="size-full wp-image-4097 aligncenter" src="http://greektuts.net/wp-content/uploads3/2010/07/tryitoutbtn.png" alt="" width="450" height="24" /></a></p>
<h1>Cascading</h1>
<p>Και τι πάει να πεί Cascading; Είναι αναφορά στο φαινόμενο του καταράχτη, και ουσιαστικά δείχνει την κληρονομικότητα που έχουν τα στοιχεία των CSS. Και πως εφαρμόζεται αυτό;</p>
<p>Στο τρίτο παράδειγμα που γράψαμε παραπάνω, αν γράψουμε</p>
<pre name="code" class="css">
#test .test p { color:white; }
</pre>
<p>θα &#8220;στοχεύσουμε&#8221; την παράγραφο κατευθείαν, και θα της δώσουμε στύλ συγκεκριμένα. Αν όμως δώσουμε στύλ στο ID τι θα συμβεί;</p>
<pre name="code" class="css">
#test { color:white; }
</pre>
<p>Ακριβώς το ίδο. Όλα τα στοιχεία που περιέχονται μέσα στο ID αυτό θα κληρονομίσουν την ιδιότητα να έχουν λευκό χρώμα στα γράμματα.</p>
<p style="text-align: center;"><a title="Δοκιμάστε τον κώδικα" href="http://www.w3schools.com/css/tryit.asp?filename=trycss_syntax_class" target="_blank"><img class="size-full wp-image-4097 aligncenter" src="http://greektuts.net/wp-content/uploads3/2010/07/tryitoutbtn.png" alt="" width="450" height="24" /></a></p>
<h1>Στο επόμενο μέρος&#8230;</h1>
<p>Αφού κάναμε μια εισαγωγή στα CSS, στο επόμενο μέρος θα δούμε πιο αναλυτικά πράγματα που μπορούμε να κάνουμε με τις επιλογές, τα Ids και τα Classes, και θα ξεκινήσουμε να δίνουμε στύλ σε στοιχεία. Μέχρι τότε, περιμένουμε να ακούσουμε τις απόψεις σας και τις πρακτικές σας πάνω σε θέματα χρήσης των CSS.</p>
]]></content:encoded>
			<wfw:commentRss>http://greektuts.net/css-superhero-basic-principles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GreekTuts v3.0</title>
		<link>http://greektuts.net/greektuts-v3-0/</link>
		<comments>http://greektuts.net/greektuts-v3-0/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 07:27:45 +0000</pubDate>
		<dc:creator>Pantso</dc:creator>
				<category><![CDATA[Νέα]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[greek]]></category>
		<category><![CDATA[greektuts]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[tuts]]></category>
		<category><![CDATA[version 3]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[Άρθρα]]></category>
		<category><![CDATA[βοηθήματα]]></category>
		<category><![CDATA[έκδοση 3]]></category>
		<category><![CDATA[ελληνικά βοηθήματα]]></category>
		<category><![CDATA[επανασχεδιασμός]]></category>
		<category><![CDATA[νέα έκδοση]]></category>
		<category><![CDATA[Προγραμματισμός]]></category>
		<category><![CDATA[προσθήκες]]></category>
		<category><![CDATA[τεχνολογία]]></category>

		<guid isPermaLink="false">http://greektuts.net/?p=4030</guid>
		<description><![CDATA[Με τον ερχομό της πολυαναμενόμενης νέας έκδοσης του WordPress, αλλά και μετά από πάνω από 1 χρόνο λειτουργίας, το GreekTuts περνάει στην 3η έκδοση του. Σταδιακά λοιπόν, και μέχρι το τέλος του Ιουλίου όπου και θα πραγματοποιηθεί η αναβάθμιση, σε αυτό εδώ το άρθρο θα παρουσιάζουμε σιγά σιγά τις αλλαγές τόσο σε design όσο και σε λειτουργίες. Μείνετε μαζί μας, σε αυτό το ταξίδι μας...]]></description>
			<content:encoded><![CDATA[<h1>Νέα Χαρακτηριστικά</h1>
<p>Με το πέρας του καιρού, και έχοντας πλέον στις πλάτες μας <a href="http://greektuts.net/1-year-greektuts-birthday/" target="_blank">πάνω από έναν χρόνο</a>, βλέπουμε τις ανάγκες των αναγνωστών μας να αυξάνονται, και πλέον πιο σίγουροι από ποτέ, μπορούμε να έχουμε μια πιο πλήρη άποψη για το τι μας λείπει και τι χρειαζόμαστε, ώστε να είμαστε πάντα στην κορυφή. Εμείς θα σας αποκαλύψουμε κάποια από τα νέα χαρακτηριστικά που θα έχει η τρίτη έκδοση του GreekTuts, αλλά θα σας κρατήσουμε και μερικά για έκπληξη. Μια σύντομη λίστα λοιπόν με τις νέες προσθήκες στο GreekTuts:</p>
<ul>
<li>Redesign &#8211; Πλήρης επανασχεδιασμός του look και της δομής της ιστοσελίδας</li>
<li>Επιστροφή του forum</li>
<li>Επανασχεδιασμός σχολίων, για πιο εύκολη συζήτηση πάνω στα άρθρα</li>
<li>Νέα περιοχή μελών, με άμεση πρόσβαση σε όλα τα αρχεία</li>
<li>Επανασχεδιασμός προσωπικής σελίδας συντακτών</li>
<li>Αλλά και πολλά άλλα&#8230;</li>
</ul>
<h1>Blast to the Past</h1>
<p>Ας θυμηθούμε όμως πώς ήταν το GreekTuts όταν άνοιξε. Ακολουθεί μια φωτογραφία, από το περιοδικό <a href="http://greektuts.net/june-pcmagazine/" target="_blank">PCMagazine</a>, το οποίο μας έχει κάνει την τιμή να αναφερθεί σε εμάς, τόσο στην έντυπη όσο και στην διαδικτυακή μορφή του.</p>
<blockquote>
<p style="text-align: center;"><a href="http://greektuts.net/wp-content/uploads/2009/06/pcmag.png"><img class="aligncenter" title="GreekTuts v1.0" src="http://greektuts.net/wp-content/uploads/2009/06/pcmag.png" alt="GreekTuts v1.0" width="420" height="590" /></a></p>
</blockquote>
<h1>Previews</h1>
<p>Κατά την διάρκεια του Ιουλίου, και μέχρι το τέλος του, θα αποκαλύπτονται εβδομάδα με την εβδομάδα screenshots από την νέα έκδοση του GreekTuts&#8230;</p>
<h2>Κεντρική Σελίδα</h2>
<blockquote>
<p style="text-align: center;"><img class="aligncenter" src="../wp-content/uploads3/2010/07/gtv3preview.jpg" alt="" width="580" height="450" /></p>
</blockquote>
<h2>Άρθρο σε Πλήρη Ανάπτυξη</h2>
<blockquote>
<p style="text-align: center;"><img class="aligncenter" src="../wp-content/uploads3/2010/07/gtv3preview.jpg" alt="" width="580" height="450" /></p>
</blockquote>
<h2>Στατική Σελίδα</h2>
<blockquote>
<p style="text-align: center;"><img class="aligncenter" src="../wp-content/uploads3/2010/07/gtv3preview.jpg" alt="" width="580" height="450" /></p>
</blockquote>
<h2>Σελίδα Επικοινωνίας</h2>
<blockquote>
<p style="text-align: center;"><img class="aligncenter" src="../wp-content/uploads3/2010/07/gtv3preview.jpg" alt="" width="580" height="450" /></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://greektuts.net/greektuts-v3-0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WordPress 3 Ιs Ηere</title>
		<link>http://greektuts.net/wordpress-3-is-here/</link>
		<comments>http://greektuts.net/wordpress-3-is-here/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 07:17:04 +0000</pubDate>
		<dc:creator>Pantso</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[3]]></category>
		<category><![CDATA[perss]]></category>
		<category><![CDATA[word]]></category>
		<category><![CDATA[wordpress 3]]></category>
		<category><![CDATA[κατεβάστε]]></category>
		<category><![CDATA[κατεβάστε το Wordpress]]></category>
		<category><![CDATA[νέα έκδοση]]></category>

		<guid isPermaLink="false">http://greektuts.net/?p=3967</guid>
		<description><![CDATA[Το WordPress 3 είναι πλέον γεγονός, και επιτέλους έχουμε στα χέρια μας την καλύτερη μέχρι σήμερα έκδοση του καλύτερου δωρεάν λογισμικού για την δημιουργία ιστοσελίδων και blogs. Διαβάστε περισσότερα για τα περιεχόμενα της πολυαναμενόμενης τρίτης έκδοσης του WordPress, κατεβάστε την και αρχίστε να δημιουργείτε]]></description>
			<content:encoded><![CDATA[<p>Επιτλέλους η πολυαναμενόμενη τρίτη έκδοση του WordPress είναι εδώ, και έτοιμη να την κατεβάσουμε και να αρχίσουμε να δημιουργούμε</p>
<blockquote>
<p style="text-align: center;"><img class="size-full wp-image-3968 aligncenter" src="http://greektuts.net/wp-content/uploads3/2010/06/wp3.jpg" alt="" width="580" height="450" /></p>
</blockquote>
<p>Διαβάστε περισσότερα για την νέα έκδοση στο άρθρο <a title="WordPress 3" rel="bookmark" href="http://greektuts.net/wordpress-3/" target="_blank">WordPress 3</a> που δημοσιεύτηκε κατά την διάρκεια του <a title="Permanent Link to WordPress 3" rel="bookmark" href="../wordpress-3/">Μήνα WordPress<br />
</a></p>
<p>Πολύ σύντομα το GreekTuts θα &#8220;φορέσει&#8221; την νέα έκδοση, και θα είναι κοντά σας καλύτερο από ποτέ</p>
<p>Κατεβάστε και εσείς την νέα έκδοση WordPress 3 από <a href="http://wordpress.org/latest.zip" target="_blank">εδώ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://greektuts.net/wordpress-3-is-here/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Eiσαγωγή στην PHP Μέρος 4</title>
		<link>http://greektuts.net/php-intro-part4/</link>
		<comments>http://greektuts.net/php-intro-part4/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 07:25:15 +0000</pubDate>
		<dc:creator>Pantso</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[intro]]></category>
		<category><![CDATA[part4]]></category>
		<category><![CDATA[Εισαγωγη στην PHP]]></category>
		<category><![CDATA[Μέρος 4]]></category>
		<category><![CDATA[τέσσερα]]></category>
		<category><![CDATA[τέταρτο]]></category>

		<guid isPermaLink="false">http://greektuts.net/?p=3957</guid>
		<description><![CDATA[Στα προηγούμενα μέρη της εισαγωγής στην PHP είδαμε τις βασικές έννοιες και συναρτήσεις ενώ μιλήσαμε για την δομή και τις μεταβλητές που χρησιμοποιούμε στην PHP. Σε αυτό το 4ο μέρος, θα δούμε τα ψευδώνυμα (Aliases) των στηλών και των πινάκων που μπορούμε να χρησιμοποιήσουμε αλλά και 3 νέες εκφράσεις που χρησιμοποιούνται στην PHP]]></description>
			<content:encoded><![CDATA[<h1>Ψευδώνυμα (Aliases) Στηλών και Πινάκων</h1>
<p>Μερικές φορές είναι βολικό να αναφερόμαστε στις στήλες και στους πίνακες της MySQL με διαφορετικά ονόματα. Θα δούμε ένα παράδειγμα μιας βάσης δεδομένων που χρησιμοποιείται στο σύστημα κρατήσεων online μιας αεροπορικής εταιρείας. Για να παρουσιάσει τις πτήσεις που προσφέρονται από την εταιρεία, η βάση δεδομένων περιέχει τους εξής δύο πίνακες : Flights και Cities.<br />
Η κάθε καταχώρηση στον πίνακα Flights παριστάνει μια πραγματική πτήση ανάμεσα σε δύο πόλεις, την αρχή και τον προορισμό της πτήσης. Προφανώς, οι Origin και Destination θα αποτελούν στήλες του πίνακα Flights, μαζί μ’ άλλες στήλες για πράγματα όπως η ημερομηνία και η ώρα της πτήσης, ο τύπος του αεροσκάφους, ο αριθμός της πτήσης και τα διάφορα ναύλα.<br />
Ο πίνακας Cities περιέχει μια λίστα όλων των πόλεων προς τις οποίες πετάει η εταιρεία. Έτσι, και οι δύο στήλες Origin και Destination στον πίνακα Flights θα πρέπει να περιέχουν κωδικούς (ID&#8217;s) για να αναφέρονται στις καταχωρήσεις του πίνακα Cities. Θα δούμε τώρα μερικά ερωτήματα (queries).<br />
Για να πάρουμε μια λίστα όλων των πτήσεων με τις πόλεις προέλευσής τους :</p>
<pre name="code" class="html">
mysql&gt; SELECT Flights.Number, Cities.Name
-&gt; FROM Flights, Cities
-&gt; WHERE Flights.Origin = Cities.ID;
+--------+-----------+
| Number | Name      |
+--------+-----------+
| CP110  | Montreal  |
| CP226  | Sydney    |

| QF2026 | Melbourne |
...      ...
</pre>
<p>Για να πάρουμε μια λίστα όλων των πτήσεων με τις πόλεις προορισμού τους :</p>
<pre name="code" class="html">
mysql&gt; SELECT Flights.Number, Cities.Name
-&gt; FROM Flights, Cities
-&gt; WHERE Flights.Destination = Cities.ID;
+--------+----------+
| Number | Name     |
+--------+----------+
| CP110  | Sydney   |
| CP226  | Montreal |
| QF2026 | Sydney   |
...      ...
</pre>
<p>Τι μπορούμε να κάνουμε τώρα αν θέλουμε να εμφανίσουμε την προέλευση και τον προορισμό της κάθε πτήσης μ’ ένα μόνο ερώτημα; Ένα ερώτημα που μπορεί να σκεφθούμε να χρησιμοποιήσουμε είναι το εξής :</p>
<pre name="code" class="html">
mysql&gt; SELECT Flights.Number, Cities.Name, Cities.Name
-&gt; FROM Flights, Cities
-&gt; WHERE Flights.Origin = Cities.ID
-&gt; AND Flights.Destination = Cities.ID;
Empty set (0.01 sec)
</pre>
<p>Το παραπάνω ερώτημα δεν δουλεύει επειδή λέμε στην MySQL να ενώσει (join) τους πίνακες Flights και Cities και να εμφανίσει τον αριθμό πτήσης, το όνομα της πόλης και το όνομα της πόλης ξανά όλων των καταχωρήσεων που επιστρέφονται αν ταιριάξουμε το Origin με το City ID και το Destination με το City ID.<br />
Μ’ άλλα λόγια, οι στήλες Origin, Destination και City ID πρέπει να είναι ίσες μεταξύ τους. Αυτό έχει σαν αποτέλεσμα μια λίστα όλων των πτήσεων όπου η προέλευση και ο προορισμός είναι ίδιοι. Δεν θα υπάρχουν λοιπόν καθόλου καταχωρήσεις που να ταιριάζουν με την παραπάνω περιγραφή και έτσι είχαμε το αποτέλεσμα &#8220;Empty set&#8221;.<br />
Αυτό που χρειαζόμαστε είναι ένας τρόπος να μπορούμε να επιστρέψουμε δύο διαφορετικές καταχωρήσεις από τον πίνακα Cities, μια για την προέλευση και μια για τον προορισμό, για κάθε αποτέλεσμα. Αν είχαμε δύο αντίγραφα του πίνακα, ένα με όνομα Origins και ένα με όνομα Destinations, αυτό θα ήταν πολύ εύκολο να γίνει, αλλά γιατί να έχουμε δύο πίνακες που να περιέχουν την ίδια ακριβώς λίστα των πόλεων;<br />
Η λύση είναι να δώσουμε στον πίνακα Cities δύο διαφορετικά προσωρινά ονόματα (ψευδώνυμα, aliases) για τους σκοπούς αυτού του ερωτήματος (query). Αν γράψουμε μετά από το όνομα ενός πίνακα την έκφραση AS Alias στο τμήμα FROM του ερωτήματος SELECT, μπορούμε να του δώσουμε ένα προσωρινό όνομα με το οποίο να αναφερόμαστε σ’ αυτό οπουδήποτε στο ερώτημα. Ακολουθεί το παραπάνω ερώτημα ξανά, αλλά αυτή τη φορά έχουμε δώσει στον πίνακα Cities το ψευδώνυμο (alias) Origins.</p>
<pre name="code" class="html">
mysql&gt; SELECT Flights.Number, Origins.Name
-&gt; FROM Flights, Cities AS Origins
-&gt; WHERE Flights.Origin = Origins.ID;
</pre>
<p>Αναφερόμενοι στον πίνακα Cities δύο φορές, χρησιμοποιώντας δύο διαφορετικά ψευδώνυμα (aliases), μπορούμε να χρησιμοποιήσουμε μια ένωση (join) τριών πινάκων, όπου οι δύο από τους πίνακες θα είναι ουσιαστικά ίδιοι, για να πάρουμε το αποτέλεσμα που θέλουμε :</p>
<pre name="code" class="html">
mysql&gt; SELECT Flights.Number, Origins.Name,
-&gt;        Destinations.Name
-&gt; FROM Flights, Cities AS Origins,
-&gt;      Cities AS Destinations
-&gt; WHERE Flights.Origin = Origins.ID
-&gt; AND Flights.Destination = Destinations.ID;
+--------+-----------+----------+
| Number | Name      | Name     |
+--------+-----------+----------+
| CP110  | Montreal  | Sydney   |
| CP226  | Sydney    | Montreal |
| QF2026 | Melbourne | Sydney   |
...      ...         ...
</pre>
<p>Μπορούμε επίσης να ορίσουμε ψευδώνυμα για τα ονόματα στηλών. Θα μπορούμε να το χρησιμοποιήσουμε αυτό, για παράδειγμα, για να διαχωρίσουμε τις δύο στήλες &#8220;Name&#8221; στον παραπάνω πίνακα αποτελεσμάτων :</p>
<pre name="code" class="html">
mysql&gt; SELECT F.Number, O.Name AS Origin,
-&gt;        D.Name AS Destination
-&gt; FROM Flights AS F, Cities AS O, Cities AS D
-&gt; WHERE F.Origin = O.ID AND F.Destination = D.ID;
+--------+-----------+-------------+
| Number | Origin    | Destination |
+--------+-----------+-------------+
| CP110  | Montreal  | Sydney      |
| CP226  | Sydney    | Montreal    |
| QF2026 | Melbourne | Sydney      |
...      ...         ...
</pre>
<h1>Η Έκφραση GROUP BY</h1>
<p>Στα προηγούμενα, είχαμε δει το παρακάτω query, το οποίο μας εμφανίζει πόσα jokes είναι αποθηκευμένα στον πίνακα Jokes :</p>
<pre name="code" class="html">
mysql&gt; SELECT COUNT(*) FROM Jokes;
+----------+
| COUNT(*) |
+----------+
|        4 |
+----------+
</pre>
<p>Η συνάρτηση COUNT() της MySQL ανήκει σε μια ειδική κατηγορία συναρτήσεων άθροισης (summary functions) ή συναρτήσεων ομαδοποίησης (group-by functions). Σ’ αντίθεση μ’ άλλες συναρτήσεις οι οποίες επηρεάζουν τις καταχωρήσεις στο αποτέλεσμα του ερωτήματος SELECT, οι συναρτήσεις άθροισης ομαδοποιούν μαζί όλα τα αποτελέσματα και επιστρέφουν ένα μόνο αποτέλεσμα.<br />
Στο παραπάνω παράδειγμα, η συνάρτηση COUNT() επιστρέφει τον συνολικό αριθμό των γραμμών του αποτελέσματος.<br />
Ας υποθέσουμε ότι θέλουμε να εμφανίσουμε μια λίστα των συγγραφέων με τον αριθμό των jokes που αντιστοιχεί στον καθένα. Η πρώτη μας σκέψη θα ήταν να πάρουμε μια λίστα των ονομάτων και των ID’s όλων των συγγραφέων και μετά να χρησιμοποιήσουμε τη συνάρτηση COUNT() για να μετρήσουμε τον αριθμό των αποτελεσμάτων όταν κάνουμε SELECT στα jokes με το ID του κάθε συγγραφέα. Ο PHP κώδικας θα είναι ως εξής :</p>
<pre name="code" class="html">
// Μια λίστα όλων των συγγραφέων
$authors = mysql_query( "SELECT Name, ID FROM Authors" );
// Επεξεργασία του κάθε συγγραφέα
while ($author = mysql_fetch_array($authors)) {
$name = $author["Name"];
$id = $author["ID"];
// Μέτρηση των jokes που ανήκουν σ' αυτόν τον συγγραφέα
$result = mysql_query(
"SELECT COUNT(*) AS NumJokes ".
"FROM Jokes WHERE AID=$id" );
$row = mysql_fetch_array($result);
$numjokes = $row["NumJokes"];
// Εμφάνιση του συγγραφέα και του αριθμού των jokes
echo("&lt;P&gt;$name ($numjokes jokes)&lt;/P&gt;");
}
</pre>
<p>Χρησιμοποιήσαμε το AS στο δεύτερο query παραπάνω για να δώσουμε ένα φιλικότερο όνομα (NumJokes) στο αποτέλεσμα της COUNT(*). Η τεχνική αυτή θα δουλέψει αλλά θα χρειασθεί n+1 ξεχωριστά ερωτήματα, όπου n είναι ο αριθμός των συγγραφέων στη βάση δεδομένων. Υπάρχει, όμως, μια λύση σ’ αυτό.<br />
Προσθέτοντας την έκφραση GROUP BY σ’ ένα ερώτημα SELECT, μπορούμε να πούμε στην MySQL να ομαδοποιήσει (group) τα αποτελέσματα του ερωτήματος σε σύνολα που να έχουν την ίδια τιμή στις στήλες που έχουμε καθορίσει. Οι συναρτήσεις άθροισης, όπως είναι η COUNT(), επενεργούν μετά σ’ αυτές τις ομάδες και όχι στο συνολικό αποτέλεσμα.<br />
Το ακόλουθο query, για παράδειγμα, εμφανίζει τον αριθμό των jokes που έχουν αποδοθεί σε κάθε συγγραφέα στη βάση δεδομένων :</p>
<pre name="code" class="html">
mysql&gt; SELECT Authors.Name, COUNT(*) AS NumJokes
-&gt; FROM Jokes, Authors
-&gt; WHERE AID = Authors.ID
-&gt; GROUP BY AID;
+-----------------+----------+
| Name            | NumJokes |
+-----------------+----------+
| Kevin Yank      |        3 |
| Joan Smith      |        1 |
| Ted E. Bear     |        5 |
+-----------------+----------+
</pre>
<p>Ομαδοποιώντας τα αποτελέσματα ως προς το ID του συγγραφέα (AID), παίρνουμε μια ταξινόμηση των αποτελεσμάτων για τον κάθε συγγραφέα. Θα μπορούσαμε να είχαμε χρησιμοποιήσει και την έκφραση GROUP BY Authors.ID και να πάρουμε το ίδιο αποτέλεσμα.</p>
<h1>Η Έκφραση LEFT JOIN</h1>
<p>Μπορούμε να δούμε από τα παραπάνω αποτελέσματα ότι ο Kevin Yank έχει τρία jokes στο όνομά του, ο Joan Smith έχει ένα και ο Ted E. Bear έχει πέντε. Αυτό που δεν δείχνουν αυτά τα αποτελέσματα είναι ότι υπάρχει ένας τέταρτος συγγραφέας, η Amy Mathieson, που δεν έχει κανένα joke στο όνομά της. Εφόσον δεν υπάρχουν καταχωρήσεις στον πίνακα Jokes με AID&#8217;s που να ταιριάζει το δικό της ID, δεν θα υπάρχουν αποτελέσματα που να ικανοποιούν την έκφραση WHERE στο παραπάνω ερώτημα γι’ αυτήν και συνεπώς θα αποκλειστεί από τον πίνακα των αποτελεσμάτων.<br />
Η MySQL παρέχει μια άλλη μέθοδο για την ένωση (joining) πινάκων, δηλ. την εμφάνιση πληροφοριών από πολλούς πίνακες ταυτόχρονα, που απoκαλείται left join, και είναι σχεδιασμένη γι’ αυτήν ακριβώς την κατάσταση. Για να κατανοήσουμε πώς διαφέρουν τα left joins από τα standard joins, πρέπει πρώτα να θυμηθούμε πώς δουλεύουν τα standard joins.<br />
Η MySQL εκτελεί ένα standard join δύο πινάκων εμφανίζοντας όλους τους δυνατούς συνδυασμούς των γραμμών αυτών των πινάκων. Σε μια απλή περίπτωση, ένα standard join δύο πινάκων με δύο γραμμές για τον καθένα θα περιέχει τέσσερις γραμμές. Αφού υπολογισθούν οι γραμμές του αποτελέσματος, η MySQL μετά κοιτάει την έκφραση WHERE για να πάρει οδηγίες για το ποιες γραμμές πρέπει να εμφανισθούν, όπως για παράδειγμα εκείνες που η στήλη AID του πίνακα 1 θα ταιριάζει με τη στήλη ID του πίνακα 2.<br />
Ο λόγος που το παραπάνω δεν ικανοποιεί τους σκοπούς μας είναι ότι θα θέλαμε να συμπεριλάβουμε επίσης και τις γραμμές του πίνακα 1 (Authors) που δεν έχουν κάποιες γραμμές που να ταιριάζουν στον πίνακα 2 (Jokes). Ένα left join κάνει ό,τι ακριβώς χρειαζόμαστε, αναγκάζοντας μια γραμμή να εμφανισθεί στα αποτελέσματα για κάθε γραμμή του πρώτου (αριστερού) πίνακα, ακόμη κι αν δεν βρεθούν καταχωρήσεις που να ταιριάζουν στον δεύτερο (δεξιό) πίνακα. Αυτές οι καταχωρήσεις παίρνουν τιμές NULL γι’ όλες τις στήλες του δεξιού πίνακα.<br />
Για να κάνουμε ένα left join ανάμεσα σε δύο πίνακες στην MySQL, διαχωρίζουμε τα ονόματα των δύο πινάκων στην έκφραση FROM με το LEFT JOIN αντί με κόμμα. Γράφουμε μετά το όνομα του δεύτερου πίνακα με ON &lt;συνθήκη&gt;, όπου η &lt;συνθήκη&gt; καθορίζει τα κριτήρια ταιριάσματος των γραμμών στους δύο πίνακες. Ακολουθεί το αναθεωρημένο ερώτημα για την εμφάνιση των συγγραφέων με τον αριθμό των jokes που τους έχει αποδοθεί :</p>
<pre name="code" class="html">
mysql&gt; SELECT Authors.Name, COUNT(*) AS NumJokes
-&gt; FROM Authors LEFT JOIN Jokes
-&gt; ON AID = Authors.ID
-&gt; GROUP BY AID;
+---------------+----------+
| Name          | NumJokes |
+---------------+----------+
| Amy Mathieson |        1 |
| Kevin Yank    |        3 |
| Joan Smith    |        1 |
| Ted E. Bear   |        5 |
+---------------+----------+
</pre>
<p>Πρέπει να έχουμε υπόψη μας ότι η συνάρτηση COUNT(*) μετράει τον αριθμό των γραμμών που επιστρέφονται για κάθε συγγραφέα. Αν κοιτάξουμε στα μη ομαδοποιημένα αποτελέσματα του LEFT JOIN, θα δούμε τα εξής :</p>
<pre name="code" class="html">
mysql&gt; SELECT Authors.Name, Jokes.ID AS JokeID
-&gt; FROM Authors LEFT JOIN Jokes
-&gt; ON AID = Authors.ID;
+---------------+--------+
| Name          | JokeID |
+---------------+--------+
| Kevin Yank    |      1 |
| Kevin Yank    |      2 |
| Kevin Yank    |      4 |
| Joan Smith    |      3 |
| Ted E. Bear   |      5 |
| Ted E. Bear   |      6 |
| Ted E. Bear   |      7 |
| Ted E. Bear   |      8 |
| Ted E. Bear   |      9 |
| Amy Mathieson |   NULL |
+---------------+--------+
</pre>
<p>Τώρα η Amy Mathieson έχει μια γραμμή με τιμή NULL. Το ότι η τιμή του Joke ID είναι NULL δεν επηρεάζει την συνάρτηση COUNT(*) αυτή το μετράει σαν μια γραμμή. Αν αντί για το *, προσδιορίσουμε το όνομα μιας στήλης, όπως Jokes.ID, θα αγνοήσει τις τιμές NULL αυτής της στήλης και θα μας δώσει το αποτέλεσμα που ψάχνουμε :</p>
<pre name="code" class="html">
mysql&gt; SELECT Authors.Name, COUNT(Jokes.ID) AS NumJokes
-&gt; FROM Authors LEFT JOIN Jokes
-&gt; ON AID = Authors.ID
-&gt; GROUP BY AID;
+---------------+----------+
| Name          | NumJokes |
+---------------+----------+
| Amy Mathieson |        0 |
| Kevin Yank    |        3 |
| Joan Smith    |        1 |
| Ted E. Bear   |        5 |
+---------------+----------+
</pre>
<h1>Η Έκφραση HAVING</h1>
<p>Τι γίνεται, όμως, αν θελήσουμε μια λίστα μόνο εκείνων των συγγραφέων που δεν έχουν κανένα joke στο όνομά τους; Ας δούμε πρώτα το ερώτημα που θα επέλεγαν οι περισσότεροι χρήστες :</p>
<pre name="code" class="html">
mysql&gt; SELECT Authors.Name, COUNT(Jokes.ID) AS NumJokes
-&gt; FROM Authors LEFT JOIN Jokes
-&gt; ON AID = Authors.ID
-&gt; WHERE NumJokes = 0
-&gt; GROUP BY AID;
ERROR 1054: Unknown column 'NumJokes' in 'where clause'
</pre>
<p>Ο λόγος που η έκφραση WHERE NumJokes = 0 δεν μας έκανε τη δουλειά είναι επειδή οι συνθήκες στην έκφραση WHERE επηρεάζουν τις καταχωρήσεις που έχουν επιλεγεί πριν ομαδοποιηθούν σύμφωνα με την έκφραση GROUP BY.<br />
Έτσι, αν θελήσουμε να αποκλείσουμε από το μέτρημα τα jokes που περιέχουν τη λέξη &#8220;chicken&#8221;, θα μπορούσαμε να χρησιμοποιήσουμε την έκφραση WHERE, όμως εφόσον η στήλη NumJokes δεν υπάρχει πριν επενεργήσει η GROUP BY, θα πρέπει να χρησιμοποιήσουμε μια διαφορετική μέθοδο για να ορίσουμε συνθήκες.<br />
Οι συνθήκες που επηρεάζουν τα αποτελέσματα αφού έχει γίνει η ομαδοποίηση (grouping) πρέπει να εμφανισθούν σε μια ειδική έκφραση HAVING. Έτσι λοιπόν, το σωστό ερώτημα είναι το εξής :</p>
<pre name="code" class="html">
mysql&gt; SELECT Authors.Name, COUNT(Jokes.ID) AS NumJokes
-&gt; FROM Authors LEFT JOIN Jokes
-&gt; ON AID = Authors.ID
-&gt; GROUP BY AID
-&gt; HAVING NumJokes = 0;
+---------------+----------+
| Name          | NumJokes |
+---------------+----------+
| Amy Mathieson |        0 |
+---------------+----------+
</pre>
<p>Μερικές συνθήκες εργάζονται και στις δύο εκφράσεις HAVING και WHERE. Για παράδειγμα, αν θελήσουμε να αποκλείσουμε έναν συγκεκριμένο συγγραφέα με το όνομά του, θα μπορούσαμε να χρησιμοποιήσουμε το Authors.Name != &#8220;AuthorName&#8221; σε μια από τις εκφράσεις WHERE ή HAVING, επειδή αν φιλτράρουμε τον συγγραφέα πριν ή μετά από την ομαδοποίηση, θα πάρουμε τα ίδια αποτελέσματα.<br />
Σε μερικές περιπτώσεις, είναι πάντα καλύτερο να χρησιμοποιούμε την έκφραση WHERE, επειδή η MySQL είναι καλύτερη στο να βελτιστοποιεί εσωτερικά τέτοια ερωτήματα και έτσι εκτελούνται ταχύτερα.</p>
]]></content:encoded>
			<wfw:commentRss>http://greektuts.net/php-intro-part4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS Super Hero</title>
		<link>http://greektuts.net/css-super-hero/</link>
		<comments>http://greektuts.net/css-super-hero/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 06:00:23 +0000</pubDate>
		<dc:creator>Pantso</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[box model]]></category>
		<category><![CDATA[cascading style sheets]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[css super hero]]></category>
		<category><![CDATA[css tutorial]]></category>
		<category><![CDATA[greektuts]]></category>
		<category><![CDATA[id]]></category>
		<category><![CDATA[super hero]]></category>
		<category><![CDATA[βοήθημα css]]></category>
		<category><![CDATA[Δωρεάν]]></category>
		<category><![CDATA[μαθήματα]]></category>

		<guid isPermaLink="false">http://greektuts.net/?p=3935</guid>
		<description><![CDATA[Ακολουθήστε και εσείς την νέα μας σειρά βοηθημάτων, για την εκμάθηση των CSS. Σε αυτήν την σειρά, θα μάθουμε τα πάντα για τα CSS, από επίπεδο αρχάριου, μέχρι επίπεδο Super Hero! Μετατρέψτε και εσείς την αγάπη σας για το design σε χόμπυ, αλλά ακόμα και σε επάγγελμα. Διαβάστε περισσότερα για την σειρά CSS Super Hero]]></description>
			<content:encoded><![CDATA[<p>Τα <a href="http://greektuts.net/category/programming/css/" target="_self">CSS</a>, ή αλλιώς Cascading Style Sheers, είναι ο καλύτερος τρόπος για να δώσουμε ζωή σε μια ιστοσελίδα. Λέγοντας ζωή, εννοούμε χρώμα, στύλ, εικόνες περιγράμματα, και ότι άλλο μπορούμε να φανταστούμε. Στην νέα μας σειρά, <strong>CSS Super Hero</strong>, θα μάθουμε τα πάντα από επίπεδο αρχάριου, μέχρι επαγγελματία, για τα <a href="http://greektuts.net/category/programming/css/">CSS</a>, και θα καλύψουμε σχεδόν κάθε περίπτωση χρήσης των <a href="http://greektuts.net/category/programming/css/">CSS</a> στον σχεδιασμό και την ανάπτυξη ιστοσελίδων.</p>
<p>Αναλυτικότερα θα δούμε :</p>
<ul>
<li>Τις βασικές αρχές</li>
<li>Την σύνταξη</li>
<li>Τις κλάσσεις και τα IDs</li>
<li>Πως δίνουμε στύλ με τα CSS</li>
<li>Την επεξήγηση του Box Model</li>
</ul>
<p>Σε κάθε άρθρο θα έχουμε πληθώρα παραδειγμάτων κώδικα, αλλά και όλα τα αρχεία παραδειγμάτων <a href="http://greektuts.net/category/freebies/">ΔΩΡΕΑΝ</a> προς κατέβασμα για όλους τους αναγνώστες μας.</p>
<p>Tέλος για τους <a href="http://greektuts.net/subscriptions/" target="_blank">συνδρομητές</a> μας, όλα τα βοηθήματα, θα παρέχονται και σε βίντεο !</p>
<p>Μείνετε μαζί μας, και γίνετε και εσείς ένας <strong>CSS Super Hero</strong> !!!</p>
<p>Παρακαλουθήστε τα άθρα καθώς αυτά δημοσιεύνται</p>
<blockquote>
<p style="text-align: center;"><a href="http://greektuts.net/css-superhero-basic-principles/" target="_self"><img src="../wp-content/uploads3/2010/07/csssuperhero_part1.jpg" alt="Post Pic" width="106" height="106" /></a></p>
<p style="text-align: center;"><a href="http://greektuts.net/css-superhero-basic-principles/" target="_self">Βασικές Αρχές</a></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://greektuts.net/css-super-hero/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Eiσαγωγή στην PHP Μέρος 3</title>
		<link>http://greektuts.net/php-intro-part3/</link>
		<comments>http://greektuts.net/php-intro-part3/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 06:22:55 +0000</pubDate>
		<dc:creator>Pantso</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[intro]]></category>
		<category><![CDATA[introduction]]></category>
		<category><![CDATA[εισαγωγή στην php μέρος 3]]></category>

		<guid isPermaLink="false">http://greektuts.net/?p=3915</guid>
		<description><![CDATA[Στο δεύτερο μέρος της εισαγωγής στην PHP μιλήσαμε για τα Regular Expressions, για την μορφωποίηση των κειμένων, τις παραγράφους και τους υπερσύνδεσμους. Στο τρίτο μέρος, θα μιλήσουμε περί περιεχομένου, θα δούμε κάποια προχωρημένα πράγματα για SQL, και θα δούμε τέλος και την ταξινόμηση με την Order By]]></description>
			<content:encoded><![CDATA[<h1><strong>Διαχωρισμός Κειμένου σε Σελίδες</strong></h1>
<p>Αν και κανένα joke δεν είναι πιθανό να είναι τόσο μεγάλο που να χρειάζεται περισσότερες από μία σελίδες, πολλά content-driven sites περιέχουν μεγάλο περιεχόμενο που είναι συχνά καλύτερο να παρουσιασθεί διασπασμένο σε σελίδες. Υπάρχει μια ακόμη συνάρτηση στην PHP που το κάνει αυτό πολύ εύκολα. Η <em>split</em><em>()</em> είναι μια συνάρτηση που δέχεται μια κανονική έκφραση και ένα string κειμένου και χρησιμοποιεί ταιριάσματα για την κανονική έκφραση για να διασπάσει το κείμενο σ’ έναν πίνακα (array). Ας δούμε το ακόλουθο παράδειγμα :</p>
<pre name="code" class="php">
$regexp="[ \n\r\t]+";   // Ένας ή περισσότεροι whitespace characters
$text="This is a test.";
$textarray=split($regexp, $text);
echo("$textarray[0]&lt;BR&gt;");         // Εμφανίζει "This&lt;BR&gt;"
echo("$textarray[1]&lt;BR&gt;");         // Εμφανίζει "is&lt;BR&gt;"
echo("$textarray[2]&lt;BR&gt;");         // Εμφανίζει "a&lt;BR&gt;"
echo("$textarray[3]&lt;BR&gt;");         // Εμφανίζει "test.&lt;BR&gt;"
</pre>
<p>Αν αντί να αναζητούμε έναν whitespace character αναζητούμε ένα [PAGEBREAK] tag και αντί να εμφανίζουμε όλα τα κομμάτια του κειμένου εμφανίσουμε μόνο τη σελίδα που μας ενδιαφέρει, η οποία δείχνεται από μια μεταβλητή $page που μεταβιβάζεται μαζί με την αίτηση για τη σελίδα (page request), για παράδειγμα, μπορούμε να διαιρέσουμε το περιεχόμενο σε σελίδες.</p>
<pre name="code" class="php">
// Αν δεν έχει καθορισθεί κάποια σελίδα, default είναι η
// πρώτη σελίδα ($page = 0)
if (!isset($page)) $page = 0;
// Διαιρούμε το κείμενο σ’ έναν πίνακα (array) από σελίδες
$textarray=split("\[PAGEBREAK]", $text);
// Επιλέγουμε τη σελίδα που θέλουμε
$pagetext=$textarray[$page];
$regexp="[ \n\r\t]+";   // Ένας ή περισσότεροι whitespace characters
$text="This is a test.";
$textarray=split($regexp, $text);
echo("$textarray[0]&lt;BR&gt;");         // Εμφανίζει "This&lt;BR&gt;"
echo("$textarray[1]&lt;BR&gt;");         // Εμφανίζει "is&lt;BR&gt;"
echo("$textarray[2]&lt;BR&gt;");         // Εμφανίζει "a&lt;BR&gt;"
echo("$textarray[3]&lt;BR&gt;");         // Εμφανίζει "test.&lt;BR&gt;"
</pre>
<p>Αν αντί να αναζητούμε έναν whitespace character αναζητούμε ένα [PAGEBREAK] tag και αντί να εμφανίζουμε όλα τα κομμάτια του κειμένου εμφανίσουμε μόνο τη σελίδα που μας ενδιαφέρει, η οποία δείχνεται από μια μεταβλητή $page που μεταβιβάζεται μαζί με την αίτηση για τη σελίδα (page request), για παράδειγμα, μπορούμε να διαιρέσουμε το περιεχόμενο σε σελίδες.</p>
<pre name="code" class="php">
// Αν δεν έχει καθορισθεί κάποια σελίδα, default είναι η
// πρώτη σελίδα ($page = 0)
if (!isset($page)) $page = 0;
// Διαιρούμε το κείμενο σ’ έναν πίνακα (array) από σελίδες
$textarray=split("\[PAGEBREAK]", $text);
// Επιλέγουμε τη σελίδα που θέλουμε
$pagetext=$textarray[$page];
</pre>
<p>Φυσικά, θα θελήσουμε να έχουμε κάποιον τρόπο μετακίνησης ανάμεσα στις σελίδες. Θα τοποθετήσουμε έναν σύνδεσμο (link) προς την προηγούμενη σελίδα στην κορυφή της τρέχουσας σελίδας και έναν σύνδεσμο προς την επόμενη σελίδα στη βάση της τρέχουσας σελίδας. Αν αυτή είναι η πρώτη σελίδα δεν θα χρειασθούμε ένα link προς την προηγούμενη σελίδα. Γνωρίζουμε ότι βρισκόμαστε στην πρώτη σελίδα αν το $page είναι ίσο με 0. Παρόμοια, δεν χρειαζόμαστε ένα link προς την επόμενη σελίδα όταν βρισκόμαστε στην τελευταία σελίδα.</p>
<p>Για να είμαστε σίγουροι ότι βρισκόμαστε στην τελευταία σελίδα, χρειαζόμαστε μια συνάρτηση της PHP με όνομα <em>count</em><em>()</em>, η οποία δέχεται έναν πίνακα (array) και επιστρέφει τον αριθμό των στοιχείων του πίνακα. Αν μεταβιβάσουμε τον πίνακα των σελίδων, η count() θα μας πει πόσες σελίδες υπάρχουν. Αν υπάρχουν 10 σελίδες, τότε το $textarray[9] θα περιέχει την τελευταία σελίδα. Έτσι, γνωρίζουμε ότι βρισκόμαστε στην τελευταία σελίδα αν το $page είναι ίσο με count($textarray) – 1.</p>
<p>Ο κώδικας για τα links μετάβασης ανάμεσα στις σελίδες είναι ο εξής :</p>
<pre name="code" class="php">
if ($page != 0) {
$prevpage = $page - 1;
echo("&lt;P&gt;&lt;A HREF=\"$PHP_SELF?id=$id&amp;page=$prevpage\"&gt;".
"Προηγούμενη Σελίδα&lt;/A&gt;&lt;/P&gt;");
}
// Το περιεχόμενο της σελίδας εμφανίζεται εδώ …
if ($page &lt; count($textarray) - 1) {
$nextpage = $page + 1;
echo("&lt;P&gt;&lt;A HREF=\"$PHP_SELF?id=$id&amp;page=$nextpage\"&gt;".
"Επόμενη Σελίδα&lt;/A&gt;&lt;/P&gt;");
}
</pre>
<p>Ολόκληρος ο κώδικας για την εμφάνιση του κειμένου του joke είναι ως εξής :</p>
<pre name="code" class="php">
&lt;!-- joke.php --&gt;
...
// Παίρνουμε (get) το κείμενο του joke από τη βάση δεδομένων
$joke = mysql_query("SELECT JokeText FROM Jokes ".
"WHERE ID=$id");
$joke = mysql_fetch_array($joke);
$joketext = $joke["JokeText"];
// Φιλτράρουμε τον HTML κώδικα
$joketext = htmlspecialchars($joketext);
// Αν δεν έχει καθορισθεί κάποια σελίδα, default είναι η πρώτη σελίδα
($page = 0)
if (!isset($page)) $page = 0;
// Διαιρούμε το κείμενο σ’ έναν πίνακα (array) από σελίδες
$textarray=split("\[PAGEBREAK]",$joketext);
// Επιλέγουμε τη σελίδα που θέλουμε
$joketext=$textarray[$page];
// Bold και italics
$joketext = eregi_replace("\[b]","&lt;B&gt;", $joketext);
$joketext = eregi_replace("\[eb]","&lt;/B&gt;", $joketext);
$joketext = eregi_replace("\[i]","&lt;I&gt;", $joketext);
$joketext = eregi_replace("\[ei]","&lt;/I&gt;", $joketext);
// Παράγραφοι και αλλαγές γραμμών
$joketext = ereg_replace("\r", "", $joketext);
$joketext = ereg_replace("\n\n", "&lt;P&gt;", $joketext);
$joketext = ereg_replace("\n", "&lt;BR&gt;", $joketext);
// Υπερσύνδεσμοι (Hyperlinks)
$joketext = ereg_replace(
"\[L]([-_./a-zA-Z0-9!&amp;%#?,'=:~]+)\[EL]",
"&lt;A HREF=\"\\1\"&gt;\\1&lt;/A&gt;", $joketext);
$joketext = ereg_replace(
"\[L=([-_./a-zA-Z0-9!&amp;%#?,'=:~]+)]".
"([-_./a-zA-Z0-9 !&amp;%#?,'=:~]+)\[EL]",
"&lt;A HREF=\"\\1\"&gt;\\2&lt;/A&gt;", $joketext);
if ($page != 0) {
$prevpage = $page - 1;
echo("&lt;P&gt;&lt;A HREF=\"$PHP_SELF?id=$id&amp;page=$prevpage\"&gt;".
"Προηγούμενη Σελίδα&lt;/A&gt;&lt;/P&gt;");
}
echo( "&lt;P&gt;$joketext" );
if ($page &lt; count($textarray) - 1) {
$nextpage = $page + 1;
echo("&lt;P&gt;&lt;A HREF=\"$PHP_SELF?id=$id&amp;page=$nextpage\"&gt;".
"Επόμενη Σελίδα&lt;/A&gt;&lt;/P&gt;");
}
...
</pre>
<h1><strong>Αυτόματη Υποβολή Περιεχομένου</strong></h1>
<p>Θα δούμε τώρα πώς μπορούμε να δεχόμαστε jokes αλλά να μην εμφανίζονται αμέσως στο site. Θα προσθέσουμε μια νέα στήλη στον πίνακα Jokes με όνομα Visible η οποία θα δέχεται μόνο μία από δύο τιμές : &#8216;Y&#8217; και &#8216;N&#8217;. Τα νέα jokes που θα υποβάλλονται θα γίνονται ίσα με Visible=&#8217;N&#8217; αυτόματα και δεν θα μπορούν να αποκλειστούν από το να εμφανισθούν στο site, προσθέτοντας απλά την έκφραση WHERE Visible=&#8217;Y&#8217; σ’ ένα ερώτημα (query) του πίνακα Jokes για το οποίο τα αποτελέσματα προορίζονται για κοινή θέα.</p>
<p>Τα jokes που έχουν τη στήλη Visible=&#8217;N&#8217; θα βρίσκονται στη βάση δεδομένων περιμένοντας τροποποίηση από έναν content manager, ο οποίος θα μπορεί να τα τροποποιήσει πριν τα κάνει ορατά ή απλά να τα διαγράψει αμέσως. Η δημιουργία μιας στήλης που μπορεί να περιέχει μία από δύο τιμές, η μια από τις οποίες είναι η προκαθορισμένη (default), έχει να κάνει μ’ ένα νέο είδος στήλης της MySQL που αποκαλείται <em>ENUM</em> :</p>
<pre name="code" class="php">
mysql&gt; ALTER TABLE Jokes ADD COLUMN
-&gt; Visible ENUM('N', 'Y') NOT NULL;
</pre>
<p>Η πρώτη τιμή που υπάρχει στις παρενθέσεις, δηλ. το &#8216;N&#8217; στην προκειμένη περίπτωση, είναι η προκαθορισμένη (default) τιμή, η οποία εκχωρείται στις νέες καταχωρήσεις αν δεν έχει καθορισθεί μια τιμή στην εντολή INSERT.</p>
<h1><strong>Προχωρημένη </strong><strong>SQL</strong></h1>
<p>Καθώς έχουμε δουλέψει με το παράδειγμα ενός Internet Joke Database website, είχαμε την ευκαιρία να εξερευνήσουμε τις περισσότερες πλευρές της Structured Query Language (SQL), από την βασική μορφή του ερωτήματος CREATE TABLE μέχρι τους δύο τρόπους σύνταξης των ερωτημάτων INSERT. Θα δούμε τώρα μερικά ακόμα τρικ της SQL που δεν τα έχουμε συναντήσει.</p>
<h1><strong>Ταξινόμηση με την </strong><strong>ORDER</strong><strong> </strong><strong>BY</strong></h1>
<p>Η <em>Order</em><em> </em><em>By</em> είναι μια προαιρετική έκφραση σ’ ένα ερώτημα SELECT με την οποία μπορούμε να καθορίσουμε μια στήλη (column) για να ταξινομήσουμε τον πίνακα των αποτελεσμάτων. Για παράδειγμα, για να ταξινομήσουμε με βάση τη στήλη Name του πίνακα Authors, δίνουμε την εξής εντολή :</p>
<pre name="code" class="php">
mysql&gt; SELECT Name, eMail FROM Authors ORDER BY Name;

+-----------------+----------------------+
| Name            | eMail                |
+-----------------+----------------------+
| Antonopoulos Antonis| ant@hellas.gr |
| Basileiadis Basileios| bas@hellas.gr|
| Konstantinou Konstantinos| kon@hellas.gr |
| Papadopoulos Nikolaos|pap@hellas.gr |
+-----------------+----------------------+
</pre>
<p>Αν προσθέσουμε τη λέξη κλειδί <em>DESC</em> μετά από το όνομα της στήλης ταξινόμησης, τα αποτελέσματα θα εμφανισθούν σε φθίνουσα σειρά, ως εξής :</p>
<pre name="code" class="php">
mysql&gt; SELECT Name, eMail FROM Authors ORDER BY Name DESC;

+-----------------+----------------------+
| Name            | eMail                |
+-----------------+----------------------+
| Papadopoulos Nikolaos | pap@hellas.gr|
| Konstantinou Konstantinos | kon@hellas.gr|
| Basileiadis Basileios| bas@hellas.gr|
| Antonopoulos Antonis|ant@hellas.gr|
+-----------------+----------------------+
</pre>
<p>Μπορούμε να ταξινομήσουμε και με βάση περισσότερες από μία στήλες, χωρίζοντάς τες με κόμμα στην έκφραση ORDER BY, οπότε η MySQL θα ταξινομήσει τις καταχωρήσεις με βάση την πρώτη στήλη, μετά με βάση τη δεύτερη στήλη όπου υπάρχουν ίδιες τιμές στην πρώτη στήλη κοκ. Μπορούμε να χρησιμοποιήσουμε τη λέξη κλειδί DESC σε όποια στήλη θέλουμε στην έκφραση ORDER BY για να αντιστρέψουμε τη σειρά ταξινόμησης.</p>
<h1><strong>Η Έκφραση </strong><strong>LIMIT</strong></h1>
<p>Συχνά θα εργαζόμαστε μ’ έναν μεγάλο πίνακα μιας βάσης δεδομένων, αλλά θα μας ενδιαφέρουν λίγες μόνο καταχωρήσεις του. Ας υποθέσουμε ότι θέλουμε να παρακολουθούμε τη δημοτικότητα των διάφορων jokes στο site. Θα μπορούμε να προσθέσουμε μια στήλη με όνομα TimesViewed στον πίνακα Jokes.</p>
<p>Ξεκινώντας με μια τιμή 0 για τα καινούργια jokes και προσθέτοντας το 1 στην τιμή του joke που ζητήθηκε κάθε φορά που εμφανίζεται η σελίδα του joke, θα μπορούμε να παρακολουθούμε πόσες φορές έχει διαβασθεί το κάθε joke στη βάση δεδομένων.</p>
<p>Ο PHP κώδικας για το query που αυξάνει κατά 1 τη στήλη TimesViewed ενός joke μ’ ένα δεδομένο ID, είναι ως εξής :</p>
<pre name="code" class="php">
$sql = "UPDATE Jokes SET TimesViewed=TimesViewed+1 ".
"WHERE ID=$id";
if (!mysql_query($sql)) {
echo("&lt;P &gt; Λάθος στην πρόσθεση ".
"γι' αυτό το joke! &lt;/P&gt;\n");
}
</pre>
<p>Μια κοινή χρήση αυτού του μετρητή θα ήταν για να παρουσιάσουμε μια λίστα των &#8220;Top 10 Jokes&#8221; στην πρώτη σελίδα του site, για παράδειγμα. Μπορούμε να χρησιμοποιήσουμε την έκφραση <em>ORDER</em><em> </em><em>BY</em><em> </em><em>TimesViewed</em><em> </em><em>DESC</em> για να εμφανίσουμε τα jokes από τις υψηλότερες προς τις χαμηλότερες τιμές της στήλης TimesViewed. Θα πρέπει απλά να επιλέξουμε τις 10 πρώτες τιμές από την κορυφή της λίστας.</p>
<p>Με την έκφραση (clause) <em>LIMIT</em> μπορούμε να καθορίσουμε ότι θέλουμε έναν μόνο συγκεκριμένο αριθμό αποτελεσμάτων. Σύμφωνα με το παραπάνω παράδειγμα, χρειαζόμαστε μόνο τα 10 πρώτα :</p>
<pre name="code" class="php">
$sql = "SELECT * FROM Jokes ORDER BY TimesViewed
DESC LIMIT 10";
</pre>
<p>Επίσης, θα μπορούμε να αποφύγουμε τη λέξη κλειδί DESC και να εμφανίσουμε τα 10 λιγότερο δημοφιλή jokes. Το επόμενο query θα εμφανίσει από το 21<sup>ο</sup> έως το 25<sup>ο</sup> πιο δημοφιλή jokes :</p>
<pre name="code" class="php">
$sql = "SELECT * FROM Jokes ORDER BY TimesViewed
DESC LIMIT 20, 5";
</pre>
<p>Πρέπει να έχουμε υπόψη μας ότι η πρώτη καταχώρηση στη λίστα των αποτελεσμάτων έχει αριθμό 0 και έτσι η 21<sup>η</sup> καταχώρηση της λίστας θα έχει αριθμό 20.</p>
<h1><strong>Οι Εκφράσεις </strong><strong>LOCK</strong><strong> και </strong><strong>UNLOCK</strong></h1>
<p>Στο ερώτημα UPDATE που χρησιμοποιήσαμε παραπάνω, υπάρχει ένας μικρός κίνδυνος. Τι θα συμβεί αν τη στιγμή που αλλάζει η τιμή της στήλης TimesViewed, κάποιος άλλος χρήστης εμφανίσει το ίδιο joke; Το PHP script θα εκτελεσθεί για δεύτερη φορά για την καινούργια αίτηση (request). Όταν εκτέλεσε το SELECT για να πάρει την τρέχουσα τιμή της στήλης TimesViewed, θα πήρε την ίδια τιμή με το πρώτο script, επειδή η τιμή δεν έχει ακόμη ενημερωθεί.</p>
<p>Και τα δύο scripts θα προσθέσουν μετά το 1 στην ίδια τιμή και θα γράψουν την καινούργια τιμή στον πίνακα. Το αποτέλεσμα θα είναι ότι δύο χρήστες είδαν το joke, αλλά ο μετρητής TimesViewed αυξήθηκε μόνο κατά 1. Για να αποφύγουμε προβλήματα όπως το παραπάνω, μπορούμε να κλειδώσουμε έναν ή περισσότερους πίνακες με τους οποίους εργαζόμαστε σ’ ένα ερώτημα και να έχουμε έτσι αποκλειστική πρόσβαση σ’ αυτούς για όσο διαρκεί το ερώτημα. Η σύνταξη για το κλείδωμα ενός πίνακα είναι ως εξής :</p>
<pre name="code" class="php">
LOCK TABLES tblName { READ | WRITE }
</pre>
<p>Όταν κλειδώνουμε έναν πίνακα, πρέπει να καθορίσουμε αν θέλουμε ένα &#8220;read lock&#8221; ή ένα &#8220;write lock&#8221;. Το πρώτο εμποδίζει άλλες διεργασίες από το να κάνουν αλλαγές στον πίνακα αλλά επιτρέπει σ’ άλλες να διαβάσουν τον πίνακα. Το δεύτερο απαγορεύει όλες τις προσβάσεις στον πίνακα.</p>
<p>Όταν τελειώσουμε την εργασία μας μ’ έναν πίνακα που έχουμε κλειδώσει, πρέπει να απελευθερώσουμε το κλείδωμα για να μπορέσουν να έχουν οι άλλες διεργασίες πρόσβαση στον πίνακα ξανά :</p>
<h3>UNLOCK TABLES</h3>
<p>Ακολουθεί ένα παράδειγμα ενός PHP κώδικα :</p>
<pre name="code" class="php">
mysql_query("LOCK TABLES inventory WRITE, shipping WRITE");
// … εντολές …
mysql_query("UNLOCK TABLES");
</pre>
]]></content:encoded>
			<wfw:commentRss>http://greektuts.net/php-intro-part3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Εισαγωγή στην ASP</title>
		<link>http://greektuts.net/introduction-to-asp/</link>
		<comments>http://greektuts.net/introduction-to-asp/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 06:30:14 +0000</pubDate>
		<dc:creator>Pantso</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[active server pages]]></category>
		<category><![CDATA[Γλώσσα]]></category>
		<category><![CDATA[Γλώσσα Προγραμματισμού]]></category>
		<category><![CDATA[Προγραμματισμός]]></category>

		<guid isPermaLink="false">http://greektuts.net/?p=3900</guid>
		<description><![CDATA[Σε αυτό το βοήθημα θα κάνουμε την εισαγωγή στην γλώσσα προγραμματισμού ιστοσελίδων και διαδικτυακών εφαρμογών, την ASP. Στην εισαγωγή λοιπόν για την γλώσσα αυτή θα δούμε τι είναι η ASP, πως χρησιμοποιείται και τι κάνει, και θα μιλήσουμε για την σύνταξή της και τις διάφορες scripting γλώσσες που εμπεριέχει, ενώ σε αργότερα βοηθήματα θα δούμε περισσότερες λεπτομέριες]]></description>
			<content:encoded><![CDATA[<h1><strong>Τι Είναι η </strong><strong>ASP</strong></h1>
<p>Η γλώσσα προγραμματισμού <strong><em>ASP</em></strong><em> (</em><em>Active</em><em> </em><em>Server</em><em> </em><em>Pages</em><em>)</em> έχει το ιδιαίτερο χαρακτηριστικό ότι ο κώδικάς της πρώτα μεταγλωττίζεται στον server και μετά φορτώνεται σαν ένα κανονικό html έγγραφο, χωρίς ο χρήστης να είναι σε θέση να δει τον αρχικό κώδικα. Με την τεχνολογία της ASP μπορούμε να δημιουργήσουμε δυναμικές ιστοσελίδες (dynamic web pages).</p>
<p>Ανταγωνιστικές της τεχνολογίας ASP είναι η τεχνολογία <strong><em>Php</em></strong><em> (</em><em>HyperText</em><em> </em><em>PreProcessor</em><em>)</em> καθώς και η τεχνολογία <strong><em>CFML</em></strong><em> (</em><em>ColdFusion</em><em> </em><em>Markup</em><em> </em><em>Language</em><em>)</em>.</p>
<h1><strong>Τι Είναι ένα Αρχείο </strong><strong>ASP</strong><strong> </strong></h1>
<ul>
<li>Ένα αρχείο ASP είναι ακριβώς το ίδιο όπως ένα αρχείο HTML.</li>
<li>Ένα αρχείο ASP μπορεί να περιέχει κείμενο, HTML tags και scripts.</li>
<li>Τα scripts σ’ ένα αρχείο ASP εκτελούνται στον server.</li>
<li>Ένα αρχείο ASP έχει την επέκταση <strong><em>.</em></strong><strong><em>asp</em></strong>.</li>
</ul>
<p><strong> </strong></p>
<h1><strong>Πώς Δουλεύει ένα Αρχείο </strong><strong>ASP</strong></h1>
<ul>
<li>Όταν ένας φυλλομετρητής ζητάει ένα αρχείο HTML, ο server      επιστρέφει το αρχείο.</li>
<li>Όταν ένας φυλλομετρητής ζητάει ένα αρχείο ASP, ο server καλεί την ASP.</li>
<li>Η ASP      διαβάζει το αρχείο ASP και εκτελεί τα scripts που περιέχει.</li>
<li>Τέλος, το αρχείο ASP επιστρέφεται στον φυλλομετρητή σαν ένα απλό αρχείο HTML.</li>
</ul>
<p><strong> </strong></p>
<h1><strong>Τι Μπορεί να Κάνει η </strong><strong>ASP</strong><strong> για μας</strong></h1>
<ul>
<li>Να τροποποιήσει δυναμικά το περιεχόμενο μιας      ιστοσελίδας.</li>
<li>Να απαντά σε ερωτήσεις χρήστη ή σε δεδομένα      που υποβάλλονται από φόρμες HTML.</li>
<li>Να έχει πρόσβαση σε δεδομένα ή σε βάσεις      δεδομένων και να επιστρέφει τα αποτελέσματα σ’ έναν φυλλομετρητή.</li>
<li>Να προσαρμόζει μια ιστοσελίδα ώστε να την      κάνει πιο χρήσιμη στους χρήστες.</li>
<li>Τα πλεονεκτήματα από την χρήση της ASP αντί για την CGI και την Perl      είναι η απλότητα και η ταχύτητα.</li>
<li>Παρέχει ασφάλεια εφόσον ο ASP κώδικάς μας δεν μπορεί να ειδωθεί από τον      φυλλομετρητή.</li>
<li>Εφόσον τα αρχεία ASP επιστρέφονται σαν απλή HTML, μπορούν να ειδωθούν από οποιονδήποτε φυλλομετρητή.</li>
<li>Ο έξυπνος ASP προγραμματισμός μπορεί να ελαχιστοποιήσει την      κυκλοφορία στο δίκτυο (network traffic).</li>
</ul>
<p><strong> </strong></p>
<h1><strong>Σύνταξη της </strong><strong>ASP</strong></h1>
<p>Δεν μπορούμε να δούμε τον ASP κώδικα σ’ έναν φυλλομετρητή, αλλά μόνο την έξοδο από την ASP, που είναι απλή HTML. Και αυτό γιατί τα scripts εκτελούνται στον server πριν σταλεί το αποτέλεσμα στον φυλλομετρητή.</p>
<p><span style="text-decoration: underline;">Παραδείγματα</span></p>
<p><strong><em>Εμφάνιση Κειμένου</em></strong></p>
<p>Πώς να γράψουμε κάποιο κείμενο στο τμήμα &lt;body&gt; του HTML εγγράφου με την ASP.</p>
<pre name="code" class="html">
&lt;html&gt;
&lt;body&gt;
&lt;%
response.write"Hello World!"
%&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong><em>Κείμενο και </em></strong><strong><em>HTML</em></strong><strong><em> </em></strong><strong><em>tags</em></strong></p>
<p>Πώς να μορφοποιήσουμε το κείμενο με HTML tags.</p>
<pre name="code" class="html">
&lt;html&gt;
&lt;body&gt;
&lt;%
response.write("&lt;h2&gt; Hello World! &lt;br&gt; Αυτή η πρόταση χρησιμοποιεί
HTML tags για να μορφοποιήσει το κείμενο!
&lt;/h2&gt;")
%&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h1><strong>Ο Βασικός Κανόνας Σύνταξης της </strong><strong>ASP</strong></h1>
<p>Ενα αρχείο ASP περιέχει κανονικά HTML tags, όπως ένα κανονικό αρχείο HTML. Επιπλέον, ένα αρχείο ASP μπορεί να περιέχει server scripts, που περικλείονται από τους οριοθέτες (delimiters) &lt;% και %&gt;. Τα server scripts εκτελούνται στον server και μπορούν να περιέχουν οποιεσδήποτε εκφράσεις, εντολές, διαδικασίες ή τελεστές που είναι έγκυροι για τη γλώσσα συγγραφής που χρησιμοποιούμε.</p>
<h1><strong>Το Αντικείμενο </strong><strong>Response</strong></h1>
<p>Η μέθοδος Write του αντικειμένου Response της ASP χρησιμοποιείται για να σταλεί περιεχόμενο (content) στον φυλλομετρητή. Για παράδειγμα, η επόμενη εντολή στέλνει το κείμενο <em>Hello</em><em> </em><em>World</em> στον φυλλομετρητή :</p>
<pre name="code" class="html">
Response.Write("Hello World")
</pre>
<p><strong> </strong></p>
<h1><strong>Η </strong><strong>VBScript</strong></h1>
<p>Στην ASP μπορούμε να χρησιμοποιήσουμε διάφορες γλώσσες συγγραφής (scripting languages). Η προκαθορισμένη είναι η γλώσσα VBScript, όπως φαίνεται στο επόμενο παράδειγμα :</p>
<pre name="code" class="html">
&lt;html&gt;
&lt;body&gt;
&lt;%
response.write("Hello World!")
%&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Το παράδειγμα αυτό χρησιμοποιεί τη συνάρτηση <em>response</em><em>.</em><em>write</em> για να εμφανίσει το μήνυμα <em>Hello</em><em> </em><em>World</em><em>!</em> στο τμήμα &lt;body&gt; του HTML εγγράφου.</p>
<h1><strong>Η </strong><strong>JavaScript</strong></h1>
<p>Για να χρησιμοποιήσουμε την JavaScript σαν την προκαθορισμένη γλώσσα συγγραφής, εισάγουμε την εξής εντολή (language specification) στην κορυφή της σελίδας :</p>
<pre name="code" class="html">
&lt;%@ language="javascript" %&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%
Response.Write("Hello World!")
%&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Πρέπει να έχουμε υπόψη μας ότι σ’ αντίθεση με την VBScript, η JavaScript ξεχωρίζει τα πεζά από τα κεφαλαία γράμματα (case sensitive). Ετσι, θα πρέπει να γράψουμε τον ASP κώδικα με κεφαλαία ή πεζά γράμματα ανάλογα με τις απαιτήσεις της γλώσσας.</p>
<p><strong> </strong></p>
<h1><strong>Αλλες Γλώσσες Συγγραφής (</strong><strong>Scripting</strong><strong> </strong><strong>Languages</strong><strong>)</strong></h1>
<p>Η ASP δίνεται με τις γλώσσες συγγραφής VBScript και JavaScript. Αν θέλουμε να γράψουμε κώδικα σε μια άλλη γλώσσα, όπως Perl, REXX ή Python, θα πρέπει να εγκαταστήσουμε τις αντίστοιχες μηχανές συγγραφής (scripting engines). Επειδή τα scripts εκτελούνται στον server, ο φυλλομετρητής που ζητάει το αρχείο ASP δεν είναι ανάγκη να υποστηρίζει scripting.</p>
]]></content:encoded>
			<wfw:commentRss>http://greektuts.net/introduction-to-asp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Font API, Font Directory</title>
		<link>http://greektuts.net/google-font-api-font-directory/</link>
		<comments>http://greektuts.net/google-font-api-font-directory/#comments</comments>
		<pubDate>Fri, 21 May 2010 09:57:52 +0000</pubDate>
		<dc:creator>Pantso</dc:creator>
				<category><![CDATA[Web Building]]></category>
		<category><![CDATA[Άρθρα]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[font direcoty]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[google api]]></category>
		<category><![CDATA[google font api]]></category>
		<category><![CDATA[google font directory]]></category>
		<category><![CDATA[google fonts]]></category>

		<guid isPermaLink="false">http://greektuts.net/?p=3856</guid>
		<description><![CDATA[Νέα υπηρεσία από την Google, και βέβαια όπως σχεδόν όλες οι υπηρεσίες της Google, έτσι και αυτή αναμαίνεται να δημιουργήσει πανικό (με την καλή έννοια). Ο λόγος για τα Google Fonts, για το Font API αλλά και το Font Directory, τα οποία μας βοηθάνε να ενσωματώσουμε ότι font θέλουμε στις σελίδες μας. Διαβάστε περισσότερα για αυτήν την νέα υπηρεσία]]></description>
			<content:encoded><![CDATA[<p>H Google πρόσφατα <a href="http://googlecode.blogspot.com/2010/05/introducing-google-font-api-google-font.html" target="_blank">ανακοίνωσε </a>το νέο <a href="http://code.google.com/apis/webfonts/" target="_blank">Font API</a> και το νέο <a href="http://code.google.com/webfonts" target="_blank">Font Directory</a>. Τι σημαίνει αυτό για εμάς; Πολλά ! Όλα τα εργαλεία για να προσθέσουμε custom fonts στις ιστοσελίδες μας, είναι πλέον μερικά κλίκ μακριά.</p>
<h1>Πως χρησιμοποιώ το Font Directory και το Font API;</h1>
<p>To μόνο που έχουμε να κάνουμε είναι να συμπεριλάβουμε σαν stylesheet το font από το Google Directory στο &lt;head&gt; της σελίδας μας. Δείτε το παράδειγμα παρακάτω</p>
<pre name="code" class="html">
&lt;!DOCTYPE html&gt;

&lt;html lang="en"&gt;
&lt;head&gt;
&lt;meta charset="utf-8"&gt;
&lt;title&gt;untitled&lt;/title&gt;
&lt;link href='http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz' rel='stylesheet' type='text/css'&gt;
&lt;style&gt;
body { font-family: 'Yanone Kaffeesatz', serif; font-size: 100px; }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
Hello World
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h1>Τι κερδίζουμε χρησιμοποιόντας το Font API;</h1>
<ol>
<li>Ελατωμένη χρήση bandwidth (το βάρος το επωμίζεται η Google)</li>
<li>Ταχύτητα λόγω Caching   (ίδια fonts που χρησιμοποιούνται σε ιστοσελίδες, αποθηκεύονται στους browser μας)</li>
<li>Γενικότερη ταχύτητα (Το Google’s CDN είναι γρηγορότερο από κάθε ιστοσελίδα)</li>
</ol>
<p>Μπορείτε να βρείτε περισσότερες οδηγίες και την λίστα με τα διαθέσιμα fonts <a href="http://code.google.com/webfonts" target="_blank">εδώ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://greektuts.net/google-font-api-font-directory/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Παρουσίαση:ASCOOS CMS</title>
		<link>http://greektuts.net/ascoos-cms-presentation/</link>
		<comments>http://greektuts.net/ascoos-cms-presentation/#comments</comments>
		<pubDate>Tue, 18 May 2010 06:30:09 +0000</pubDate>
		<dc:creator>Pantso</dc:creator>
				<category><![CDATA[Άρθρα]]></category>
		<category><![CDATA[alexsoft]]></category>
		<category><![CDATA[ascoos]]></category>
		<category><![CDATA[ascos]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[content]]></category>
		<category><![CDATA[content management system]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[διαχείριση]]></category>
		<category><![CDATA[διαχείριση περιεχομένου]]></category>
		<category><![CDATA[λογισμικό]]></category>

		<guid isPermaLink="false">http://greektuts.net/?p=3831</guid>
		<description><![CDATA[Tο ASCOOS CMS είναι ένα νέο Ελληνικό εμπορικό σύστημα διαχείρισης περιεχομένου (CMS) το οποίο υπόσχεται να κάνει την ζωή μας πιο εύκολη με τις καινοτόμες λειτουργίες του. Σε αυτήν την παρουσίαση θα δούμε τα βασικά στοιχεία του ASCOOS και θα μάθουμε περισσότερα για την ιστορία του, την δομή του αλλά και την ημερομηνία κυκλοφορίας του]]></description>
			<content:encoded><![CDATA[<h1>Τί είναι το ASCOOS CMS;</h1>
<p>Tο <abbr title="AlexSoft Software Content Object-Oriented System">ASCOOS CMS</abbr> είναι ένα εμπορικό σύστημα διαχείρισης περιεχομένου (<abbr title="Content Management System">CMS</abbr>) που διανέμεται υπό την άδεια χρήσης <a href="http://www.ascoos.com/s_support-t_license-a_view-id_1.html"><abbr title="Ascoos General License">ΑGL</abbr></a>. Μπορείτε να χρησιμοποιήσετε το <abbr title="Alexsoft Software Content Object-Oriented System">ASCOOS CMS</abbr> για να υλοποιήσετε απλούς ως και σύνθετους ιστότοπους χωρίς να απαιτείται να έχετε ιδιαίτερες τεχνικές γνώσεις.</p>
<p>Η ονομασία ASCOOS είναι αρχικά των λέξεων <strong>A</strong>lexsoft <strong>S</strong>oftware <strong>C</strong>ontent <strong>O</strong>bject-<strong>O</strong>riented <strong>S</strong>ystem, δηλαδή αντικειμενοστραφές σύστημα διαχείρισης περιεχομένου της <a href="http://www.alexsoft.gr/" target="_blank">AlexSoft Λογισμικό</a>. Το τελικό κόστος του παραγόμενου ιστότοπου χρησιμοποιώντας το <abbr title="Alexsoft Software Content Object-Oriented System">ASCOOS CMS</abbr>, είναι κατά πολύ μικρότερο από άλλα <abbr title="Content Management System">CMS</abbr> που  έχουν ανοικτό κώδικα, καταρρίπτοντας έτσι τον μύθο περί του ακριβού λογισμικού όταν αυτό διανέμεται κάτω από εμπορική άδεια χρήσης.</p>
<blockquote>
<p style="text-align: center;"><img class="size-full wp-image-3837 aligncenter" src="http://greektuts.net/wp-content/uploads3/2010/05/ascoos1.jpg" alt="" width="580" height="361" /></p>
<p style="text-align: center;">Επιφάνεια Εργασίας</p>
</blockquote>
<h1>Η ιστορία του ASCOOS CMS</h1>
<p>Τον Μάιο του 2006, βλέποντας ότι στην αγορά τα προγράμματα διαχείρισης περιεχομένου που κυκλοφορούσαν περισσότερο δημιουργούσαν παρά έλυναν προβλήματα, γεννήθηκε η ιδέα ανάπτυξης ενός νέου cms φιλικού προς τον τελικό χρήστη.</p>
<p>Τον Ιούνιο του 2006, ανακοινώθηκε και επίσημα η ιδέα για την ανάπτυξη του νέου cms και άρχισε από έναν και μόνο προγραμματιστή, τον δημιουργό του, Δρογκίδη Χρήστο, η εξοντωτική διαδικασία αποτύπωσης των προδιαγραφών και λειτουργιών του νέου cms.  Αρχικώς επελέγη η ονομασία Delta CMS αλλά στην πορεία το όνομα αυτό πήρε την σημερινή του ονομασία.</p>
<p>Μετά από διάστημα σχεδόν ενός έτους, το καλοκαίρι του 2007, οριστικοποιήθηκε η σημερινή μορφή του<abbr title="Alexsoft Software Content Object-Oriented System">ASCOOS CMS,</abbr> και ξεκίνησε η διαδικασία δημιουργίας των προηγμένων προδιαγραφών του…προδιαγραφές που ακόμη και σήμερα αδυνατούν να προσεγγίσουν άλλα cms.</p>
<p>Περισσότερα για την ιστορία του ASCOOS στην <a href="http://www.ascoos.com/" target="_blank">επίσημη ιστοσελίδα</a>&#8230;</p>
<h1>Δομή του ASCOOS CMS</h1>
<ul>
<li>Πυρήνας του CMS.</li>
<li>Ασφάλεια προγράμματος.</li>
<li>Προγράμματα συστήματος και χρήστη.</li>
<li>Ενότητες.</li>
<li>Πρόσθετα.</li>
<li>Θέματα και πρότυπα εμφάνισης.</li>
<li>Κώδικας τρίτων κατασκευαστών.</li>
</ul>
<h4><strong>2.1 Πυρήνας του CMS</strong></h4>
<p>Ο πυρήνας του <abbr title="Alexsoft Software Content Object-Oriented System">ASCOOS CMS</abbr> αποτελείται από δεκάδες κρυπτογραφημένα αρχεία, τα οποία είναι έτσι δομημένα ώστε να παράγουν ποιοτικό και γρήγορο κώδικα, καταναλώνοντας παράλληλα όσο το δυνατό λιγότερους πόρους του εξυπηρετητή. Τα αρχεία αυτά είναι προστατευμένα από εξωτερικές προσβάσεις.</p>
<h4><strong>2.2 Ασφάλεια προγράμματος</strong></h4>
<p>Στο <abbr title="Alexsoft Software Content Object-Oriented System">ASCOOS CMS</abbr> έχει υλοποιηθεί ένα εξειδικευμένο σύστημα προστασίας με την ονομασία <abbr title="ΑSCOOS Security System">ASS</abbr> που φροντίζει να προστατεύει τόσο τον εαυτό του όσο και την ιστοσελίδα σας, πριν και κατά την διάρκεια φόρτωσης του πυρήνα του.</p>
<p>Το ASS πέρα των γνωστών μεθόδων προστασίας, περιέχει πολλά εργαλεία και τεχνικές που είναι πρωτοποριακά για την υπάρχουσα λογική λειτουργίας των συστημάτων διαχείρισης περιεχομένου. Ενδεικτικά αναφέρουμε ορισμένες από τις λειτουργίες του:</p>
<ul>
<li>Εικόνες ασφαλείας (captcha) με πρόσθετη επιβεβαίωση σωστής πληκτρολόγησης</li>
<li>Προστασία από Attacks, XSS και SQL Injections.</li>
<li>Προστασία Υπερχείλισης αιτημάτων</li>
<li>Καταγραφέας κίνησης που καταγράφει όλες τις επιτυχημένες ή μη απόπειρες επίσκεψης, σύνδεσης και επιθέσεων στην ιστοσελίδα σας καθώς και των παραγόμενων σφαλμάτων.</li>
<li>Η Απόκρυψη σελίδας εισόδου στο τμήμα διαχείρισης, θα κρύψει την σελίδα εισόδου από οποιονδήποτε άλλον εκτός του διαχειριστή της ιστοσελίδας ή τους εξουσιοδοτημένους χρήστες.</li>
<li>Ενισχυμένη ασφάλεια και επιμελείς έλεγχοι των στοιχείων που εισάγονται στο σύστημα από τους επισκέπτες.</li>
</ul>
<blockquote>
<p style="text-align: center;"><img class="size-full wp-image-3838 aligncenter" src="http://greektuts.net/wp-content/uploads3/2010/05/ascoos2.jpg" alt="" width="580" height="361" /></p>
<p style="text-align: center;">Παράθυρα</p>
</blockquote>
<h4><strong>2.3 Προγράμματα συστήματος και χρήστη</strong></h4>
<p>Τα προγράμματα στο <abbr title="Alexsoft Software Content Object-Oriented System">ASCOOS CMS</abbr> χωρίζονται σε δύο κατηγορίες, συστήματος και χρήστη. Στη πρώτη όλα τα προγράμματα είναι ενσωματωμένα και απαραίτητα για την λειτουργία του ίδιου του <abbr title="Alexsoft Software Content Object-Oriented System">ASCOOS CMS</abbr> και δεν μπορούν να απεγκατασταθούν, ενώ τα προγράμματα χρήστη είναι προαιρετικά και μπορούν να εγκατασταθούν / απεγκατασταθούν οποιαδήποτε στιγμή το θελήσει ο ιδιοκτήτης της σελίδας.</p>
<h4><span style="font-weight: normal;">Περισσότερα για την δομή του ASCOOS στην </span><a href="http://www.ascoos.com/" target="_blank"><span style="font-weight: normal;">επίσημη ιστοσελίδα</span></a><span style="font-weight: normal;">&#8230;</span></h4>
<p><strong> </strong></p>
<h1><strong>Τμήματα του ASCOOS CMS</strong></h1>
<ul>
<li>Τμήμα εμφάνισης ιστοσελίδας στους χρήστες (Frontend).</li>
<li>Τμήμα διαχείρισης ιστοσελίδας (Frontend).</li>
<li>Τμήμα διαχείρισης υπηρεσιών. (Services).</li>
</ul>
<h4>3.1 Τμήμα εμφάνισης ιστοσελίδας στους χρήστες (Frontend).</h4>
<p>Το τμήμα αυτό υλοποίησης, αφορά την εμφάνιση της ιστοσελίδας μας στους χρήστες. Μέσω των προτύπων εμφάνισης (Templates) μπορούμε να διαμορφώσουμε τον τρόπο με τον οποίο θα εμφανιστούν τα δεδομένα μας στους χρήστες.   (Frontend).</p>
<blockquote>
<p style="text-align: center;"><img class="size-full wp-image-3839 aligncenter" src="http://greektuts.net/wp-content/uploads3/2010/05/ascoos3.jpg" alt="" width="580" height="338" /></p>
<p style="text-align: center;">Επεκτάσεις</p>
</blockquote>
<h4>3.2 Τμήμα διαχείρισης ιστοσελίδας (Frontend).</h4>
<p>Στο τμήμα αυτό υλοποιείται η διαχείριση της ιστοσελίδας μας. Στο τμήμα αυτό έχουν πρόσβαση μόνο εξουσιοδοτημένοι χρήστες και αφορά την διαχείριση τόσο των δεδομένων (άρθρων, banners, μηνυμάτων κλπ) όσο και της συμπεριφοράς της ίδιας της ιστοσελίδας.</p>
<p>Ακόμα και εάν ποτέ πριν δεν είχατε χρησιμοποιήσει σύστημα διαχείρισης περιεχομένου, με το <abbr title="Alexsoft Software Content Object-Oriented System">ASCOOS CMS</abbr> θα νιώσετε σαν να ασχολείστε χρόνια.</p>
<p>Μέσα από το γραφικό περιβάλλον διαχείρισης, που σε πολλούς θα θυμίσει οικεία λειτουργικά συστήματα Ηλεκτρονικών Υπολογιστών, ο διαχειριστής μπορεί χρησιμοποιώντας πολλαπλά παράθυρα, να βελτιστοποιήσει τους χρόνους εργασίας του. Έτσι δεν χρειάζεται πλέον να περιμένει να ολοκληρωθεί η προηγούμενη εργασία ώστε να προχωρήσει σε επόμενη. Για παράδειγμα μπορεί ταυτόχρονα να βλέπει τα sessions των επισκεπτών και από την άλλη να καταχωρεί ένα άρθρο. Και οι δύο ενέργειες σχεδόν ταυτόχρονα.</p>
<p>Μπορείτε να αλλάξετε την ταπετσαρία (Wallpaper) στην επιφάνεια εργασίας, να αλλάξετε ολόκληρο το θέμα του πίνακα διαχείρισης (wallpaper, εικονίδια, μορφή παραθύρων κλπ.), να αλλάξετε την εμφάνιση στην οθόνη σύνδεσης του περιβάλλοντος διαχείρισης κ.α.</p>
<h4><span style="font-weight: normal;">Περισσότερα για τα τμήματα του ASCOOS στην </span><a href="http://www.ascoos.com/" target="_blank"><span style="font-weight: normal;">επίσημη ιστοσελίδα</span></a><span style="font-weight: normal;">&#8230;</span></h4>
<h1>Επίσημη Κυκλοφορία</h1>
<p>Το <acronym title="AlexSoft Content Object-Oriented System"><strong>ASCOOS CMS</strong></acronym> την παρούσα στιγμή βρίσκεται στα τελευταία στάδια πριν την πρώτη έκδοση alpha.</p>
<p>Μετά την ολοκλήρωση της έκδοσης alpha, θα ακολουθήσουν σε πολύ μικρό χρονικό διάστημα οι εκδόσεις alpha/2 και Beta με την οποία θα ολοκληρωθούν οι δοκιμαστικές εκδόσεις και θα δοθεί στην δημοσιότητα το DEMO, ώστε να μπορείτε να αξιολογήσετε το προϊόν.</p>
<h1>Που θα βρώ περισσότερα για το ASCOOS;</h1>
<p>Μπορείτε να μάθετε περισσότερα για το ASCOOS CMS στην επίσημη ιστοσελίδα του το<a href="http://www.ascoos.com/" target="_blank"> ascoos.com</a></p>
<p>Θέλουμε να ευχαριστήσουμε τον Χρήστο Δρογκίδη, δημιουργό του ASCOOS για την άδεια του να γράψουμε το παρόν άρθρο.</p>
]]></content:encoded>
			<wfw:commentRss>http://greektuts.net/ascoos-cms-presentation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Eισαγωγή στην HTML5 μέρος 1ο</title>
		<link>http://greektuts.net/html5-intro-part1/</link>
		<comments>http://greektuts.net/html5-intro-part1/#comments</comments>
		<pubDate>Mon, 17 May 2010 11:55:13 +0000</pubDate>
		<dc:creator>Pantso</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Προγραμματισμός]]></category>
		<category><![CDATA[5]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[html 5]]></category>
		<category><![CDATA[html five]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[w3schools]]></category>
		<category><![CDATA[γλώσσες προγραμματισμού]]></category>

		<guid isPermaLink="false">http://greektuts.net/?p=3818</guid>
		<description><![CDATA[Σε αυτό το πρώτο μέρος της εισαγωγής στην HTML5, θα δούμε κάποιες γενικές πληροφορίες για την γλώσσα, τα κυριότερα χαρακτηριστικά της, και κάποια βασικά παραδείγματα εφαρμογής της.]]></description>
			<content:encoded><![CDATA[<h1>Τι είναι η HTML5;</h1>
<p>Η HTML5 είναι η νέα έκδοση της γνωστής γλώσσας προγραμματισμού HTLM. Η προηγούμενη έκδοση, η οποία χρησιμοποιούμε ακόμα σήμερα, βγήκε το 1999. Από τότε όμως έχουν αλλάξει πολλά στον παγκόσμιο ιστό, και έτσι η ανάγκη για standards και πλήρη συμβατότητα οδήγησε το World Wide Web Consortium (W3C) και το Web Hypertext Application Technology Working Group (WHATWG) να συνεργαστούν και να δημιουργήσουν την νέα αυτή γλώσσα. Η HTML5 είναι ακόμα υπό ανάπτυξη, αλλά μερικοί browsers υποστηρίζουν από τώρα κάποια χαρακτηριστικά της και κάποιες λειτουργίες της.</p>
<p>Κάποιοι βασικοί κανόνες που έχουν οριστεί για την HTML5 είναι:</p>
<ul>
<li>Βάση για τα νέα χαρακτηριστικά να είναι οι HTML, CSS, DOM, και η JavaScript</li>
<li>Ελαχιστοποίηση των plugins (όπως το Flash)</li>
<li>Καλύτερη λειτουργία εντοπισμού λαθών</li>
<li>Περισσότερο markup για να αντικατασταθεί το scripting</li>
<li>Πλήρη συμβατότητα ανεξαρτήτως συσκευής</li>
</ul>
<h1>Νέα Χαρακτηριστικά</h1>
<p>Κάποια από τα νέα χαρακτηριστικά της HTML5 είναι:</p>
<ul>
<li>Το στοιχείο canvas για το drawing</li>
<li>Τα στοιχεία video και audio για αναπαραγωγή πολυμέσων</li>
<li>Νέα στοιχεία περιεχομένου όπως τα footer, header, nav και  	section</li>
<li>Νέα στοιχεία δημιουργίας φόρμας όπως τα calendar, date, time, email, url και search</li>
</ul>
<h1>Video στην HTML5</h1>
<p>Μέχρι σήμερα, για να παίξουμε ένα video σε έναν browser χρειαζόμαστε κάποιο plugin (πρόσθετο) όπως το Flash ή το QuickTime.</p>
<p>H HTML5 μας καθορίζει έναν νέο τρόπο, και αυτός είναι με την χρήση του στοιχείου video. Ας δούμε πως χρησιμοποιείται</p>
<p>Το μόνο που χρειάζεται να γράψουμε για να εμφανίσουμε το video μας είναι:</p>
<pre name="code" class="html">
&lt;video src="movie.ogg" controls="controls"&gt;
&lt;/video&gt;
</pre>
<p>Για να εμφανίσουμε ένα μήνημα σε όλους όσους πάνε να δούνε το video μας από κάποιον browser που δεν υποστηρίζει το στοιχείο video της HTML5 γράφουμε</p>
<pre name="code" class="html">
&lt;video src="movie.ogg" width="320" height="240"  controls="controls"&gt;
Ο φυλλομετρητής σας δεν υποστηρίζει το στοιχείο video της HTML5.
&lt;/video&gt;
</pre>
<p>Τέλος μια πιο εξειδικευμένη χρήση του στοιχείου video είναι η εξής:</p>
<pre name="code" class="html">
&lt;video width="320" height="240" controls="controls"&gt;
&lt;source src="movie.ogg" type="video/ogg"&gt;
&lt;source src="movie.mp4" type="video/mp4"&gt;
Your browser does not support the video tag.
&lt;/video&gt;
</pre>
<h2>Υποστηριζόμενα Video Files/Browsers</h2>
<p style="text-align: center;"><img class="size-full wp-image-3823 aligncenter" src="http://greektuts.net/wp-content/uploads3/2010/05/videos.jpg" alt="" width="580" height="84" /></p>
<h2>Ιδιότητες</h2>
<ul>
<li>autoplay: To video θα ξεκινήσει αυτόματα μόλις φορτώσει</li>
<li>controls: Θα εμφανίζονται ή όχι τα κουμπιά όπως το play</li>
<li>height:  To ύψος σε pixels</li>
<li>loop: Αν θα επαναλαμβάνεται το video μετά το τέλος του</li>
<li>preload: Το video θα φορτώνεται μαζί με την σελίδα</li>
<li>src: Το URL του video</li>
<li>width: To πλάτος σε pixels</li>
</ul>
<h1>Audio στην HTML5</h1>
<p>Ότι ισχύει σε σχέση με τα videos και τα plugins, ισχύει και για τα audio clips. Έτσι η HTML5 μας ορίζει το στοιχείο audio για την αναπαραγωγή ήχων.</p>
<p>Το μόνο που χρειάζεται να γράψουμε για να αναπαράγουμε τον ήχο μας είναι:</p>
<pre name="code" class="html">
&lt;audio src="song.ogg" controls="controls"&gt;
&lt;/audio&gt;
</pre>
<p>Για να εμφανίσουμε ένα μήνημα σε όλους όσους πάνε να ακούσουν τον ήχο μας  από κάποιον browser που δεν υποστηρίζει το στοιχείο audio της HTML5  γράφουμε</p>
<pre name="code" class="html">
&lt;audio src="song.ogg" controls="controls"&gt;
Ο φυλλομετρητής σας δεν υποστηρίζει το στοιχείο audio της HTML5.
&lt;/audio&gt;
</pre>
<p>Τέλος μια πιο εξειδικευμένη χρήση του στοιχείου audio είναι η εξής:</p>
<pre name="code" class="html">
&lt;audio controls="controls"&gt;
&lt;source src="song.ogg" type="audio/ogg"&gt;
&lt;source src="song.mp3" type="audio/mpeg"&gt;
Your browser does not support the audio element.
&lt;/audio&gt;
</pre>
<h2>Υποστηριζόμενα Audio Files/Browsers</h2>
<p style="text-align: center;"><img class="size-full wp-image-3826 aligncenter" src="http://greektuts.net/wp-content/uploads3/2010/05/audio.jpg" alt="" width="580" height="100" /></p>
<h2>Ιδιότητες</h2>
<p>autoplay: ο ήχος θα ξεκινήσει αυτόματα μόλις φορτώσει</p>
<p>controls: Θα εμφανίζονται ή όχι τα κουμπιά όπως το play</p>
<p>loop: Αν θα επαναλαμβάνεται ο ήχος μετά το τέλος του</p>
<p>preload: Ο ήχος θα φορτώνει μαζί με την σελίδα</p>
<p>src: To URL του ηχητικού κομματιού μας</p>
<blockquote><p>Ευχαριστούμε πολύ τα W3Schools για αυτό το βοήθημα</p></blockquote>
<p>Στο  δεύτερο μέρος της εισαγωγής στην HTML5 θα δούμε το στοιχείο Canvas και τα tags της HTML5</p>
]]></content:encoded>
			<wfw:commentRss>http://greektuts.net/html5-intro-part1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
