Tilbage til portfolio
Mesogeiako — Erhvervsuddannelsescenter & specialbygget CMS

Mesogeiako — Erhvervsuddannelsescenter & specialbygget CMS

Mesogeiako er et godkendt center for livslang læring og erhvervsuddannelse i Thessaloniki, og sitet var vokset op på WordPress og BeThemes page builder. Genopbygningen beholder alt indholdet og intet af platformen. Den er ren PHP 8.5 på MySQL — en front controller, en autoloader på femten linjer, intet framework, ingen Composer og intet build — omkring fem tusind linjer kildekode og to tusind linjer skabeloner. Græsk er standard, og engelsk ligger under /en/, og ligestillingen mellem sprogene er strukturel frem for eftermonteret: hvert projekt, hver nyhed og hver side er en række med én oversættelsesrække pr. sprog, slugs ligger på oversættelsen, så græske sider beholder græsk-afledte URL'er, og et tredje sprog ville ikke kræve nogen skemaændring. Migreringen er kode, ikke en engangseksport. Enogtyve ordnede, gentagelige trin genopbygger hele sitet fra WordPress-kilden — de læser Muffin Builder-indholdet, fjerner standardtekst, normaliserer overskrifter, fletter dublerede nyheder og trækker indlejrede data-URI-billeder ud i filer — og flytter 33 projekter, 90 nyheder og 20 sider over på begge sprog, med 798 omdirigeringer, så gamle links lander på deres nye sider. Hvert billede i mediebiblioteket er en WebP under 200 KB: kvaliteten trappes ned fra 82 til 40, derefter skrumper dimensionerne, indtil det passer, og originalen slettes. Adminen giver centret dets projekter, nyheder og sider på begge sprog i TinyMCE, et mediebibliotek, kontaktoplysninger samt forsidens tællere og blokke. De strukturerede data rummer postadresse, virksomhedsregistreringsnummer og åbningstider — tre oplysninger, som det gamle site offentliggjorde i en footer-widget i temaet, hvor intet indlæg og ingen importer kunne se dem.

Teknologier

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

Udfordringer

WordPress havde gemt nogle af fakta. Postadressen, virksomhedsregistreringsnummeret og åbningstiderne lå i en footer-widget i temaet i stedet for i et indlæg, så en indholdseksport så dem aldrig, og det andet telefonnummer modsagde sig selv tre steder på det gamle site. Græske URL'er brød også det oplagte databasedesign: procentkodede løber de jævnligt over 191 tegn med lange fælles præfikser, så et præfiksindeks afviser reelt forskellige adresser som dubletter. Og en tosproget editor har en stille fejltilstand — en gemning, der udelader ét sprog, kan ikke skelnes fra en, der bevidst tømmer det.

Løsninger

Hver rettelse er sit eget nummererede migreringstrin, så en frisk genopbygning fra WordPress gengiver det telefonnummer, kunden har bekræftet, og den genfundne adresse i stedet for at genimportere de gamle fejl. Omdirigeringer er unikke på en SHA-256-hash af den gamle sti frem for et præfiks. Hvert arkivsegment opløses kun på sit eget sprog, så et element ikke lever på to URL'er og deler sin egen placering. Hver oversættelsesformular sender en tilstedeværelsesmarkør pr. sprog — det er den, der lader et manglende sprog betyde »urørt« frem for »slet« — og adminens smoke-testsuite har en regressionstest for det. Filnavne NFC-normaliseres før translitteration, fordi macOS og Linux gemmer det samme græske navn som forskellige bytes.