Πίσω στο Portfolio
Μεσογειακό — Κέντρο Επαγγελματικής Κατάρτισης & Custom CMS

Μεσογειακό — Κέντρο Επαγγελματικής Κατάρτισης & Custom CMS

Το Μεσογειακό είναι αδειοδοτημένο κέντρο δια βίου μάθησης και επαγγελματικής κατάρτισης στη Θεσσαλονίκη, και η ιστοσελίδα του είχε μεγαλώσει πάνω σε WordPress και στο page builder του BeTheme. Η ανακατασκευή κρατά όλο το περιεχόμενο και τίποτα από την πλατφόρμα. Είναι καθαρή PHP 8.5 πάνω σε MySQL — ένας front controller, ένας autoloader δεκαπέντε γραμμών, χωρίς framework, χωρίς Composer και χωρίς build — περίπου πέντε χιλιάδες γραμμές κώδικα και δύο χιλιάδες templates. Τα ελληνικά είναι η προεπιλογή και τα αγγλικά βρίσκονται κάτω από το /en/, και η ισοτιμία των δύο γλωσσών είναι δομική, όχι πρόσθετη: κάθε έργο, νέο και σελίδα είναι μια εγγραφή με μία γραμμή μετάφρασης ανά γλώσσα, τα slugs ζουν στη μετάφραση ώστε οι ελληνικές σελίδες να κρατούν ελληνικά URL, και μια τρίτη γλώσσα δεν θα χρειαζόταν καμία αλλαγή στο σχήμα της βάσης. Η μετάπτωση είναι κώδικας, όχι μια εφάπαξ εξαγωγή. Είκοσι ένα διατεταγμένα, επαναλήψιμα βήματα ξαναχτίζουν ολόκληρο το site από την πηγή του WordPress — διαβάζουν το περιεχόμενο του Muffin Builder, αφαιρούν τα τυποποιημένα κείμενα, κανονικοποιούν τις επικεφαλίδες, ενώνουν τα διπλά νέα, βγάζουν σε αρχεία τις ενσωματωμένες εικόνες data-URI — και μεταφέρουν 33 έργα, 90 νέα και 20 σελίδες και στις δύο γλώσσες, με 798 ανακατευθύνσεις ώστε οι παλιοί σύνδεσμοι να οδηγούν στις νέες τους σελίδες. Κάθε εικόνα της βιβλιοθήκης είναι WebP κάτω από 200 KB: η ποιότητα κατεβαίνει από 82 σε 40, έπειτα οι διαστάσεις μικραίνουν μέχρι να χωρέσει, και το πρωτότυπο διαγράφεται. Η διαχείριση δίνει στο κέντρο τα έργα, τα νέα και τις σελίδες του και στις δύο γλώσσες με TinyMCE, βιβλιοθήκη πολυμέσων, στοιχεία επικοινωνίας, και τους μετρητές και τα μπλοκ της αρχικής. Τα δομημένα δεδομένα φέρουν την ταχυδρομική διεύθυνση, τον αριθμό Γ.Ε.ΜΗ. και το ωράριο — τρία στοιχεία που το παλιό site δημοσίευε σε ένα widget του footer του θέματος, όπου καμία ανάρτηση και κανένας importer δεν μπορούσε να τα δει.

Τεχνολογίες

PHP 8.5 MySQL Vanilla JS GSAP TinyMCE 7 WebP pipeline (GD) i18n (EL/EN) SEO WordPress migration

Προκλήσεις

Το WordPress είχε κρύψει ορισμένα στοιχεία. Η ταχυδρομική διεύθυνση, ο αριθμός Γ.Ε.ΜΗ. και το ωράριο βρίσκονταν σε ένα widget του footer του θέματος και όχι σε κάποια ανάρτηση, οπότε μια εξαγωγή περιεχομένου δεν τα έβλεπε ποτέ, και ο δεύτερος αριθμός τηλεφώνου διέφερε σε τρία σημεία του παλιού site. Τα ελληνικά URL χαλούσαν επίσης τον προφανή σχεδιασμό της βάσης: κωδικοποιημένα με percent-encoding ξεπερνούν συχνά τους 191 χαρακτήρες μοιράζοντας μεγάλα προθέματα, οπότε ένα index προθέματος απορρίπτει πραγματικά διαφορετικές διευθύνσεις ως διπλές. Και ένας δίγλωσσος editor έχει μια σιωπηλή αστοχία — μια αποθήκευση που παραλείπει μία γλώσσα δεν ξεχωρίζει από κάποιον που τη σβήνει σκόπιμα.

Λύσεις

Κάθε διόρθωση είναι δικό της αριθμημένο βήμα μετάπτωσης, οπότε ένα καθαρό ξαναχτίσιμο από το WordPress αναπαράγει τον αριθμό τηλεφώνου που επιβεβαίωσε ο πελάτης και τη διεύθυνση που ανακτήθηκε, αντί να εισάγει ξανά τα παλιά λάθη. Οι ανακατευθύνσεις είναι μοναδικές σε ένα hash SHA-256 της παλιάς διαδρομής αντί για πρόθεμα. Κάθε τμήμα αρχείου επιλύεται μόνο στη γλώσσα του, ώστε ένα στοιχείο να μην ζει σε δύο URL και να μοιράζει τη δική του κατάταξη. Κάθε φόρμα μετάφρασης στέλνει έναν δείκτη παρουσίας ανά γλώσσα — αυτό επιτρέπει σε μια γλώσσα που λείπει να σημαίνει «ανέγγιχτη» και όχι «διαγραφή» — και το admin smoke suite έχει τεστ παλινδρόμησης γι' αυτό. Τα ονόματα αρχείων κανονικοποιούνται σε NFC πριν τη μεταγραφή, επειδή το macOS και το Linux αποθηκεύουν το ίδιο ελληνικό όνομα με διαφορετικά bytes.