Ανάπτυξη ιστοτόπου σε περιβάλλον Debian/dokuwiki
Το dokuwiki είναι ένας βίκι απλό αφού δεν χρειάζεται mysql .Οπότε είναι ιδανικό για απλούς ιστοτόπους που δεν έχουν μεγάλες βάσεις δεδομένων και κριτικές χρονικές απαιτήσεις.
Λειτουργικότητα που παρέχει ένας dokuwiki ιστότοπος
[επεξεργασία]- είσοδος μέλους
- αλλαγή σελίδας
- προεπισκόπηση (preview)
- Παλαιότερες εκδόσεις σελίδας ή ιστορικό (page history)
- Άδειες σελίδας (Page Permissions)
- Επεξεργασία σύνοψης (Change Summary)
- Πρόσφατες αλλαγές σελίδων ( recent changes)
- Χώροι ονομάτων (namespaces) Πρόκειται για κατηγοριοποιήσεις σελίδων , έτσι ώστε να μπορούμε αν έχουμε και σελίδες με το ίδιο όνομα εφόσον βρίσκονται σε διαφορετικό χώρο ονομάτων.
- Ασήμαντες αλλαγές (minor changes) Όποτε αλλάζεις μια σελίδα σου δίνεται η δυνατότητα να μαρκάρεις την αλλαγή σου σαν ασήμαντη. Αυτό είναι χρήσιμο στην οθόνη με το ιστορικό της σελίδας όπου θα μπορείς εύκολα να ξεχωρίζεις τις σημαντικές για σένα αλλαγές σε συνδιασμό με την σύνοψη της κάθε αλλαγής
Στήσιμο ενός dokuwiki ιστοτόπου στον υπολογιστή μας
[επεξεργασία]Έστω ότι θέλουμε να δοκιμάσουμε και να πειραματιστούμε με έναν dokuwiki ιστότοπο.
Θα χρειαστούμε την τελευταία σταθερή έκδοση του dokuwiki και να προσθέσουμε στο αρχείο /etc/hosts το όνομα του τοπικού ιστοτόπου μας.
Μπορείται να κατεβάσετε από εδώ την τελευταία σταθερή έκδοση.
Έστω ότι θέλουμε ο ιστότοπος μας αυτός να είναι προσβάσιμος με το όνομα local-dokuwikitest. Φυσικά αφού δεν θα είναι προσβάσιμος από άλλους υπολογιστές του δικτύου ίσως αυτό δεν είναι αναγκαίο. πχ θα μπορούσαμε να τον τοποθετήσουμε σαν ξεχωριστο κατάλογο και να είναι προσβάσιμος http://localhost/dokuwikitest Όμως αν θέλουμε να μπορούμε να δοκιμάζουμε έυκολα ιστοτόπους διαφορετικής προέλευσης, php,ruby on rails,joomla, κτλ είναι καλύτερη η προσέγγιση που αναλύουμε ,δηλαδή να έχουμε τόσους εικονικούς διακομιστές όσους τοπικούς ιστοτόπους θέλουμε. Οπότε αρχικά κάνουμε την αλλαγή στο /etc/hosts.
127.0.0.1 localhost local-dokuwikitest
Κατόπιν πρέπει να δημιουργήσουμε το αρχείο ρυθμίσεων που αφορούν αυτόν τον εικονικό ιστότοπο στον κατάλογο /etc/apache2/sites-available
$ su password: ********** # cd /etc/apache2/sites-available # nano local-dokuwikitest NameVirtualHost * //αυτή η εντολή πρέπει να υπάρχει στο πρώτο αλφαβητικά αρχείο ρυθμίσεων. <VirtualHost *> ServerName local-dokuwikitest DocumentRoot /var/www/dokuwikitest/ </VirtualHost> # a2ensite local-dokuwikitest # /etc/init.d/apache2 reload
Το επόμενο βήμα είναι να ρυθμίσουμε κατάλληλα τα δικαιώματα των καταλόγων .
# cd /var/www/local-dokuwikitest
Και αν όλα έχουν καλώς το url [http://local-dokuwikitest] θα πρέπει να μας οδηγήσει στον ιστότοπό μας για να κάνουμε την εγκατάσταση.
Ρύθμιση δικαιωμάτων πρόσβασης στον κατάλογο του Dokuwiki
[επεξεργασία]Όταν δουλεύουμε έναν ιστότοπο τοπικά θα πρέπει να έχουμε και'εμεις δικαιώματα πρόσβασης. Όταν όμως αποφασίσουμε να κάνουμε προσβάσιμο τον ιστότοπό μας στο διαδίκτυο τότε πρέπει να θέσουμε ποιό περιοριστικά δικαιώματα ώστε να έχει πρόσβαση μόνο ο apache.
# cd /var/www/dokuwikitest # chown -R www-data . # find dir -type d -name "*" -exec chmod 700 {} \; # find dir -type f -name "*" -exec chmod 600 {} \;
Και αν όλα πήγαν κατ'ευχή μπορούμε να δώσουμε στη γραμμή διεύθυνσης του πλοηγού μας του
διαδικτύου το url http://local-dokuwitest/install.php όπως βλέπουμε στην διπλανή εικόνα
που έχουμε επιλέξει σαν γλώσσα εγκατάστασης την ελληνική από το πτυσσόμενο μενού πανω δεξιά.
Εφόσον γίνει σωστά η εγκατάσταση θα εμφανιστεί σύνδεσμος που μας οδηγεί στην αρχική βικισελίδα
μας που απεικονίζεται δεξιά.
Κατόπιν μπορούμε έυκολα να αρχίσουμε να πειραματιζόμαστε εγκαθιστώντας πρόσθετα , αλλάζωντας εμφάνιση ή φτιάχνωντας δικά μας πρότυπα εμφάνισης ή πρόσθετα.
Εγκατάσταση dokuwiki ιστοτόπου σε εξυπηρετητή φιλοξενίας
[επεξεργασία]Μελέτη κώδικα
[επεξεργασία]Ενα σύνολο εντολών που εκτελούνται για να πραγματοποιήσουν απαιτήσεις που έχουμε από dk.
- Δημιουργία σελίδων ( πιθανώς μαζί με χώρο ονομάτων )
- Επεξεργασία σελίδας
- Διατήρηση των παλαιότερων εκδόσεων μιας σελίδας
- Διαχείριση χρηστών
Για να καταλάβουμε καλύτερα τη βασική δομή πρέπει να βρούμε υποψήφια σημεία διακοπής που θα βρίσκονται σε στρατηγικά σημεία.
Απλουστευμένο μοντέλο λειτουργίας της dokuwiki μηχανής
[επεξεργασία]Από την μία το dk έχει ένα σύστημα δημιουργίας και χειρισμού γεγονότων , από την άλλη υπάρχει σαν παράλληλη διαδικασία η μεταφορά γεγονοτων μέσα από την μεταβλητή $ACT.
Επίσης έχουμε σαν δεδομένο ότι υπάρχει η πρόθεση από τους δημιουργούς του Dokuwiki να ακολουθήσουν την MVC αρχιτεκτονική
Και σύμφωνα με την πρόθεση τους
- Controller : Το doku.php είναι ελεγκτής.
- Model: Εδώ περιέχονται τα βασικά αντικείμενα, έννοιες του ιστοτόπου
- user membership
- ACL
- namespace(s)
- topic(s) (FIXME: Is a topic the full path /wiki/development/guide of just guide?)
- media file(s)
- View: (όψη) είναι αυτό που στελνεται προς εμφάνιση στον πλοηγό.
- Topic content
- CSS
- Code highlite
- templates
- Header, Footer etc
Σε γενικές γραμμές το MVC δουλευει ως εξής:
- ο ελεγκτής παίρνει μια ενέργεια από τον χρήστη. Αυτό γίνεται με το που θα κάνει πχ έναν κλικ σε κάποιον σύνδεσμο μιας dokuwiki σελίδας (σύνδεσμο που αφορά λειτουργικότητα που παρέχει ο dk ιστότοπος), ο οποίος σύνδεσμος θα έχει url της μορφής http://yourDKsiteName/?do=login&id=pagename&... . Δηλαδή όποτε κάνει μια ενέργεια ο χρήστης που αφορά την λειτουργικότητα του dk ιστοτόπου (πχ σύνδεση, επεξεργασία , ευρετήριο , αναζήτηση ,πρόσφατες αλλαγές κτλ) στην ουσία θα καλεί τον ελεγκτή με τις αντίστοιχες παραμέτρους με βάση τις οποίες θα μπορέσει να εκτελέσει τον ανάλογο κώδικα για να παρέχει την αντίστοιχη λειτουργικότητα.
- Κατόπιν η μηχανή dk χρησιμοποιώντας και το μοντέλο θα δημιουργήσει-ενεργοποιήσει-πυροδοτήσει κατά την εκτέλεση της ενέργειας του χρήστη και κάποια σημαντικά γεγονότα (events). Ο λόγως ύπαρξης αυτών των γεγονότων είναι ότι παρέχουν έναν σκελετό της λειτουργικότητας του dk γύρω από τον οποίο μπορούν να υλοποιηθούν advices(συμβουλές) πριν και μετά και πρόσθετα (plugins).To γεγονός-εντολή επεξεργάζεται τη βάση του με τη βοήθεια του μοντέλου και κατόπιν τα δεδομένα που άντλησε από το μοντέλο τα στέλνει με τη βοήθεια μιας όψης στην οθόνη του πλοηγού.
Στην περίπτωση μας έχουμε βασικά αντικείμενα: σελίδα, χώρος ονόματων, χρήστης , μέσα(εικόνες κτλ)
Μπορούμε να δούμε αρχικά το DK (μια όσο το δυνατό απλουστερη αντίληψη για να το προσεγγίσουμε όσο το δυνατό με καλύτερη ψυχολογία :-) ) σαν ένα πρόγραμμα που επιτρέπει την από κοινού την επεξεργασία ,δημιουργία και διαγραφή ενός συνόλου αρχείων.
Στην απλούστερη εκδοχή έχουμε έναν επισκέπτη ενός σχεδόν απλού στατικού ιστοτόπου με την διαφορά ότι σε κάθε σελίδα υπάρχει και ένα κουμπί επεξεργασία σελίδας. Αυτό σημαίνει ότι έχουμε ένα κουμπι σε κάθε σελίδα (μια φόρμα) που όταν πατηθεί θα πρέπει να μας πάει σε μια άλλη σελίδα (την σελίδα επεξεργασίας) όπου θα εμφανίζεται το περιεχόμενο της αρχικής σελίδας προς αλλαγή.
Σημαντικό εδώ είναι να θυμώμαστε ότι εφόσον δεν χρησιμοποιούμε AJAX ο μόνος τρόπος για να μεταφέρουμε πληροφορία από μια σελίδα σε μια άλλη είναι με post/get.
Το πρώτο μας ερμηνευτικό πλαίσιο λειτουργίας θεωρεί ότι σε κάθε σελίδα του ιστοτόπου μας έχουμε ενσωματωμένη και μια φόρμα στην οποία έχουμε προσδιορίσει τα δεδομένα που θα μεταφέρουμε και το σενάριο του διακομιστή που θα τα επεξεργαστεί.
Αρχεία και λειτουργικότητα
[επεξεργασία]Η επίσημη τεκμηρίωση του πηγαίου κώδικα.
Κατάλογος inc
[επεξεργασία]Ας υποθέσουμε ότι θέλουμε να μελετήσουμε την λειτουργικότητα που προσφέρουν τα αρχεία στον κατάλογο inc. Τα άμμεσα περιεχόμενα αρχεία είναι 37. Και έχουν
auth/ geshi/ lang/ parser/
- actions.php ( 14 μέθοδοι ) ?
- auth.php ( 19 μέθοδοι ) Υλοποίηση λειτουργικότητας πιστοποίησης. Λογικά όποτε κάνετε απόπειρα σύνδεσης θα πρέπει να καλούνται συναρτήσεις αυτού του αρχείου. Με την υποστήριξη των σεναρίων στον κατάλογο auth/ μπορεί να γίνει η πιστοποίηση χρησιμοποιώντας διαφορετικά τελικά-βασικά(backend) τμήματα πιστοποίσης. Αυτό πρακτικά σημαίνει ότι πχ μπορείτε να έχετε στήσει ένα δικτυακό φόρουμ (πχ punBB) και να γίνεται η πιστοποίηση ως προς την βάση του φόρουμ ώστε να είναι ενιαία η πιστοποίηση στον ιστότοπό σας που ενσωματώνει την αγορά.
- blowfish.php ( 1 κλάση και 10 μέθοδοι ) Υλοποίηση αλγορίθμου κρυπτογράφησης blowfish.
- cache.php ( 4 κλάσεις και 17 μέθοδοι ) Υλοποίηση ενδιάμεσης μνήμης. Ερωτήματα: Πόση είναι η εν.μνήμη σε μέγεθος και με ποιά δομή δεδομένων υλοποιείται;
- changelog.php ( 6 μέθοδοι ) Λειτουργικότητα σχετική με το ημερολόγιο αλλαγών που διατηρεί το dokuwiki για κάθε σελίδα.
- cliopts.php ( 3 κλάσεις και 17 μέθοδοι ) Βασίζεται στην pearl βιβλιοθήκη Console_Getopt η οποία παρέχει λειτουργικότητα χειρισμού παραμέτρων σε command line interface κλήσης php σεναρίων. Πχ μπορούμε σαν μέρος του ιστοτόπου μας να έχουμε δημιουργήσει και ένα σενάριο για να κάνουμε λήψη αντιγράφων ασφαλείας το οποίο θα καλούμε από γραμμή εντολών. Στην περίπτωση αυτή η βιβλιοθήκη αυτή θα μας βοηθήσει να κάνουμε λήψη και ανάλυση των παραμέτρων της γραμμής εντολών.
- common.php ( 45 μέθοδοι ) Πρόκειται για βασική λειτουργικότητα που είναι χρήσιμη σε πολλά μέρη του dk ιστοτόπου.
- confutils.php ( 10 μέθοδοι ) Συλλογή πληροφοριών από αρχεία διαμόρφωσης.
- DifferenceEngine.php (13 κλάσεις και 64 μέθοδοι ) Λειτουργικότητα δημιουργίας οθόνης διαφορών ανάμεσα σε διαφορετικές εκδόδεις μιας σελίδας.
- events.php ( 2 κλάσεις και 10 μέθοδοι ) Πολύ κομβική λειτουργικότητα που αποτελεί τον πηρύνα του χειρισμού γεγονότων στο dk.
- feedcreator.class.php ( κλάσεις και μέθοδοι )
- FeedParser.php (2 κλάσεις και 6 μέθοδοι )
- form.php ( κλάσεις και μέθοδοι )
- fulltext.php ( κλάσεις και μέθοδοι )
- geshi.php ( κλάσεις και μέθοδοι )
- html.php ( κλάσεις και μέθοδοι )
- HTTPClient.php ( 2 κλάσεις και 11 μέθοδοι ) Υλοποίηση ενός πελάτη http.
- indexer.php ( κλάσεις και μέθοδοι )
- infoutils.php ( 8 μέθοδοι ) Συναρτήσεις πληροφοριακές και αποσφαλμάτωησης
- init.php ( κλάσεις και μέθοδοι )
- io.php ( κλάσεις και μέθοδοι )
- IXR_Library.php ( κλάσεις και μέθοδοι )
- JpegMeta.php ( 1 κλάση και 57 μέθοδοι ) Λειτουργικότητα χειρισμού jpeg γραφικών
- JSON.php ( κλάσεις και μέθοδοι )
- mail.php ( 5 μέθοδοι ) Συναρτήσεις ηλεκτρονικού ταχυδρομίου
- media.php ( κλάσεις και μέθοδοι )
- pageutils.php ( κλάσεις και μέθοδοι )
- parserutils.php ( κλάσεις και μέθοδοι )
- plugin.php ( κλάσεις και μέθοδοι )
- pluginutils.php ( 5 μέθοδοι ) Συναρτήσεις βοηθητικές
- search.php ( 15 μέθοδοι ) Συναρτήσεις αναζήτητης
- SimplePie.php ( 18 κλάσεις και 300 μέθοδοι ) Βιβλιοθήκη που προσφέρει RSS λειτουργικότητα.
- TarLib.class.php ( κλάσεις και μέθοδοι )
- template.php ( 27 μέθοδοι ) Συναρτήσεις προτύπων.
- toolbar.php ( 2 μέθοδοι ) Συναρτήσεις σχετικές με την εργαλειοθήκη που εμφανίζεται κατά την επεξεργασία μιας σελίδας.
- utf8.php ( 1 κλάση με 8 μεθόδους και 25 μέθοδοι ) Συναρτήσεις χειρισμού utf8 αλφαρηθμητικών.
- ZipLib.class.php ( κλάσεις και μέθοδοι )
Λεξιλόγιο
[επεξεργασία]- breadcrumbs: Κυριολεκτικά σημαίνει ψίχουλα , αλλά στο dk αναφέρεται στη δυνατότητα που παρέχεται να βλέπεις ιστορικό των σελίδων που έχεις επισκεφτεί