Projekte

Cykelfærgen Flensborg Fjord

Web design / development & SoMe marketing

Tech: HTML, CSS, JS, PHP, MySQL

Die Fahrradfähre Flensburger Förde hat einen neuen Webmaster gesucht der ihre Webseite überarbeiten und regelmässig aufdem laufenden halten konnte.

Cykelfærgen Flensborg Fjord

Beskrivelse

I slutning af 2019 overtog jeg opgaven som webmaster hos cykelfærgen Flensborg fjord. Jeg besluttede mig at for udvikle den nye hjemmeside i PHP, det giver mig muligheden af at have filerne for de forskellige sprog dansk, tysk og engelsk.

Designet skulle være moderne, responsive samt skabe mere

Borgere på hhv Broagerland og på tysk side har de seneste 30 år skiftevis forsøgt at genoplive drømmen om færgesejlads på Flensborg Fjord, uden dog at kunne trænge helt igennem med deres projekt.

Hvorfor valgte jeg PHP

Det gjorte jeg på baggrund af at jeg gerne ville have en dynamisk hjemmeside. Som kunne render indhold baserende på sprog valg og hvor jeg kunne inkludere andre filer som der kan have specific indhold. Jeg ville også gerne have at hjemmesiden skulle kunne hente data fra en database, som jeg kunne opdatere og vedligeholde, sammentidligt skulle det indhold, som f.eks. deres sejlplan, Server-Side renderes for SEO optimereing.

Sejlplan Funktion

Det senest optimering som jeg fik udviklet på hjemmesiden, er et nyt design for sejlplanen. Jeg fik om struktueret databasen nyt for at kunne håndteren forskellige sejlplaner, både og havne.
Jeg fik også udviklet en ny funktion som gør det muligt at hente sejlplanen for en specifik rute, og vise den på hjemmesiden. Ved hentning af sejlplanen, laver jeg flere INNER JOINs på databasen, for at kunne hente alle de nødvendige informationer, så som færgen på ruten, ruten, gyldigheden af sejlplanen samt alle havne med ens tilsvarende afgang.

<?php
    function Timetable($route){
        $title = "Sejlplan";
        $currentDate = date("Y-m-d");
        /* Getting the route & the stops */
        $sql = "SELECT 
            fs.route_id,
            fn.ferry_name,
            ferry_route.days,
            fs.departure_harbor, 
            fs.arrival_harbor,
            ferry_route.id AS ferryRouteId,
            ferry_route.active_from AS active_from,
            ferry_route.active_to AS active_to,
            ferry_route.name AS routeName,
            departure_harbor.name AS departure_harborName,
            arrival_harbor.name AS arrival_harborName,
            fs.id AS fs_id,
            GROUP_CONCAT(fs.departure_time ORDER BY fs.departure_time SEPARATOR ', ') AS departure_times,
            GROUP_CONCAT(fs.arrival_time ORDER BY fs.arrival_time SEPARATOR ', ') AS arrival_times,
            GROUP_CONCAT(route_active_date.active_from ORDER BY route_active_date.active_from SEPARATOR ', ') AS active_date_from,
            GROUP_CONCAT(route_active_date.active_to ORDER BY route_active_date.active_to SEPARATOR ', ') AS active_date_to,
            price.price_dkk AS price_dkk,
            price.price_euro AS price_euro
        FROM 
            timetable fs
        INNER JOIN
            routes ferry_route ON fs.route_id = ferry_route.id
        INNER JOIN
            ferries fn ON ferry_route.ferry = fn.id
        INNER JOIN
            harbor departure_harbor ON (fs.departure_harbor = departure_harbor.id)
        INNER JOIN
            harbor arrival_harbor ON (fs.arrival_harbor = arrival_harbor.id)
        INNER JOIN 
            route_active_date ON ferry_route.id = route_active_date.route_id
        INNER JOIN
            ticket_prices price ON ferry_route.id = price.route_id
        WHERE
            ferry_route.display_to >= '$currentDate'
        AND
            ferry_route.display_from <= '$currentDate'
        AND
            ferry_route.name = '$route'
        OR
            ferry_route.id = '$route'
        AND
            ferry_route.display_to >= '$currentDate'
        AND
            ferry_route.display_from <= '$currentDate'
        GROUP BY
            fs.departure_harbor, 
            fs.arrival_harbor
        ORDER BY
            departure_times,
            departure_harborName
        DESC";
        ...
        echo '
        <section>
            <h2 class="timetable-heading">'.$title.'</h2>
        </section>
        ';

    }
?>

ER-Diagram til Sejlplanen

Forbedring til SQL selction

For at forbedre koden og SQL selction af en rute kunne jeg lave et view i databasen og lave en SELECT på dette view.

Database Struktur

Strukturen på databasen er sådan at jeg har en tabel for havne, en tabel for sejlplanen og en tabel for ruter. Med denne struktur kan jeg nemt og hurtigt tilføje nye sejlplaner og havne. Sejlplanen tabellen indeholder alle afgange og ankomster for alle ruter, ruten kollonden har en foreign key som peger på havne tabellen´s.

Reklame video

Jeg fik produceret en lille reklamevideo for cykelfærgen. Med denne klip er intentionen at bygge og skabe mere opmærksomhed.