Ergebnis 1 bis 4 von 4

Thema: PHP - Videos dynamisch mit Schleife einbinden

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #3
    Noch ein paar Tipps:
    1. Gebe der Variablen sprechende Namen, wofür sie dienen. Das dient zur besseren Verständnis des Codes.
    2. Wenn du eine Variable definieren willst, die aber nur an einer einzigen Stelle und nicht wesentlich zur besseren Verständnis des Codes benötigt wird, dann lass sie weg.
    3. Das "an- und ausknipsen" lässt sich besser mit der Funktion sprintf "umgehen". Es soll verhindern, dass php und HTML-Code vermischt werden. So eine Vermischung wendet man eigentlich nur an, wenn man eine Art Template-System besitzt, also wenn man eine reine HTML-Datei verwendet und Platzhalter mit php gefüllt werden sollen.
    4. sog. Magic Numbers (deine Breite und Höhe für das Video) als konstanten ablegen. Magic Numbers heißen nicht umsonst so, weil keiner so richtig nachvollziehen kann, woher sie eigentlich stammen. Als Konstante haben dann diese Zahlen sprechende Namen.
    5. Kapsel die Logik von der View. Es ist schlechter Stil, wenn Logik und View vermischt werden. Daher baue eine Funktion, die dir den HTML-Teil als String zurückgibt.


    Wenn man das alles berücksichtigt, dann sieht der Code in etwa so aus:

    PHP-Code:
    <?php
        define
    ("VIDEO_WIDTH"640);
        
    define("VIDEO_HEIGHT"480);

        echo 
    getHtmlVideoTags('content.txt''|'VIDEO_WIDTHVIDEO_HEIGHT);

        function 
    getHtmlVideoTags($filename$separator$videoWidth$videoHeight)
        {
            
    $result '';
            foreach(
    file($filename) as $line)
            {
                foreach(
    explode($separator$line) as $videoUrl)
                {
                    return 
    getHtmlVideoTag($videoUrl$videoWidth$videoHeight);
                }
            } 

            return 
    $result;
        }

        function 
    getHtmlVideoTag($videoUrl$videoWidth$videoHeight)
        {
            return 
    sprintf('<video src="%s" width="%d" height="%d"></video>'$videoUrl$videoWidth$videoHeight);
        }
    ?>
    Wenn meine php-Kenntnisse noch stimmen, sollte es so richtig sein. Ich habs aber nicht getestet.
    Der Vorteil bei der Abkapselung ist halt, dass der HTML-Teil nun wiederverwendbar ist, falls du irgendwo weitere Videos mit einer anderen Auflösung einbinden möchtest.
    Theoretisch könnte man sogar noch anfangen und den String <video src="%s" width="%d" height="%d"></video> in eine eigene Datei auszulagern, sodass man alle HTML-Teile in einer zentralen Datei sammelt.
    Man könnte auch noch weiterspinnen und die Funktion getHtmlVideoTags in zwei Funktionen aufzusplitten. Also so:

    PHP-Code:
    <?php
        define
    ("VIDEO_WIDTH"640);
        
    define("VIDEO_HEIGHT"480);

        echo 
    getHtmlVideoTagsByFile('content.txt''|'VIDEO_WIDTHVIDEO_HEIGHT);

        function 
    getHtmlVideoTagsByFile($filename$separator$videoWidth$videoHeight)
        {
            
    $result '';
            foreach(
    file($filename) as $line)
            {
                
    $result .= getHtmlVideoTags(explode($separator$line), $videoWidth$videoHeight);       
            }

            return 
    $result;
        }

        function 
    getHtmlVideoTags($videoUrls$videoWidth$videoHeight)
        {
            
    $result '';
            foreach(
    $videoUrls as $videoUrl)
            {
                
    $result .= getHtmlVideoTag($videoUrl$videoWidth$videoHeight);
            } 

            return 
    $result;
        }

        function 
    getHtmlVideoTag($videoUrl$videoWidth$videoHeight)
        {
            return 
    sprintf('<video src="%s" width="%d" height="%d"></video>'$videoUrl$videoWidth$videoHeight);
        }
    ?>
    Achso und lasse das <br/><br/> weg. Den Abstand zwischen den Video-Elementen konfigurierst du dann mit CSS. Ein Abstand mittels <br/><br/> zu erzeugen, ist eine der Todsünden.

    Ich weiß auch, dass mein Code länger und vielleicht auch zuerst komplizierter aussieht, aber es hilft ungemein Code-Fragmente wiederzuverwenden, wenn die Funktionen nur eine Sache übernehmen. Das ist ein Teilaspekt des sog.Single-Responsibility-Prinzips

    Edit:
    Eine schnellere Variante als sprintf ist wohl die sog. Double-Quote-Variante:
    PHP-Code:
        function getHtmlVideoTag($videoUrl$videoWidth$videoHeight)
        {
            return 
    "<video src=\"$videoUrl\" width=\"$videoWidth\" height=\"$videoHeight\"></video>";
        } 
    php hat nämlich die Eigenheit, dass Strings, die in doppelten Hochkommata stehen, analysiert und ggf. Variablen eingesetzt werden. Dadurch spart man sich die mühselige Konkatenierung, die Cepanks in seiner dritten Lösung vorgeschlagen hat, aber sie hat den Nachteil, dass doppelte Hochkommata im String escaped werden müssen, was die Lesbarkeit verschlechtert.

    Geändert von Whiz-zarD (25.10.2015 um 02:30 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •