Ergebnis 1 bis 15 von 15

Thema: Modul Auflistung Timestamp in Datum umwandeln

  1. #1
    Contao-Nutzer Avatar von HeinM
    Registriert seit
    25.06.2009.
    Ort
    Saarbrücken
    Beiträge
    20

    Standard Modul Auflistung Timestamp in Datum umwandeln

    Hallo zusammen,

    was muß ich tun, damit im Modul Auflistung der Timestamp aus einer Tabelle in ein lesbares Datum umgewandelt wird?


    mfg Hein

  2. #2
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Ich vermute mal das man bei Feld statt tstamp nicht eingeben könnte:
    Code:
    DATE_FORMAT(`tstamp`, '%d.%m.%Y - %H:%i') AS `date`
    oder? Hab grad nichts zu testen.

    Außerdem könnte man auch im Template selbst per PHP die Umwandlung vornehmen.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  3. #3
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Information

    @all

    Meine MySQL-Kenntnisse sind sehr bescheiden, aber aus dem Feld wird die Abfrage erzeugt, und bei der Abfrage schon formatieren? geht das? Dein Code funktioniert auf jeden Fall nicht, den hab ich getestet.

    Man könnte das Template modifizieren, in etwa so:
    PHP-Code:
    /** * in system/modules/listing/templates/list_default.tpl */
    /** * diese Zeilen: */
    <?php foreach ($row as $col): ?>
        <td class="body <?php echo $col['class']; ?>"><?php echo $col['content']; ?></td>
    <?php endforeach; ?>
    /** * ersetzen durch */
    /** * diese Zeilen: */
    <?php foreach ($row as $key => $col): ?>
        <td class="body <?php echo $col['class']; ?>"><?php echo ($key == 'tstamp' date('d.m.Y',$col['content']) : $col['content']); ?></td>
    <?php endforeach; ?>
    /** * in system/modules/listing/templates/list_default.tpl */
    Geht natürlich nur, wenn der Feldname welcher deine Zeitstempel enthält tstamp lautet. Machst du das öfters und auch aus unterschiedlichen Tabellen, könntest du dir ein Array od. String anlegen, welcher die Feldnamen der Timestamps enthält. z.B. tstamp,date,start,stop,addTime,startTime,endTime.. .
    Und dann abfragen, "wenn Feldname in dem String (Array) enthalten ist, dann..."

    Außer der Formatierung mit date() hast du noch die Möglichkeit mit strftime() zu formatieren, das bietet den Vorteil, dass du sprachbezogene Werte bekommst, wenn du vorher mit setlocale() abhängig von der seitenspezifischen Sprach-Variablen z.B. de od. en die Sprache auf dem Server eingestellt hast. Mit date() bekommt man immer nur eine englische Ausgabe.

    Oder du benutzt die Funktion parseDate(), welche Leo integriert hat. Damit bekommst du glaub ich auch länderspezifische Formatierungen ohne setlocale(). Ich hab parseDate() nicht im Einsatz, deshalb weiß ich das grad nicht so genau, hab's so im Vorbeifliegen mal mitbekommen. Einfach mal nach parseDate() im Forum suchen.

    Gruß von Andreas

  4. #4
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard

    Mal aus der Date.php abgeschaut und leicht angepasst als Veranschaulichung, je nachem was man haben möchte
    PHP-Code:
            $Datum $this->parseDate($GLOBALS['TL_CONFIG']['dateFormat'], tstamp);
            
    $Zeit $this->parseDate($GLOBALS['TL_CONFIG']['timeFormat'], tstamp);
            
    $DatumZeit $this->parseDate($GLOBALS['TL_CONFIG']['datimFormat'], tstamp); 
    "tstamp" muss dabei der Inhalt des Datenbankfeldes sein.

    Und ja, mein SQL hatte den Fehler das der tstamp ja in Unixtime Format vorliegt.
    So gehts:
    Code:
    DATE_FORMAT( FROM_UNIXTIME(`tstamp`) , '%d.%m.%Y - %H:%i' ) AS `date`
    Ich vermute mal, das das Modul Auflistung aber nur Feldnamen und keine solchen Angaben zulässt. Werd ich mal testen bzw. nachschauen.

    Nachtrag:
    Mit
    Code:
    FROM_UNIXTIME(`tstamp`)
    als Feldname funktioniert es im Modul Auflistung. Bei den weiteren Angaben kommt es dann durcheinander wegen des Kommas, da es als Feldtrenner dient.

    Falls mal andere Datenbanken zum Einsatz kommen, würde ich es auch aus dem Grund im Template umformatieren.
    Geändert von BugBuster (25.07.2009 um 18:21 Uhr)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  5. #5
    Contao-Nutzer Avatar von HeinM
    Registriert seit
    25.06.2009.
    Ort
    Saarbrücken
    Beiträge
    20

    Standard

    Danke BugBuster,

    Zitat Zitat von BugBuster Beitrag anzeigen

    Nachtrag:
    Mit
    Code:
    FROM_UNIXTIME(`tstamp`)
    als Feldname funktioniert es im Modul Auflistung. Bei den weiteren Angaben kommt es dann durcheinander wegen des Kommas, da es als Feldtrenner dient.
    das reicht mir im Moment.

    Gruß Hein

  6. #6
    Contao-Fan
    Registriert seit
    17.11.2012.
    Beiträge
    528

    Standard

    Hallo BugBuster


    Es ist mir schier peinlich zu fragen - aber ich will nun anfangen zu verstehen, was mit all den Code-Beispielen im Forum zu machen ist. Code-Beispiele finde ich haufenweise zu allen möglichen Fragestellungen, aber was genau damit jeweils zu machen ist (wo einfügen, platzieren), dazu finde ich kaum Hinweise.

    Konkret: Ich will aus tl_comments (Modul Auflistung) statt tstamp ein lesbares Datum auf der Liste im Frontend ausgeben.

    Aus #4:
    PHP-Code:
    $Datum $this->parseDate($GLOBALS['TL_CONFIG']['dateFormat'], tstamp);
    $Zeit $this->parseDate($GLOBALS['TL_CONFIG']['timeFormat'], tstamp);
    $DatumZeit $this->parseDate($GLOBALS['TL_CONFIG']['datimFormat'], tstamp); 
    Was muss ich mit den drei Zeilen, bzw. einer aus diesen machen? Z.B. ins Template z.B. list_default.html5 kopieren? Scheint mir zwar irgendwie schon vom Anschauen her nicht zum übrigen Template-Code zu passen. Oder in die /system/config/dcaconfig.php stellen?


    Zu #4 Nachtrag
    Ich habe FROM_UNIXTIME('tstamp') als Feldname verwendet, bekomme aber eine Fehlermeldung, die ich als MySQL-Syntaxfehler interpretiere. Inspirationen aus http://dev.mysql.com/doc/refman/5.1/...functions.html haben mich nicht weiter gebracht.

    Meine Umgebung: Contao 3.1.1, PHP 5.3.10, MySQL 5.5.31.


    Für Hilfe bin ich dir sehr dankbar.

  7. #7
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.513
    User beschenken
    Wunschliste

    Standard Auflistung mit Datum statt tstamp

    OK, Schritt für Schritt.
    Im Backend auf Layout - Templates - "Neues Template"

    Dort in der Liste auswählen "list_default" - "Template erstellen.
    In der jetzigen Ansicht auf den Bleistift und das Template umbenennen: list_default_date (Endung wird automatisch an gehangen, so wie vorher ausgewählt)

    So nun das Template bearbeiten.
    Zeile 65 und 66 ersetzen durch: (Achtung Zeile 66 wird im Forum umgebrochen, das muss im Template eine Zeile sein, sonst Syntax Error)
    PHP-Code:
    <?php foreach ($row as $key => $col): ?>
              <td class="body <?php echo $col['class']; ?>"><?php echo ($key == 'tstamp' $this->parseDate($GLOBALS['TL_CONFIG']['dateFormat'],$col['content']) : $col['content']); ?></td>
    Das kannste auch über Backend machen oder mit einem Editor deiner Wahl, dazu musste die Datei natürlich vor Ort öffnen.

    Nun ein Modul Aufllistung erstellen und dort bei " Template-Einstellungen" - "Listentemplate" das oben unbenannte Template auswählen.

    Modul in ein Artikel einbauen, fertig.

    Sieht bei mir dann so aus:


    Code:
    tstamp       	Author
    21.06.2011 	John Smith
    Jetzt müsste man sich noch die Stelle suchen wo der Feldname ausgegeben wird und den auch anpassen.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  8. #8
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hilfreich dazu auch: Mit diesen Zeilen im Template kannst du dir im FE anzeigen lassen, welche Variablen das Template ausspuckt:
    PHP-Code:
    <?php
      $this
    ->showTemplateVars();
    ?>
    oder
    PHP-Code:
    <?php
      $this
    ->dumpTemplateVars();
    ?>
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  9. #9
    Contao-Fan
    Registriert seit
    17.11.2012.
    Beiträge
    528

    Standard

    Code-Zeilen von BugBuster eingesetzt - es funktioniert. Herzlichen Dank!

    Zur Anpassung des Feldnamens (statt tstamp z.B. 'Datum'):
    In der /system/config/langconfig.php habe ich mehrere funktionierende Einträge drin. Aber eine Lösung in dieser Art für tstamp ist mir nicht gelungen.
    Am ehsten schien mir schliesslich folgender Eintrag in die /system/config/langconfig.php Erfolg versprechend:
    Code:
    $GLOBALS['TL_LANG']['tl_comments']['tstamp'][0] = 'Datum';
    Ohne Erfolg.

    Interessant finde ich, dass 'Autor' und 'Kommentar' sozusagen 'automatisch' deutsch ausgegeben, tstamp nicht.

    Den Code von Andreas habe ich in die list_default.html5 eingesetzt und die Liste angezeigt bekommen. Herzlichen Dank.
    Nur fehlt mir der Bezug (Wissen) zu meinem Problem. Immerhin meine ich gesehen zu haben, dass tstamp vorhanden ist.
    Code:
    [list_fields] => name,comment,tstamp
    
    ...
    
    [2] => Array
                    (
                        [link] => tstamp
                        [href] => index.php/test.html?order_by=tstamp&sort=asc
                        [title] => Sortiere nach tstamp
                        [class] => 
                    )
    Hoffe, das Richtige kopiert zu haben.


    Wo liegt da der Ansatz zur Lösung 'Datum' statt tstamp?

    PS: Welches Buch würde mir in solchen Fragen (PHP, Template anpassen, ...) am ehsten weiter helfen?
    Geändert von peter.fl (11.08.2013 um 09:27 Uhr) Grund: Info zu #8

  10. #10
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das 'label' für tstamp ist in den dca-Dateien nicht gesetzt. Deswegen kannst du es so setzen:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_comments']['fields']['tstamp']['label'][0] = 'Datum';
    $GLOBALS['TL_DCA']['tl_comments']['fields']['tstamp']['label'][1] = 'Hilfetext (nicht nötig)'
    In der system/config/dcaconfig.php (probiert habe ich es nur in der langconfig.php, das ging auch).

    Einen ersten schnellen Einstieg in PHP habe ich damals hiermit gemacht
    http://tut.php-quake.net/de/
    Das erschien mir ausreichend und ging recht schnell. Ansonsten immer http://www.php.net/manual/de/ offen haben und oben bei search ne Funktion eintippen und danach suchen, mit der Zeit lernt man dann PHP-Zeugs dazu.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  11. #11
    Contao-Nutzer
    Registriert seit
    27.10.2010.
    Beiträge
    64

    Standard

    Hallo zusammen,

    ich klinke mich hier mal ein, weil ich ein ähnliches Problem habe. Da es für contao 3.X keine funktionierende Erweiterung "Latest Comments" gibt, versuche ich gerade das über das Auflistungsmodul umzusetzen. Ich möchte folgende Ausgabe im Frontend erzielen:

    Max Mustermann (12.12.2013) zu "Titel des Nachrichtenbeitrags".

    Dementsprechend hole ich über das Modul Auflistung die Werte name,date,id und versuche jetzt, den Nachrichtenbeitrag mittels {{news::ID}} Insert-Tag zu verlinken. Danach möchte ich außerdem noch den Namen auf den Wert 'website' verlinken.

    Leider find ich jedoch nicht heraus, wie ich die Abfragen trennen kann, im Template list_default werden ja alle Werte über einen Befehl abgerufen:
    HTML-Code:
    <?php echo $col['content']; ?>
    Wie kann ich diese trennen, um sie einzeln zu bearbeiten?

  12. #12
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das ist schon getrennt. Du befindest dich in einer foreach-Schleife. $col['content'] liefert da jeweils den Inhalt des Feldes. Für date sieht das so aus
    Code:
    [date] => Array
      (
        [raw] => 1196602246
        [content] => 1196602246
        [class] => col_2 col_last
        [id] => 1
        [field] => date
        [url] => testseite.html?show=1
      )
    Kannst du sehen, wenn du das mit dem showTemplateVars() gemacht hast.

    Hole im Template eine News besser mit $this->replaceInsertTags('{{news::ID}}'); . Es sei denn jemand weiß, wie man eine News noch besser holt, wie z.B. mit $this->getArticle();
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  13. #13
    Contao-Nutzer
    Registriert seit
    27.10.2010.
    Beiträge
    64

    Standard

    Hi Andreas,

    so ganz verstehe ich das noch nicht.

    Selbst mit $this->replaceInsertTags('{{news::ID}}'); muss ich doch vorher die ID des Beitrags auslesen und dann entsprechend im list_default-Template bearbeiten, oder nicht?

    Wie muss dann der Code im Template aussehen, wenn ich Name, Datum und (verlinkte) News anzeigen will?

  14. #14
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Einen kompletten Code möchte ich dir hier nicht geben. Aber, ja, ID steht nur als Platzhalter für die ID, die du dorthin bringen musst.

    Über das Feld source kannst du prüfen, ob der comment zu einer News gehört (Wert: tl_news). Das Feld parent liefert dir die ID der News. Du musst diese beiden Felder dazu auch mit ausgeben, damit du sie im Template zur Verfügung hast.

    ps Du hättest besser einen neuen Thread aufgemacht, denn das hat nicht mehr mit "Modul Auflistung Timestamp in Datum umwandeln" zu tun.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  15. #15
    Contao-Nutzer
    Registriert seit
    27.10.2010.
    Beiträge
    64

    Standard

    Okay, das scheint komplizierter zu sein, soweit reichen meine Programmierkenntnisse dann doch nicht. Ich werd mir professionelle Hilfe suchen.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Antworten: 47
    Letzter Beitrag: 14.09.2015, 19:41
  2. Auflistung, Bedingung: Vergleich mit aktuellem Datum
    Von willshedo im Forum Sonstiges zu Contao
    Antworten: 5
    Letzter Beitrag: 31.01.2011, 09:27
  3. suche nach Datum in Auflistung
    Von comex im Forum Allgemeine Inhaltselemente
    Antworten: 1
    Letzter Beitrag: 23.02.2010, 16:37

Lesezeichen

Lesezeichen

Berechtigungen

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