Ankündigung

Einklappen
Keine Ankündigung bisher.

Effiziente Umsetzung eines Schul&Event Kalenders

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Effiziente Umsetzung eines Schul&Event Kalenders

    Hallo,

    ich habe derzeit einen Kalender geschrieben, der jeweils für das aktuelle Halbjahr alle Tage inklusive Wochentagsabkürzung ausgibt.
    Dazu dient eine Datenbank "Ferien" als hinterlegte Anfangs und Endangabe zum anzeigen der Ferien. Weiter habe ich einen Algorithmus für den Ostersonntag geschrieben und alle für das Bundesland hier notwendigen Feiertage in einem Array gespeichert.

    Es gibt für die Ferien mehrere nutzbare Arrays:
    $Monat_Anfang
    $Monat_Ende
    $Tag_Anfang
    $Tag_Ende

    Jeweils ist auf selber Position in welchem Monat die Ferien beginnen und wann sie enden (Analog der Tag).

    Nun prüfe ich für jeden Wochentag, ob der Monat davon Feiertage oder Ferien enthält (effizienter wäre hier für jeden Monat zu prüfen..aber davon mal abgesehen.)

    Die Ausgabe der Ferien gelingt schnell. Füge ich nun Tests für die Feiertage oder Wochenenden hinzu explodiert die Zeitnutzung..

    Als weiteren Ansatz hatte ich versucht jedem Wochentag eine ID zuzuweisen, die aus dem Monat (ausgeschrieben) und dem Tagesdatum ohne führende 0 besteht. Also für den 1. Januar 2014 einfach: Januar1

    Daraufhin wollte ich über verschachtelte For-Schleifen und If-Abfragen über CSS eine Hintergrundfarbe definieren. Hierbei bricht das Laden der Seite dann allerdings ab. Ich nutze CSS innerhalb von PHP. Ich stelle nun nachfolgend die zweite Methode zur Verfügung. Am Ende notiere ich dann nochmal, was mein Ziel mit diesem Kalender ist.

    Die SQL-Einträge: Ferien.sql

    Erzeugung des Kalenders:
    PHP-Code:
    <?php
    include_once('./Kalender/Kalender_Setup.php');
    include_once(
    './Kalender/Ferien.php');

    <
    div id="Kalender">
    <
    table id="Kalender-Tabelle">
        <
    tr id="Kalender-Zeile">
    <?
    php 
        
    if($Halbjahr == 1){$Erster_Monat 8;}else{$Erster_Monat 2;}
        
    $Letzter_Monat $Erster_Monat +5;
        for(
    $k=$Erster_Monat$k <= $Letzter_Monat$k++){
            echo 
    '<td style="width: 145px; margin-left: 5px"><p id="Kalender-MonatText">';
            if(
    $k==13){
                
    $m=1;
            }else{
                
    $m=$k;
            }
            echo 
    $Monat[$m];
            echo 
    '</p></td>';
        }
    ?>
        </tr>
        <tr id="Kalender-Zeile">
            <?php 
                
    for($monat=$Erster_Monat$monat <= $Letzter_Monat$monat++){
                    if(
    $monat==13){$monate=1;$jahr=$jahr+1;}else{$monate=$monat;}
            
    ?>    
            <td>        
                        <?php 
                            $anz_tage 
    date("t"mktime(0,0,0,$monate,1,$jahr));
                            for(
    $tage=1$tage<= $anz_tage$tage++ ){
                                
    $wochentag=date("D"mktime(0,0,0,$monate,$tage,$jahr));
                                
    ?>                            
                                <div class="Wochentage-Div <?php include'./Kalender/Ferien.php';?>">
                                <?php 
                                
    print $Wochen_Tage_kurz[$wochentag] . '<br>'
                                print 
    $tage.'.';
                                
    ?>
                                </div>
                                <div <?php echo 'id="' $Monat[$monate] . $tage '"'?> class="Wochentage-Beschreibung"  
                                >
                                
                                </div>
                                <?php 
                            
    }
                        
    ?>
            </td>
            <?php ?>
        </tr>
    </table>
    </div>
    Die Konfiguration des Kalenders: Kalender_Setup.php
    PHP-Code:
    <?php
    date_default_timezone_set
    ('Europe/Berlin');
    $akt_jahr date('Y');
    $jahr $akt_jahr;
    $akt_monat date("n");
    $HintergrundFarbe_Frei "#FFC";
    $HintergrundFarbe_Event "#D2D2D2";


    //if(isset($_GET['jahr'])) { $jahr = max($akt_jahr,intval($_GET['jahr'])); } else { $jahr = $akt_jahr; }
    if( (!isset($_GET['monat'])) || ( (isset($_GET['monat'])) && ($_GET['monat']==0) ) ){
        if(
    $akt_monat && $akt_monat 2){
            
    $Halbjahr=2;
        }else{
            
    $Halbjahr=1;
        }
    }

    /*
     * Passe das Jahr entsprechend der Anzahl der Klicks an
     */
    if(isset($_GET['Monat'])){
        
    $Schritt $_GET['Monat'];
    }else{ 
    $Schritt 0; }

    if(        (
    $Schritt 0) && ($Schritt ==1) )                        { $jahr $jahr floor((1+$Schritt)/2); $Halbjahr=2;}
    elseif( (
    $Schritt 0) && ($Schritt == 0) )                        { $jahr $jahr floor($Schritt/2); $Halbjahr =1;}
    elseif( (
    $Schritt 0) && (($Schritt) % == 0))                    { $jahr $jahr ceil($Schritt/2); $Halbjahr=1;}
    elseif( (
    $Schritt 0) && (abs($Schritt 2) ==1))                    { $jahr $jahr ceil($Schritt/2); $Halbjahr=2;}

    /* Ferien */
    $Sommerferien = array("Tag""Monat""Jahr""Tag""Monat""Jahr");
    $Winterferien = array("Tag""Monat""Jahr","Tag""Monat""Jahr");
    $Weihnachtsferien = array ("Tag""Monat""Jahr""Tag""Monat""Jahr");
    $Oserferien = array ("Tag""Monat""Jahr""Tag""Monat""Jahr");
    $Pfingstferien = array ("Tag""Monat""Jahr""Tag""Monat""Jahr");
    $Herbstferien = array ("Tag""Monat""Jahr""Tag""Monat""Jahr");

    /* Feiertage */
            // Berechnung des Ostersonntags
            // Säkularzahl
            
    $K floor($jahr 100);
            
    // säkulare Mondschaltung
            
    $M 15 floor(($K 3) / 4) - floor(($K 13) / 25);
            
    // säkulare Sonnenschaltung
            
    $S floor(($K 3) / 4);
            
    // Mondparameter
            
    $A $jahr 19;
            
    // Keim für den ersten Vollmond im Frühling
            
    $D = (19 $A $M) % 30;
            
    // kalendarische Korrekturgröße
            
    $R floor(($D floor($A 11)) / 29);
            
    // Ostergrenze
            
    $OG 21 $D $R;
            
    // Ersten Sonntag im März
            
    $SZ - ($jahr floor($jahr $S)) % 7;
            
    // Osterentfernung in Tagen
            
    $OE - ($OG $SZ) % 7;
            
    // Ostersonntag als Märzdatum (32. März = 1. April usw.)
            
    $OS=$OG $OE;

    /* Feiertage als Arrays
     * ( Tag, Monat ), Jahr ist bekannt ($jahr).
     */
    $Ostersonntag = array(
        
    "Tag" => date("d"mktime(0,0,0,3,$OS,$jahr)),
        
    "Monat" => date("n"mktime(0,0,0,3,$OS,$jahr))
    );
    $Karfreitag = array(
        
    "Tag" => date("d"mktime(0,0,0,3,$OS-2,$jahr)),
        
    "Monat" => date("n"mktime(0,0,0,3,$OS-2,$jahr))
    );
    $Ostermontag = array(
        
    "Tag" => date("d"mktime(0,0,0,3,$OS+1,$jahr)),
        
    "Monat" => date("n"mktime(0,0,0,3,$OS+1,$jahr))
    );
    $Himmelfahrt= array(
        
    "Tag" => date("d"mktime(0,0,0,3,$OS+39,$jahr)),
        
    "Monat" => date("n"mktime(0,0,0,3,$OS+39,$jahr))
    );
    $Pfingstsonntag = array(
        
    "Tag" => date("d"mktime(0,0,0,3,$OS+49,$jahr)),
        
    "Monat" => date("n"mktime(0,0,0,3,$OS+49,$jahr))
    );
    $Pfingstmontag = array(
        
    "Tag" => date("d"mktime(0,0,0,3,$OS+50,$jahr)),
        
    "Monat" => date("n"mktime(0,0,0,3,$OS+50,$jahr))
    );
    $Neujahr = array(
        
    "Tag" => "1",
        
    "Monat" => "1"
    ); 
    $Deutsche_Einheit = array(
        
    "Tag" => "3",
        
    "Monat" => "10"
    );
    $Weihnachtsfeiertag_1 = array(
        
    "Tag" => "25",
        
    "Monat" => "12"
    );
    $Weihnachtsfeiertag_2 = array(
        
    "Tag" => "26",
        
    "Monat" => "12"
    );
    $Tag_der_Arbeit = array(
        
    "Tag" => "1",
        
    "Monat" => "5"
    );

    $Feiertag_Monat = array (
            
    $Ostersonntag["Monat"], 
            
    $Ostermontag["Monat"], 
            
    $Karfreitag["Monat"], 
            
    $Himmelfahrt["Monat"],
            
    $Pfingstsonntag["Monat"], 
            
    $Pfingstsonntag["Monat"], 
            
    $Neujahr["Monat"],
            
    $Deutsche_Einheit["Monat"],
            
    $Weihnachtsfeiertag_1["Monat"],
            
    $Weihnachtsfeiertag_2["Monat"],
            
    $Tag_der_Arbeit["Monat"]
    );

    $Feiertag_Tag = array(
            
    $Ostersonntag["Tag"],
            
    $Ostermontag["Tag"],
            
    $Karfreitag["Tag"],
            
    $Himmelfahrt["Tag"],
            
    $Pfingstsonntag["Tag"],
            
    $Pfingstmontag["Tag"],
            
    $Neujahr["Tag"],
            
    $Deutsche_Einheit["Tag"],
            
    $Weihnachtsfeiertag_1["Tag"],
            
    $Weihnachtsfeiertag_2["Tag"],
            
    $Tag_der_Arbeit["Tag"]
    );

    $Feiertag_Name = array(
            
    "Ostersonntag",
            
    "Ostermontag",
            
    "Karfreitag",
            
    "Himmelfahrt",
            
    "Pfingstsonntag",
            
    "Pfingstmontag",
            
    "Neujahr",
            
    "Tag der deutschen Einheit",
            
    "Erster Weihnachtsfeiertag",
            
    "Zweiter Weihnachtsfeiertag",
            
    "Tag der Arbeit"
    );

    /*
     * Ferien
     */
    include_once("./verwaltung/db.php");

    $sql "SELECT Jahr as jahr, Sommer_Anfang as SA, Sommer_Ende as SE, Winter_Anfang as WA, Winter_Ende as WE, Herbst_Anfang as HA, Herbst_Ende as HE, Ostern_Anfang as OA, Ostern_Ende as OE, Weihnachten_Anfang as XA, Weihnachten_Ende as XE, Pfingsten_Anfang as PA, Pfingsten_Ende as PE FROM ferien ORDER BY jahr";
    $ferien mysqli_query($con$sql);
    $Ferien = array();
    while (
    $row mysqli_fetch_assoc($ferien)){$Ferien[] = $row;}

    /*
     * Erzeuge den Array mit allen Feriendaten aus der Datenbank für das ausgewählte Jahr
    */
    $Ferienzeit=array();
    foreach(
    $Ferien as $Ferien){
        if(
    $Ferien['jahr']==$jahr){
            foreach(
    $Ferien as $Feriendato){
                
    $Ferienzeit[]=$Feriendato;
            }
        }
    }

    /*
     * Lösche das Feld "Jahr"
    */
    array_splice($Ferienzeit01);

    /*
     * Initialisiere die Arrays für die Monate und Tage
    * -> Einfachere Weiterarbeit für den Kalender
    */
    $Ferienzeit_Monat = array();
    $Ferienzeit_Tag = array();

    foreach(
    $Ferienzeit as $Ferienzeit){
        list(
    $dummy$monat$tag) = explode("-"$Ferienzeit);
        
    $Ferienzeit_Monat[]=date("n"mktime(0,0,0,$monat,$tag,$dummy));
        
    $Ferienzeit_Tag[] = date("j"mktime(0,0,0,$monat,$tag,$dummy));
    }
    /*
     * Schließe die Datenbankverbindung
    */
    $con -> close();

    /*
     * Initialisiere die Ferienbezeichnungen
    */
    $Ferienzeit_Name = array(//
            
    => "Sommerferien",
            
    => "Winterferien",
            
    => "Herbstferien",
            
    => "Osterferien",
            
    => "Weihnachtsferien",
            
    => "Pfingstferien"
    );




    /* Vorbereitung des Kalenders
     * Monatsnamen und Wochentage auf Deutsch
     */
    $Monat= array(
            
    => "Januar",
            
    => "Februar"
            
    => "März"
            
    => "April"
            
    => "Mai"
            
    => "Juni"
            
    => "Juli"
            
    => "August"
            
    => "September",
            
    10 => "Oktober",
            
    11 => "November",
            
    12 => "Dezember");

    $Wochen_Tage= array(
            
    "Sun" => "Sonntag",
            
    "Mon" => "Montag",
            
    "Tue" => "Dienstag",
            
    "Wed" => "Mittwoch",
            
    "Thu" => "Donnerstag",
            
    "Fri" => "Freitag",
            
    "Sat" => "Samstag");
    $Wochen_Tage_kurz= array(
            
    "Sun" => "So",
            
    "Mon" => "Mo",
            
    "Tue" => "Di",
            
    "Wed" => "Mi",
            
    "Thu" => "Do",
            
    "Fri" => "Fr",
            
    "Sat" => "Sa");
    ?>
    Die CSS-Konfiguration: Ferien.php
    PHP-Code:
    <style type="text/css">
    <?php 
    /*    Vorhandene Variablen
     *     $jahr, $akt_jahr
     * $Ferienzeit_Monat[] size=12
     * $Ferienzeit_Tag[]    size=12
     * $Ferienzeit_Name[]    size=6
     */

    for($mon=0$mon<=5$mon++){
        for(
    $t=0$t<=5$t++){
            
    $Monat_A $Ferienzeit_Monat[2*$mon];
            
    $Monat_B $Ferienzeit_Monat[2*$mon+1];
            
    $Tag_A $Ferienzeit_Tag[2*$t];
            
    $Tag_B $Ferienzeit_Tag[2*$t+1];
            
            if( (
    $Monat_B-1) ==){$Diff=12;}else{$Diff=$Monat_B-1;}
            
            if(
    $Monat_A == $Monat_B){
                for( 
    $t=$Tag_A$t <= $Tag_B$t++ ){
                    echo 
    '#' $Monat[$Monat_A] . $t '{ background-color: <?php echo $HintergrundFarbe_Frei;?>; }';     
                }
            }
            elseif(
    $Monat_A == $Diff ){
                
    $anz_tage_A date("t"mktime(0,0,0,$Monat_A,1,$jahr));
                
                for(
    $t=$Tag_A$t=$anz_tage_A$t++){
                    echo 
    '#' $Monat[$Monat_A] . $t '{ background-color: <?php echo $HintergrundFarbe_Frei;?>; }'
                }
                if(
    $Monat_B==1){ $jahr=$jahr+1;}
                for(
    $t=1$t=$Tag_B$t++){
                    echo 
    '#' $Monat[$Monat_B] . $t '{ background-color: <?php echo $HintergrundFarbe_Frei;?>; }'
                }
            }
            elseif( (
    $Monat_A != $Diff) && ($Monat_A != $Monat_B) ){
                
    $anz_tage_A date("t"mktime(0,0,0,$Monat_A,1,$jahr));
                
    $anz_tage date("t"mktime(0,0,0,$Monat_A+1,1,$jahr));
                
    $Monat_D=$Monat_A 1;
                
                for(
    $t=$Tag_A$t=$anz_tage_A$t++){
                    echo 
    '#' $Monat[$Monat_A] . $t '{ background-color: <?php echo $HintergrundFarbe_Frei;?>; }'
                }
                for(
    $t=1$t<= $anz_tage$t++){
                    echo 
    '#' $Monat[$Monat_D] . $t '{ background-color: <?php echo $HintergrundFarbe_Frei;?>; }'
                }
                for(
    $t=1$t<= $Tag_B$t++){
                    echo 
    '#' $Monat[$Monat_B] . $t '{ background-color: <?php echo $HintergrundFarbe_Frei;?>; }';  
                }
            }
        }
    }

    ?> 
    </style>

    Mein Ziel ist es, dass in dem Kalender freie Tage, wie Wochenenden, Ferien, Feiertage in einer HintergrundFarbe hervorgehoben werden. Weiter werden später Events aus einer Datenbank ausgelesen und auch diese sollen Farblich gekennzeichnet werden, mit einer anderen Farbe.
    Weiter soll durch Mouse-Over (hover; kein java) der Name des Feiertages, die Bezeichnung der Ferien, die Beschreibung des Events auftauchen. Dies möchte ich dann mit einer Liste realisieren. Allerdings ist auch hier wieder das Problem, dass derzeit zu viele Operationen durchlaufen werden.

    Mir würde eine Idee bereits helfen, wie ich das Vorhaben effizient umsetzen könnte. Da ich noch nicht viel Programmiererfahrung habe, kenne ich bestimmte Mechanismen nicht, die sich als Vorteilhaft herausgestellt haben, um die Rechenzeit zu verkürzen.

    Weiter hatte ich gelesen, dass der Algorithmus für easter_date() (?) fehlerhaft sein soll und bei einigen Jahren einen anderen Wochentag ausgibt.

    Viele Grüße und vielen Dank für die Hilfen und dafür, dass bis hier hin gelesen wurde,
    Shalec


  • #2
    Verstehe ich es richtig, dass dein Script funktioniert wie du es möchtest, du allerdings nur die folgenden zwei Fragen hast:

    1.) Ist easter_date() fehleranfällig?
    2.) Ist mein Script effizient? Was kann ich besser machen?

    Kommentar


    • #3
      Zitat von dreamcatcher Beitrag anzeigen
      Verstehe ich es richtig, dass dein Script funktioniert wie du es möchtest, du allerdings nur die folgenden zwei Fragen hast:

      1.) Ist easter_date() fehleranfällig?
      2.) Ist mein Script effizient? Was kann ich besser machen?
      Nicht ganz.

      Die Frage nach easter_date() war nur beiläufig.

      Mein Script kann derzeit nur folgendes:
      - Kalender erzeugen
      - Ferien eintragen

      Es soll können
      - Kalender erzeugen
      - Ferien eintragen
      - Wochenenden kenntlich machen
      - Feiertage eintragen
      - Events eintragen

      Es ist so, dass mein Skript alles andere als effizient arbeitet. Füge ich ein Vorgehen für die Feiertage ein, das genauso arbeitet wie die Ferienfunktion, so braucht der Kalender ca. 5 Sekunden um erstellt zu werden. Das ist für den Onlinebedarf untragbar.

      Meine Frage ist i.A. wie ich in einem Funktionierenden Kalender möglichst Effizient meine Punkte umsetzen kann.
      Ich hatte bereits damit gearbeitet eine ID für jedes Feld zu hinterlegen und entsprechend mit CSS für die Ferien zu bearbeiten. Das Problem dabei ist, dass hier das komplette Skript zum Abbrechen des Kalenders führt. Ich denke mir, dass ich einen Fehler im Skript zu "ferien.php" habe.

      Da ich mir nicht vorstellen kann, dass ein PHP Skript abbricht, sobald ich für die 3 Monate Ferien pro Jahr für insgesamt ca. 90 Tage CSS Einträge erzeuge. (Insgesamt würden es wohl maximal 200 Einträge werden, wenn überhaupt..)

      Ich suche also nur nach Vorschlägen, wie man dies gut umsetzen kann (ggf. bereit gestellte Funktionen o.ä.). Den Code habe ich nur geliefert, falls den sich jemand angucken will.

      Kommentar


      • #4
        Hallo,

        kann mir jemand helfen die Tests effizient umzusetzen?
        Welche Methode bietet sich hier an? Jedem Datumsfeld eine ID geben und für jede ID, die in einen freien Tag fällt, entsprechend die CSS zu definieren?
        Oder gibt es da einen ganz anderen WEg?

        Viele Grüße und vielen Dank vorweg.

        Kommentar


        • #5
          Du holst dir alle Monate, Wochen, Tage.
          Kennzeichnest die Tage als "normal", "Feiertag", "Wochenende".
          Legst CSS-Klassen für "normal", "Feiertag", "Wochenende".
          Beim darstellen der Tage teilst du die CSS-Klassen entsprechend zu.

          Mehr könnte ich zum Vorgang nicht sagen, die Schwierigkeit ist ja eher, die Daten performant zu beschaffen, wofür man mal deinen Code genauer ansehen müsste... hab darauf aber nicht wirklich Lust :/ Scheint anderen nicht anders zu gehen.

          PHP-Code:
          if(isset($_GET['Monat'])){ 
              
          $Schritt $_GET['Monat']; 
          }else{ 
          $Schritt 0; } 

          if(        (
          $Schritt 0) && ($Schritt ==1) )                        { $jahr $jahr floor((1+$Schritt)/2); $Halbjahr=2;} 
          elseif( (
          $Schritt 0) && ($Schritt == 0) )                        { $jahr $jahr floor($Schritt/2); $Halbjahr =1;} 
          elseif( (
          $Schritt 0) && (($Schritt) % == 0))                    { $jahr $jahr ceil($Schritt/2); $Halbjahr=1;} 
          elseif( (
          $Schritt 0) && (abs($Schritt 2) ==1))                    { $jahr $jahr ceil($Schritt/2); $Halbjahr=2;} 
          Schrecklich zu lesen.

          PHP-Code:
          <?php
          for($mon=0$mon<=5$mon++){ 
              for(
          $t=0$t<=5$t++){ 
                  
          $Monat_A $Ferienzeit_Monat[2*$mon]; 
                  
          $Monat_B $Ferienzeit_Monat[2*$mon+1]; 
                  
          $Tag_A $Ferienzeit_Tag[2*$t]; 
                  
          $Tag_B $Ferienzeit_Tag[2*$t+1]; 
                   
                  if( (
          $Monat_B-1) ==){$Diff=12;}else{$Diff=$Monat_B-1;} 
                   
                  if(
          $Monat_A == $Monat_B){ 
                      for( 
          $t=$Tag_A$t <= $Tag_B$t++ ){ 
                          echo 
          '#' $Monat[$Monat_A] . $t '{ background-color: <?php echo $HintergrundFarbe_Frei;?>; }';      
                      } 
                  } 
          ?>
          Die Variablennamen sind auch teilweise schwer nachvollziehbar.


          Je nach Ansprüchen an das Script kannst du ja auch mal über nen Wechsel auf OOP nachdenken, strukturiert ist das ganze dann doch ein bisschen besser wart- und erweiterbar.
          Relax, you're doing fine.
          RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

          Kommentar


          • #6
            Überhaupt mal mit Strukturierungsmitteln wie Funktionen oder Klassen zu arbeiten wär ne Idee, ja.
            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

            Kommentar


            • #7
              Zitat von VPh Beitrag anzeigen
              Du holst dir alle Monate, Wochen, Tage.
              Kennzeichnest die Tage als "normal", "Feiertag", "Wochenende".
              Legst CSS-Klassen für "normal", "Feiertag", "Wochenende".
              Beim darstellen der Tage teilst du die CSS-Klassen entsprechend zu.
              Du meinst also, ich sollte jeden Tag testen, ob dieser ein Feiertag ist oder am Wochenende liegt?

              Zitat von VPh Beitrag anzeigen
              Mehr könnte ich zum Vorgang nicht sagen, die Schwierigkeit ist ja eher, die Daten performant zu beschaffen, wofür man mal deinen Code genauer ansehen müsste... hab darauf aber nicht wirklich Lust :/ Scheint anderen nicht anders zu gehen.
              Kann ich nachvollziehen. Der zeitliche Aspekt wäre mir zu groß, um effizient zu helfen. Mein Prinzip zur Generierung der Monate funktioniert wie folgt:

              Ich ermittle die Anzahl der Tage des Monats und erzeuge dann für jeden Tag eine <div> Umgebung und generiere das Datum, über das ich dann den Wochentag mit Zahl ausgebe.
              Nun kann ich jeder <div> eine ID zuweisen ohne Tests zu starten oder für jede <div> Tests durchführen.

              Folglich bräuchte ich vermutlich 30*6 * #Tests
              anderenfalls müsste die ID hinterlegt werden (Anzahl loops?= ) und für jeden freien Tag entsprechend die <div> färben. (Was bislang bei mir zum Abbruch des Skripts führt).
              Ich kann leider selber nicht entscheiden, was hier effizienter ist, da mir Informationen fehlen.

              Zitat von VPh Beitrag anzeigen
              PHP-Code:
              if(isset($_GET['Monat'])){ 
                  
              $Schritt $_GET['Monat']; 
              }else{ 
              $Schritt 0; } 

              if(        (
              $Schritt 0) && ($Schritt ==1) )                        { $jahr $jahr floor((1+$Schritt)/2); $Halbjahr=2;} 
              elseif( (
              $Schritt 0) && ($Schritt == 0) )                        { $jahr $jahr floor($Schritt/2); $Halbjahr =1;} 
              elseif( (
              $Schritt 0) && (($Schritt) % == 0))                    { $jahr $jahr ceil($Schritt/2); $Halbjahr=1;} 
              elseif( (
              $Schritt 0) && (abs($Schritt 2) ==1))                    { $jahr $jahr ceil($Schritt/2); $Halbjahr=2;} 
              Schrecklich zu lesen.
              Ich habe eine Funktion hinterlegt, mit der man immer um 6 Monate zurück und vor springen kann. Da dabei das Jahr gewechselt wird, gibt es die Variable $Jahr. Ein Jahr besteht aus zwei Halbjahren, um zu wissen in welchem Halbjahr man ist, wird die Anzahl der Vor- und Rücksprünge genutzt. Dieses Stück ist im Prinzip für die allgemeine Funktionsweise egal
              Mir ist auch grad ein Gedankenfehler daran aufgefallen.

              Zitat von VPh Beitrag anzeigen
              PHP-Code:
              <?php
              for($mon=0$mon<=5$mon++){ 
                  for(
              $t=0$t<=5$t++){ 
                      
              $Monat_A $Ferienzeit_Monat[2*$mon]; 
                      
              $Monat_B $Ferienzeit_Monat[2*$mon+1]; 
                      
              $Tag_A $Ferienzeit_Tag[2*$t]; 
                      
              $Tag_B $Ferienzeit_Tag[2*$t+1]; 
                       
                      if( (
              $Monat_B-1) ==){$Diff=12;}else{$Diff=$Monat_B-1;} 
                       
                      if(
              $Monat_A == $Monat_B){ 
                          for( 
              $t=$Tag_A$t <= $Tag_B$t++ ){ 
                              echo 
              '#' $Monat[$Monat_A] . $t '{ background-color: <?php echo $HintergrundFarbe_Frei;?>; }';      
                          } 
                      } 
              ?>
              Die Variablennamen sind auch teilweise schwer nachvollziehbar.
              In Ferienzeit_Monat sind insgesamt 12 Einträge. Diese bestehen quasi aus Dupeln (2-Tupel, Paare): Monat, in dem die Ferien beginnen und Monat, in dem sie enden.
              Analog für Ferienzeit_Tage.

              Da diese aufeinander folgen sind immer die geraden Vielfachen Anfänge und ungeraden Enden.

              Zitat von VPh Beitrag anzeigen
              Je nach Ansprüchen an das Script kannst du ja auch mal über nen Wechsel auf OOP nachdenken, strukturiert ist das ganze dann doch ein bisschen besser wart- und erweiterbar.
              Was ist OOP?
              Soll dies für "Objektorientierte Programmierung" stehen? Oder beschreibt dies ein Scriptsprache wie Javascript?

              Im ersteren Fall:
              Ich hatte mal vor 5 Jahren in einem 1-semestrigen Kurs ein wenig mit Objektorientierter Programmierung mit Java zu tun. Mir hatte sich damals der Vorteil daran nicht ergeben.
              Insofern es sich ergibt schreibe ich einzelne Funktionen, die gewisse Arbeiten vollrichten, wie ein Werkzeugkasten. Diese Funktionen schreibe ich so speziell/klein wie möglich/nötig, um die Fehlerwahrscheinlichkeit klein zu halten. Ob dies bereits unter OOP fällt... fraglich

              Viele Grüße und vielen Dank für die Anregung

              Kommentar


              • #8
                Zitat von Shalec Beitrag anzeigen
                Was ist OOP?
                Soll dies für "Objektorientierte Programmierung" stehen?
                Ja

                Schau dir mal das an, war vor kurzem eine Empfehlung von t3n:
                http://www.codecademy.com/tracks/php

                Bei Fragen zu OOP google, wenn du keine Antwort findest benutze die Board Suchfunktion, wenn du immer noch keine Antwort findest schreibe hier in das Anfängerforum.

                LG

                Kommentar

                Lädt...
                X