CMS für Tabelle (achtung Anfänger ;) )

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

  • CMS für Tabelle (achtung Anfänger ;) )

    Hallo zusammen .

    Mir geht es um die Tabelle auf der folgenden Seite:
    Tanz und Bewegung - Physiotherapie Flisar in Treuchtlingen - ( Aktuelle Terminliste fr der Raum fr Tanz und Bewegung )

    Im Moment ist es so das ich die Tabelle als Textdatei gespeichert habe und per include einbinde.
    D.h. das ich bei Änderungen (die häufiger vorkommen als gedacht) das HTML entsprechend abändern muss.

    Nun wäre es schon wenn die Trainer die Tabelle selber aktuell halten könnten. Das HTML für einen Termin sieht z.b. so aus:

    HTML-Code:
    <td class="kursblock" rowspan="4" colspan="1">
                          <h3>Zumbatomic&reg; <br>8-12 Jahre</h3>
                            <dl>
                                <dt>Kurs:</dt>
                                <dd>Zumba für Kids 8-12 J</dd>
                                <dt>Trainer(in):</dt>
                                <dd>Inanna</dd>
                                <dt>Zeit:</dt>
                                <dd>15:30 bis 16:30 Uhr</dd>
                                <dt>Alter:</dt>
                                <dd>8-12 Jahre</dd>
                                <dt>Link:</dt>
                                <dd><a href="http://www.inanna-tanz.de/">www.inanna-tanz.de</a></dd>
                                <dt>Kontakt:</dt>
                                <dd><a href="http://www.inanna-tanz.de/kontakt.php">Kontakt</a></dd>
                            </dl>                      
                          </td>
    Die Daten die der Trainer dann eingeben können muss wären also:
    • Uhrzeit (Beginn)
    • Uhrzeit (Ende)
    • Wochentag
    • Kursname
    • Trainername
    • Link zu seiner Website (falls vorhanden)
    • Link zu einem Kontaktformular (oder mailto)

    Meine Idee zu einem Lösungsweg:
    Ich lasse eine Textdatei erstellen in der eine Zeile für eine <tr> steht.
    Zeilenweise eingelesen wird das dann in ein Array z.b. $tabelle[zeile] das die Uhrzeit enthält.
    In die zweite Dimension (nennt man das so?) des Arrays z.B. $tabelle[zeile][tag] das kommt dann der Inhalt für jeweilige <td>. Dafür würde ich explode nutzen.

    Stimmt der Lösungsweg bis hier hin?

    Wofür ich noch keine Idee habe ist wie ich automatisch die überflüssigen <td>´s entfernen lassen kann die durch das zusammenfassen anderer Zellen <td>´s ( <td rowspan="4"> ) entstehen.

  • #2
    Japp, dein Ansatz stimmt einfach eine Textdatei anlegen. Jede Zeile enthält den inhalt einer Tabellenzeile. Und die Werte (Liste hast du oben genannt) wird einfach Komma-separiert in die Zeile reingeschrieben.

    Fertig ist die Laube.

    Um die Größe der Zellen zu bestimmen, muss dein Code in der Lage sein, zu erkennen, wie lang ein Termin ist. Die Datumsfunktionen von PHP helfen dir dabei. Und dann rechnest du beispielsweise: Zeit_des_Termins_in_Minuten/30 = rowspan.
    Zuletzt geändert von TobiaZ; 19.01.2013, 22:24.

    Kommentar


    • #3
      Zitat von TobiaZ Beitrag anzeigen
      Um die Größe der Zellen zu bestimmen, muss dein Code in der Lage sein, zu erkennen, wie lang ein Termin ist. Die Datumsfunktionen von PHP helfen dir dabei. Und dann rechnest du beispielsweise: Zeit_des_Termins_in_Minuten/30 = rowspan.
      OK das verstehe ich, erstmal danke für die Antwort .

      Wie ich die <td>´s die (in den folgenden <tr>´s) zu viel sind raus bekomme weiß ich aber immer noch nicht.

      Beispiel:
      Zelle 1 in der ersten Zeile soll sich über vier Zeilen erstrecken.
      In diesem Fall soll Zelle 1 in den folgenden drei Zeilen nicht mehr ausgegeben werden. Sonst haben diese Zeilen ja eine Spalte mehr. In der vierten Zeile muss Zelle 1 dann wieder ausgegeben werden.

      Beispiel (falsch):
      HTML-Code:
      <tr> <td rowspan="4">1</td> <td>2</td> <td>3</td> </tr>
      <tr> <td>1</td>             <td>2</td> <td>3</td> </tr>
      <tr> <td>1</td>             <td>2</td> <td>3</td> </tr>
      <tr> <td>1</td>             <td>2</td> <td>3</td> </tr>
      <tr> <td>1</td>             <td>2</td> <td>3</td> </tr>
      Beispiel (richtig):
      HTML-Code:
      <tr> <td rowspan="4">1</td> <td>2</td> <td>3</td> </tr>
      <tr>                        <td>2</td> <td>3</td> </tr>
      <tr>                        <td>2</td> <td>3</td> </tr>
      <tr>                        <td>2</td> <td>3</td> </tr>
      <tr> <td>1</td>             <td>2</td> <td>3</td> </tr>

      Kommentar


      • #4
        Du könntest dir für jede Spalte ein Flag setzen: $col_flag[0] = 0, $col_flag[1] = 0, etc.

        In dem Moment wo du entscheidest, dass rowspan = 4 ist, setzt du einfach das Flag auf 3 (=4-1). In den darauf folgenden Schleifen durchläufen reduzierst du den Wert jeweils um 1. Jetzt noch eine einfache Überprüfung, die sicherstellt, dass die leeren Zellen nur ausgegeben werden, wenn das flag==0 ist und du hast gewonnen.

        Mach dir einfach mal ne Skizze auf Papier und überleg dir, wie PHP die Tabelle Stück für Stück aufbauen soll und welche Entscheidungen dafür getroffen werden. Dann kannst du deinen Code stück für Stück entwickeln.

        Kommentar


        • #5
          Zitat von mich78 Beitrag anzeigen
          Wie ich die <td>´s die (in den folgenden <tr>´s) zu viel sind raus bekomme weiß ich aber immer noch nicht.
          Hi mich78,

          du brauchst eigentlich nur einen Zähler modulo durch rowspan zu teilen. Ist das Ergebnis Null, gibst du die erste Zelle
          mit aus, ansonsten nur die restlichen.

          PHP-Code:
          <table border = "1">
          <?php
          $rowspan 
          4;
          $zeilen 17
          for(
          $i=0;$i<$zeilen;$i++){
           if(
          $i%$rowspan == 0){
            echo 
          '<tr><td rowspan = "'.$rowspan.'" valign = "top">1</td><td>2</td><td>3</td><td>4</td></tr>';
            }else{
                    echo 
          '<tr><td>2</td><td>3</td><td>4</td></tr>';
                   }
          }
          ?> 
          </table>
          Gruß
          Günni

          Kommentar


          • #6
            Erstmal Danke euch beiden

            Nachdem ich die letzten Tage keine Zeit hatte, hab ich nun den ersten Teil, also das Script das die Textdatei ausliest und an den passenden Stellen in die Tabelle schreibt (fast) fertig.

            Was noch nicht funktioniert ist die korrekte Berechnung der Endzeit eines Kurses. Das ist dieser Abschnitt:
            PHP-Code:
            // ZEIT FUNKTIONIERT NICHT WIE GEPLANT
                            
            echo date ("H:i", (($zeit_pro_zeile $wochentage[0]) + $uhrzeiten[$i])) . '</dd>' "\r\n" ;
                            
            // ZEIT FUNKTIONIERT NICHT WIE GEPLANT 
            $zeit_pro_zeile = 15 (entspricht der Zeitspanne die eine Zeile darstellt in min)
            $wochentage[0] = 4 (entspricht rowspan)
            $uhrzeiten[$i] (enthält die Uhrzeit der betreffenden Zeile 9:00)

            Es soll also automatisch 9:00 + (4*15min) also 10:00 ausgegeben werden.
            Kann mir jemand sagen was ich das falsch mache?


            Ansonsten glaub ich siehts ganz gut aus , obwohl ich bei den rowspan lange experimentieren musste .

            Der Vollständigkeit halber mal mein Script
            PHP-Code:
                <h2>Tanz und Bewegung</h2>





            <?php
            function gebe_array_aus ($arrayname$h2){
                echo 
            "<hr /><h2>" $h2"</h2><pre>" ;
                
            print_r($arrayname);
                echo 
            '</pre><hr />';
            }


            echo 
            "<h2>PHP-Teil tanzbewegung.php Entwicklung</h2>" ;


            //Festlegen der Zeiger für $tabelle

                // Festlegen der Zeiger für die erste Dimension von $tabelle
                // Die erste Dimension ist die Uhrzeit und entspricht <tr>
                // Setzt die zu verwendende Standardzeitzone. Verfügbar seit PHP 5.1
                
            date_default_timezone_set('UTC');
                    
            // Einstellungen
                    
            $start_stunde       =   9;          //Die Stunde in der der Kalender beginnt
                    
            $start_minute       =   0;          //Die Minute in der der Kalender beginnt
                    
            $letzte_stunde      =   22;         //Die Stunde in der der Kalender endet
                    
            $letzte_minute      =   0;          //Die Minute in der der Kalender endet
                    
            $zeit_pro_zeile     =   (15 60);  //Der Zeitraum der einer Zeile entspricht
                    // Zeitstempel erstellen
                    
            $startzeit          mktime ($start_stunde$start_minute);
                    
            $endzeit            mktime ($letzte_stunde$letzte_minute);

                    
            //Schleife zum befüllen des Arrays $uhrzeiten
                    
            $ausgabe $startzeit;
                    while(
            $ausgabe <= $endzeit){

                        
            //$ausgabe_formatiert = date ("H:i", $ausgabe);
                        
            $uhrzeiten[]        = date ("H:i"$ausgabe);
                        
            // echo "$ausgabe_formatiert<br />";

                        
            $ausgabe = ($ausgabe $zeit_pro_zeile) ;

                    }
                    
            // Kontrollausgabe
                    // gebe_array_aus($uhrzeiten, '$uhrzeiten') ;
            ?>


                            <table>
                                  <tbody>
                                <tr>
                                  <th scope="col">Zeit</th>
                                  <th scope="col">Montag</th>
                                  <th scope="col">Dienstag</th>
                                  <th scope="col">Mittwoch</th>
                                  <th scope="col">Donnerstag</th>
                                  <th scope="col">Freitag</th>
                                  <th scope="col">Samstag</th>
                                  <th scope="col">Sonntag</th>
                                </tr>

            <?php
            // Textdatei zum lesen öffnen
            $handle fopen ('tanzbewegung_daten.inc.php'r);

            $i  =   0;
            while(
            $zeile fgets($handle4096)){
                
            $zelle explode("|"$zeile);
                
            // Kontrollausgabe
                // gebe_array_aus($zeile, '$zeile') ;

                // Beginn der Zeile
                
            echo"                    <tr" ;
                    
            // Einfügen der Klasse "zweite_zeile" in jeder zweiten Zeile
                    
            if(($i%2)== 0){
                        echo 
            ' class="zweite_zeile"' ;
                    }
                echo 
            ">\r\n" ;



                    
            // Erste Spalte Uhrzeit
                    
            echo "                      <td>$uhrzeiten[$i]</td>\r\n" ;


                        
            // Inhalt für Spalten Wochentage
                        // öffnender <td>-Tag
                        
            $tage count ($zelle);

                        for (
            $x 0$x $tage$x++){

                            
            $wochentage     =   array_map('trim'explode(","$zelle[$x]));         // <td>

                            //col_flag setzen
                            
            $col_flag[$i][$x]   =   ($wochentage[0] - 1) ;                      //Werte von Colspan
                            
            $col_flag[$i][$x]   =   ($col_flag[$i][$x] + $col_flag[$i-1][$x]) ; //Werte aus vorheriger Zeile addieren

                            
            if ($col_flag[$i-1][$x] > 0){
                                
            $col_flag[$i][$x]   =   ($col_flag[$i][$x] - );
                            }


                            if (
            $col_flag[$i-1][$x] == 0){




                            echo 
            '                      <td rowspan="' $wochentage[0] .
                                                        
            '" colspan="' $wochentage[1] . '"' ;
                                                
            // Die Klasse wird vergeben wenn es eine Kursüberschrift gibt
                                                
            if (!empty($wochentage[2])){
                                                    echo 
            '  class="kursblock"' ;
                                                }
                            echo                           
            '>' "\r\n" ;
                            
            // Ende des öffnenden Tags

                            // Überschrift <h3> (Kurstitel)
                            
            if (!empty($wochentage[2])){ //wird nur angezeigt wenn <h3> vorhanden
                            
            echo '                          <h3>' $wochentage[2] . '</h3>' "\r\n" ;
                            
            //Beginn der <dl>
                            
            echo '                            <dl>' "\r\n" ;
                            echo 
            '                              <dt>Kurs:</dt>' "\r\n" ;
                            echo 
            '                              <dd>' $wochentage[3] . '</dd>' "\r\n" ;
                            echo 
            '                              <dt>Trainer:</dt>' "\r\n" ;
                            echo 
            '                              <dd>' $wochentage[4] . '</dd>' "\r\n" ;
                            echo 
            '                              <dt>Zeit:</dt>' "\r\n" ;
                            echo 
            '                              <dd>' $uhrzeiten[$i] . ' bis ' ;
                            
            // ZEIT FUNKTIONIERT NICHT WIE GEPLANT
                            
            echo date ("H:i", (($zeit_pro_zeile $wochentage[0]) + $uhrzeiten[$i])) . '</dd>' "\r\n" ;
                            
            // ZEIT FUNKTIONIERT NICHT WIE GEPLANT

                            // Zielgruppe <dl> <dd>
                            
            if (!empty ($wochentage[5])){
                                echo 
            '                              <dt>Zielgruppe:</dt>' "\r\n" ;
                                echo 
            '                              <dd>' $wochentage[5] . '</dd>' "\r\n" ;
                            }
                            
            // Weblink <dl> <dd>
                            
            if (!empty($wochentage[6])){
                                echo 
            '                              <dt>Link:</dt>' "\r\n" ;
                                echo 
            '                              <dd>' $wochentage[6] . '</dd>' "\r\n" ;

                            }
                            
            // Kontaktformuar <dl> <dd>
                            
            if(!empty($wochentage[7])){
                                echo 
            '                              <dt>Kontakt:</dt>' "\r\n" ;
                                echo 
            '                              <dd>' $wochentage[7] . '</dd>' "\r\n" ;
                            }
                            
            // Telefon <dl> <dd>
                            
            if(!empty($wochentage[8])){
                                echo 
            '                              <dt>Telefon:</dt>' "\r\n" ;
                                echo 
            '                              <dd>' $wochentage[8] . '</dd>' "\r\n" ;
                            }

                            echo 
            '                            </dl>' "\r\n" ;

                            }
                            else{
                                echo
            "                        &nbsp; \r\n" ;
                            }
                            echo 
            "                      </td> \r\n" ;                                    // </td>

                        
            }
                        }
            //ColFlag

                    // Kontrollausgabe
                    //gebe_array_aus($wochentage, '$wochentage') ;
                
            echo"                    </tr>\r\n" ;

            $i++ ;
            }

             
            ?>

                              </tbody>

                            </table>
            Wer will kann ja gerne mal über mein Anfängerstück drüber schauen .

            Kommentar


            • #7
              Ach so, der Vollständigkeit halber auch die Textdatei dazu:
              Code:
              4, 1, Babyrobic, Babyrobic, Silke /  Belinda, Frauen, <a href="#">kein Link</a>, <a  href="index.php?seite=kontakt">Kontaktformular</a>,  09142&nbsp;/&nbsp;XXX | 4, 1, Beckenbodentraining,  Beckenbodentraining, Antonia Flisar, Frauen, <a  href="index.php?seite=beckenbodentraining">Beckenbodentraining</a>,  <a href="index.php?seite=kontakt">Kontaktformular</a>,  09142&nbsp;/&nbsp;975329 | 4, 1, TaeKwonDo, Traditionelles  TaeKwonDo, Philipp Thaler, zielgruppe, link zur webseite, kontaktform,  telefon | 4, 1, Pilates, Pilates, Monique, zielgruppe, link zur  webseite, kontaktform, telefon | 1, 1,,,,,,, | 1, 1,,,,,,, | 1, 1,,,,,,,
              1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1,  1,Kurstitel, Kurstiltel detail, Trainer, Zielgruppe, Weblink,  Kontaktlink, Telefonnr| 1, 1,,,,,,,
              1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              3, 1, Montag,Mo,drei,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              1, 1,,,,,,,|  6, 1, Dienstag, Di, sechs,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              5, 1, Montag, Mo ,fünf,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              1, 1,,,,,,,|  3, 1, Dienstag, Di, drei,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,
              1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,|  1, 1,,,,,,,| 1, 1,,,,,,,|  1, 1,,,,,,,

              Kommentar


              • #8
                Hi mich78,
                // ZEIT FUNKTIONIERT NICHT WIE GEPLANT
                lass' dir mal die drei Variablen ausgeben . . .
                PHP-Code:
                <?php
                echo "<pre>";
                echo 
                $zeit_pro_zeile."<br>";
                echo 
                $wochentage[0]."<br>";
                echo 
                $uhrzeiten[$i];
                echo 
                "</pre>";
                ?>
                Ergebnis:

                900
                4
                9:00

                Laut deiner Berechnung übergibst du an die Funktion date also 900 * 4 + "9:00".
                Guck' dir mal die Funktion strtotime an --> PHP: strtotime - Manual
                PHP-Code:
                // Ersetze diese Zeile . . .
                // echo date ("H:i", (($zeit_pro_zeile * $wochentage[0]) + $uhrzeiten[$i])) . '</dd>' . "\r\n" ;
                // . . . durch diese Zeile . . .
                echo date("H:i",strtotime($uhrzeiten[$i]." + ".$zeit_pro_zeile $wochentage[0]." seconds")). '</dd>' "\r\n"
                Zum zweiten würde ich das Attribut valign = 'top' verwenden, damit die Zellinhalte vertikal korrekt dargestellt werden.
                Zum einen bei der Zeitleiste . . .
                PHP-Code:
                echo "<td valign = \"top\">$uhrzeiten[$i]</td>\r\n" 
                . . . und bei den Zellinhalten . . .
                PHP-Code:
                echo '<td  valign = "top" rowspan="' $wochentage[0] .'" colspan="' $wochentage[1] . '"' 
                Gruß
                Günni

                Kommentar

                Lädt...
                X