Termin-Seite mit "Mini-CMS" (mit Smarty?)

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

  • Termin-Seite mit "Mini-CMS" (mit Smarty?)

    Hallo zusammen,

    ich lese, wie man an meinem Profil sehen kann, schon längere Zeit mit, habe nun aber zum ersten Mal wirklich etwas umzusetzen. Leider sind meine PHP-Kenntnisse noch etwas "very basic" für diese Aufgabe, daher möchte ich dies unter "Brainstorming" mal mit Euch diskutieren. Gleich zu Beginn: Es geht mir nicht darum kostenlos etwas (und sei es Know-How) abzugreifen ohne etwas dafür zu tun, sondern, wie es in der Rubrik-Bezeichnung steht, einen Ansatz zu finden, der eine tiefere Einarbeitung in die Thematik an einem konkreten Fallbeispiel ermöglicht. Ich möchte also nichts fertiges vorgesetzt bekommen, sondern lediglich Hilfe und Denkanstöße beim Start.

    Projektbeschreibung: Eine bestehende Webseite soll um eine "Termine"-Seite erweitert werden. Diese Seite soll Hinweise auf meist mehrtägige Veranstaltungen (z.B. Sport-Veranstaltungen, Seminare, Musikfestivals oder Messen) enthalten und zwar nach Monaten sortiert. Vergangene Termine sollen automatisch aus der Liste entfernt werden, sollten aber z.B. unter der Rubrik "zurückliegende Veranstaltungen" auch später jederzeit wieder ausgegeben werden können. Meine Fähigkeiten würden es nur zulassen, das Datum als normalen Text in die DB zu schreiben, aber so würde ja die automatische "Selbstpflege" der Terminseite entfallen, wie bekomme ich es also z.B. hin, dass das Datum auf seine Lage in Zukunft bzw. Vergangenheit hin überprüft wird? Die Termine enthalten ein Start- und ein End-Datum, einen Titel sowie einen optionalen Kurz-Beschreibungstext, der jedoch erst in einer "Detailansicht" des jeweiligen Termins angezeigt werden soll (in die Standardansicht der Terminansicht über einen "mehr"-Link hinter dem Titel eingebunden).

    Diese Terminseite soll über ein "Mini-CMS" auch für weitgehend "unbeleckte" User relativ einfach zu pflegen sein, also über eine seperate Seite in einem geschütztem Bereich mit Formularfeldern.

    Da auch der Rest der Seite mit Templates über Smarty gemacht ist (aber nur die Grundfunktionen, also die reine Template-Klassen-Funktionalität...) wäre es eventuell sinnvoll auch diese Terminseite mit Smarty zu realisieren. Kann mir hier jemand Tipps geben? Ich wüsste mir zur Zeit nicht anderes zu helfen, als den PHP-Code direkt im Template unterzubringen, aber eigentlich ist dies ja nicht der Sinn der Sache, wenn man schon Smarty nutzt, oder?

    Ich wäre Euch sehr, sehr dankbar wenn Ihr mir einige Starttipps geben könntet, z.B. zum geeigneten SQL-Tabellenlayout zu obengenannten Wünschen, zu den benötigten PHP-Funktionen, zur Ausgabe von Datenbankinhalten in Tabellenform etc..... Ich weiß einfach nicht, wie ich es anpacken soll...

    Vielen lieben Dank, ich warte gespannt auf Eure Tipps!

  • #2
    Kann oder will mir wirklich niemand helfen?

    Kommentar


    • #3
      Re: Termin-Seite mit "Mini-CMS" (mit Smarty?)

      Meine Fähigkeiten würden es nur zulassen, das Datum als normalen Text in die DB zu schreiben, aber so würde ja die automatische "Selbstpflege" der Terminseite entfallen, wie bekomme ich es also z.B. hin, dass das Datum auf seine Lage in Zukunft bzw. Vergangenheit hin überprüft wird?
      schau dir dochmal den sql-feld-typ DATETIME u.a. an ... die sind dafür gemacht ... überprüfen auf zukünftige bzw. vergangene termine kannst du u.a. mit NOW()
      Ich wüsste mir zur Zeit nicht anderes zu helfen, als den PHP-Code direkt im Template unterzubringen, aber eigentlich ist dies ja nicht der Sinn der Sache, wenn man schon Smarty nutzt, oder?
      ja, eigentlich nicht. benutze smarty nicht ... es sollte aber durchaus anders machbar sein ... wie in jedem anderen tpl auch ... du hast doch mindestens zwei dateien pro seite, eine .php, die den code enthält und eine .tpl, die dein layout mit platzhaltern enthält ...
      geeigneten SQL-Tabellenlayout zu obengenannten Wünschen
      schreibst du doch schon selbst ... id, Start- und ein End-Datum, einen Titel, Kurz-Beschreibungstext,

      die restlichen sachen (auslesen, darstellen, detail-ansicht) sollten dir durch das mitlesen schon geläufig sein ...

      du suchst dir z.b. alle termine, deren anfangsdatum > NOW() ist, gibst sie aus, als link, der als parameter die id des termin trägt. diese id benutzt du in der detail-ansicht, um den datensatz zu finden ...
      Die Zeit hat ihre Kinder längst gefressen

      Kommentar


      • #4
        Hallo Hund,

        vielen Dank für Dein Posting! Das nenne ich "Hilfe zur Selbsthilfe", Du hast Recht einige Bestandteile habe ich mir selbst wieder schwieriger ausgemalt als sie eventuell im Endeffekt sind, denn so ganz ansatzlos war ich ja nicht...
        Also werd´ich mal sehen wie weit ich komme... schwierig wirds dennoch allemal... *durchatme*

        Kommentar


        • #5
          hmm,

          OffTopic:
          nur nicht die motivation verlieren ... so schwer ists garnicht ...
          danach haste dann auch die grundlagen drauf, kannst dich auf größere projekte stürzen.
          Die Zeit hat ihre Kinder längst gefressen

          Kommentar


          • #6
            Hallo,

            bin jetzt soweit, dass ich die termine über ein formular in die db schreiben kann und auch die Ausgabe entspricht meinen Wünschen, abgehsehen von der Datumsformatierung. Womit ich jetzt allerdings noch Probleme habe, sind, wie angedeutet, die Datumsfunktionen. Ich speichere die Daten für Beginn und Ende eines Termins im Format 0000-00-00 in zwei Date-Type-Felder der DB. Wie kann ich die jetzt umformatieren um sie "hübsch" anzuzeigen und gegen now() "sortieren" um zukünftige und zurückliegende Termine getrennt ausgeben zu können? Sorry, ich hab mir wirklich schon Mühe gegeben, aber alles was ich unter strtotime, timestamp und gmdate gefunden habe, was chinese to my eyes... Irgendwie geht es dabei immer nur darum, wie man das aktuelle Datum und Zeit ermittelt und ausgibt, in den verschiedensten Variationen. Kann jemand versuchen mir den Weg aufzuzeigen mit meinen 0000-00-00-Daten weiterzuarbeiten?

            Ich danke Euch!!!

            Kommentar


            • #7
              Hallo,


              Es ist zwar ein bisschen umständlich da du das Datum in einem nicht sehr konfortablen Format gespeichert hast. Eigentlich benutzt man einen Unix Timestamp, dass sind die Anzahl von Sekunden seit dem 1.1.1970 (o.s.ä.)

              Aber du kannst das Datum mit strtotime in einen Timestamp umwandeln und dann mit gmdate() formatieren. Weiteres zu den funktionen findest du im PHP Manual unter php.net..



              Floriam
              PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

              Kommentar


              • #8
                Hallo Floriam,

                vielen Dank für Deine Antwort. Ich hatte oben schon geschrieben, dass ich zu den Funktionen schon gelesen habe, aber nicht genau weiß das gelesene auf mein Vorhaben anzuwenden.
                Unabhängig davon, aufschlussreich war Dein Posting dennoch für mich: Würdet Ihr denn allgemein eher einen normalen Timestamp in der Datenbank speichern, macht das die Sache einfacher? Ich also Noob hab halt gedacht, Daten speichert man am besten als Date-Typ in der Datenbank, war so schön naheliegend. Mein Script ist ja in der Hinsicht eh nicht fertig und überhaupt immer verbesserungswillig. Insofern würde ich das natürlich ändern wenn sich damit besser arbeiten lässt. Eure Meinung?
                Zuletzt geändert von TheBruce; 10.09.2004, 16:21.

                Kommentar


                • #9
                  Ich würde das abhängig machen, wofür du das Datum speicherst und auf welcher Platform. Bei Geburtsdaten und einem Windows Server solltest du das Datum nicht als Timestamp speichern, da Windows meines Wissens keine Timestamps vor dem 1.1.1970 kennt. Daher würde ich in diesem Fall lieber YYYY-MM-DD verwenden. In allen anderen Fällen bevorzuge ich Timestamps.

                  Kommentar


                  • #10
                    ich würde in der db den feld-typ DATE beibehalten! der ist schon für datums-sachen gedacht ...
                    Wie kann ich die jetzt umformatieren um sie "hübsch" anzuzeigen
                    DATE_FORMAT(..) im query

                    beispiele, hinweise, anleitungen: http://dev.mysql.com/doc/mysql/en/Da...functions.html
                    Die Zeit hat ihre Kinder längst gefressen

                    Kommentar


                    • #11
                      Hallo zusammen, hallo Hund!

                      Das Formatieren hat mit DATE_FORMAT funktioniert wunderbar, vielen Dank für den Hinweis. Auch sonst ist mein erstes Script schon etwas gewachsen, z.B. durch Lösch- und Editier-Funktionen *stolzbin*.
                      Allerdings hänge ich nun noch an der Überprüfung der "Gültigkeit" der Termine fest. Ich habe bis jetzt folgendes zusammengetragen:

                      PHP-Code:
                      $timestamp time();
                      $aktuelle_zeit date("Y-m-d",$timestamp);
                      IF (
                      $aktuelle_zeit $result['datum']){//hier rein dann die Ausgabe...} 
                      Bin ich da auf nem halbwegs richtigen Weg? Ich habe die Vorstellung, auf der Seite oben eine Box mit den zukünftigen Terminen (ASC) zu haben und darunter eine zweite mit den zuletzt vergangenen (DESC). Dazu muss ich getrennte Queries starten, oder? Ist die obige IF-Konstruktion überhaupt ansatzweise geeignet?

                      Vielen Dank für weitere Tipps und Anregungen!

                      Kommentar


                      • #12
                        Vielen Dank für weitere Tipps und Anregungen!
                        auch für das unterscheiden von vergangenen/zukünftigen terminen kannst du mySQL verwenden ...

                        CURDATE(), NOW(), ... gibt dir das aktuelle datum , mit dem du (afaik) auch direkt im query arbeiten kannst ...

                        im SELECT bereich kannst du mittels
                        Code:
                        SELECT
                          IF (deine_zeit_spalte < NOW(), 'past', 'future') point_of_time,
                          ...
                        FROM ...
                        (ungetestet) ein neues feld erzeugen, welches je nach dem past oder future als inhalt hat (selbsterklärend ...).
                        im php kannst du zb. dann
                        PHP-Code:
                        while ($Row mysql_fetch_...($Result)) {
                          
                        $your_array[$Row['point_of_time']][] = $Row;

                        (ungetestet) ein mehrdimensionales array aufbauen (mal print_r() drauf anwenden, um die struktur zu erkennen), welches dann im ersten key unterschieden werden kann ...

                        alle elemente, die über $your_array['past'] angesprochen werden, liegen in der vergangenheit, ....

                        zumindest prinzipiell sollte das so gehen ...
                        Die Zeit hat ihre Kinder längst gefressen

                        Kommentar


                        • #13
                          Hallo Hund,

                          vielen lieben Dank nochmals für Deine tolle Hilfe! Also ich muss sagen, ich staune wirklich über die Leistungsfähigkeit von mySQL. Bin Dein Beispiel durchgegangen, und schließlich waren die mehrdimensionalen Arrays noch etwas zu hoch für mich. Anhand Deines SQL-Queries kam mir aber eine andere, einfachere Lösung in den Sinn, ich habe einfach für die beiden Boxen mit neuen und alten Terminen jeweils eigene Queries gemacht:

                          Code:
                          SELECT id, DATE_FORMAT(start, '%d.%m.') AS f_start, DATE_FORMAT(end, '%d.%m.%Y') AS f_end, 
                          title, description FROM " .$tabelle ." WHERE end > NOW() ORDER BY end ASC
                          
                          und
                          
                          SELECT id, DATE_FORMAT(start, '%d.%m.') AS f_start, DATE_FORMAT(end, '%d.%m.%Y') AS f_end, 
                          title, description FROM " .$tabelle ." WHERE end < NOW() ORDER BY end DESC
                          Ist das furchtbar unelegant oder kann man das auch so machen? Von der Anzeige bringt es jedenfalls das gewünschte Ergebnis.
                          Zuletzt geändert von TheBruce; 13.09.2004, 16:13.

                          Kommentar


                          • #14
                            Ist das furchtbar unelegant
                            im vergleich zu meinem code, ja
                            oder kann man das auch so machen? Von der Anzeige bringt es jedenfalls das gewünschte Ergebnis.
                            aber wenn du das gewünschte ergebnis erreichst ... ist doch ok.

                            schade, daß dir die array-lösung nicht gefällt, aber wie gesagt, die beiden lösungen ähneln sich und führen ja letztendlich zum selben ergebnis.

                            viel spaß weiterhin.
                            Die Zeit hat ihre Kinder längst gefressen

                            Kommentar

                            Lädt...
                            X