Ergebnis 1 bis 9 von 9

Thema: Änderungsdatum der Seite oder des Artikels ausgeben

  1. #1
    Contao-Nutzer
    Registriert seit
    25.05.2010.
    Beiträge
    211

    Standard Änderungsdatum der Seite oder des Artikels ausgeben

    Hallo,

    ich soll, wie der Titel des Themas schon sagt, das Änderungsdatum der Seite oder des Artikels ausgeben.
    Änderungsdatum der Seite wäre wahrscheinlich besser, weil es sein kann, dass mehrere Artikel in einer Seite eingebunden sind und es "doof" aussieht, wenn zu jedem Artikel ein Datum ausgegeben wird.

    Ich habe es trotzdem erstmal mit dem Artikel versucht, da ich bei der Seite kein Änderungsdatum im Backend gesehen habe.

    Ich habe das Template "mod_articles.html5" wie folgt bearbeitet.

    1. Versuch
    Code:
    <div class="editdate">
    <?php echo $this->parseDate('d.m.Y H:i', $this->tstamp); ?>
    </div>
    => Ergebnis: ein Datum wird ausgegeben das im Backend unter "Änderungsdatum" nicht erscheint. Im Backend steht z.B. folgendes Datum: 29.03.2013 17:14, im Frontend dann folgendes: 25.04.2012 11:36. Verstehe ich nicht, vielleicht ist es das "Erstellungsdatum" das so im Frontend ausgegeben wird?

    2. Versuch
    Code:
    <div class="editdate">
    <?php echo $this->parseDate('d.m.Y H:i', $this->timestamp); ?>
    </div>
    => Ergebnis: siehe 1. Versuch

    3. Versuch
    Code:
    <div class="editdate">
    <?php echo $this->parseDate('d.m.Y H:i', $this->datetime); ?>
    </div>
    => Ergebnis: das scheint das aktuelle Datum und die Uhrzeit auszugeben, also in meinem Fall jetzt 19.02.2014 16:45

    Jetzt meine Fragen an euch:
    1. Was muss ich mit " $this->****** " ansprechen, um das Änderungsdatum des Artikels auszugeben?
    2. Kann man, und wenn ja wie, das Änderungsdatum der kompletten Seite ausgeben lassen, das sich automatisch mitändert sobald ein Artikel der Seite geändert wurde?


    Vielen Dank für Eure Unterstützung.

    EDIT: Soweit ich sehen kann, steht in der Datenbank nur ein Datum zum Artikel in der Spalte "tstamp". Ich nehme an, dass es sich hier um das Änderungsdatum handelt?

    EDIT 2: Nein, es handelt sich hier wahrscheinlich um das Erstellungsdatum. In obigem Beispiel also: 25.04.2012 11:36. Das andere Datum das im Backend als "Änderungsdatum" angezeigt wird, scheint sich Contao vom zuletzt geänderten Inhaltselement des betreffenden Artikels zu nehmen.

    Jetzt die entscheidende Frage:
    Wie komme ich da ran, wenn ich mich im Template für die Artikel und nicht für Inhaltselemente befinde?
    Geändert von pyretta (19.02.2014 um 16:47 Uhr)

  2. #2
    Contao-Urgestein
    Registriert seit
    30.01.2011.
    Ort
    Stuttgart
    Beiträge
    4.138

    Standard

    warum wird auf der Seite nicht das inserttag
    PHP-Code:
    {{last_update}} 
    verwendet?

  3. #3
    Contao-Nutzer
    Registriert seit
    25.05.2010.
    Beiträge
    211

    Standard

    Hallo magicsepp,
    vielen Dank für deine Antwort.

    Ich verwende den Inserttag deshalb nicht, weil dieser Inserttag das Update-Datum der gesamten Website ausgibt - nicht für jede Seite oder jeden Artikel einzeln. Und genau das bräuchte ich leider.

    Hast du einen Rat wie ich das schaffe?
    Ich müsste "nur" vom Template des Artikels auf die Variablen/Klassen der Inhaltselemente zugreifen können und dann von jenen das letzte bzw. neueste Datum nehmen. Ich weiß nur leider nicht wie.

    Mit meinen 3 Code-Beispielen erreiche ich das leider nicht.

    Früher gab es mal ein tolles Modul namens "edit_date", leider geht das aber mit den neuen Contao Versionen nicht mehr.

  4. #4
    Contao-Urgestein
    Registriert seit
    30.01.2011.
    Ort
    Stuttgart
    Beiträge
    4.138

    Standard

    EditDate könnte man doch an Contao 3 anpassen...ohne Erweiterung sehe ich da wenig Chancen..

  5. #5
    Contao-Nutzer
    Registriert seit
    25.05.2010.
    Beiträge
    211

    Standard

    Ja, vielleicht muss ich das wirklich...

    Hab jetzt mal versucht ein eigenes Inserttag dafür zu schreiben, aber ich glaub ich versteh da die Restriktionen von Contao bezüglich Datenbankabfragen noch nicht ganz.

    Hier mein PHP-Code:
    PHP-Code:
    <?php 
    //VERBINDUNG ZUR MYSQL-DATENBANK AUFBAUEN
    $link mysql_connect('localhost''*********''*********');
    if (!
    $link) {
        die(
    'Verbindung schlug fehl: ' mysql_error());
    }
    //echo 'Erfolgreich mit Datenbank\n verbunden ';

    //DATENBANK AUSWÄHLEN
    mysql_select_db("*********"$link) or die("Konnte die Datenbank nicht waehlen.".mysql_error());

    //ALLE DATENBANKABFRAGEN UTF-8 FORMATIERT AUSGEBEN
    mysql_query('SET CHARACTER SET utf8');

    // DATENBANK-ABFRAGE: HOECHSTE ID IN "tl_article"
    $last_article_ID 0;
    $at_maxID_sel "SELECT MAX(id) FROM tl_article;";
    $at_maxID_query mysql_query(at_maxID_sel)or die("Anfrage fuer MAX(id) in 'tl_article' war nicht erfolgreich. Error: ".mysql_error());
    while(
    $obj_at_maxID mysql_fetch_object($at_maxID_query)) {
        
    $last_article_ID $obj_at_maxID["MAX(id)"];
    }

    // AUFBAU DES INSERTTAGS: {{articledate::Article-ID}} => z.B. {{articledate::123}} 

    // DEFINITION DES INSERTTAGS
    class EditDate extends Frontend{
    public function 
    EditDate_TAG($strTag){
        
    $arrSplit explode('::'$strTag);

        if (
    $arrSplit[0] == 'articledate'){            
            if (isset(
    $arrSplit[1]) && $arrSplit[1] <= $last_article_ID){
                
    $last_update 0;
                
    // DATENBANK-ABFRAGE: DATUM ZULETZT BEARBEITETES INHALTSELEMENT DES ARTIKELS
                
    $at_last_sel "SELECT a.id, c.pid, MAX(c.tstamp)"
                
    ."FROM tl_article a"
                
    ."LEFT JOIN tl_content c ON c.pid = a.id"
                
    ."WHERE a.id = " $arrSplit[1] .";";
                
    $at_last_query mysql_query($at_last_sel)or die("Anfrage fuer MAX(c.tstamp) in 'tl_content' war nicht erfolgreich. Error: ".mysql_error());
                while(
    $obj_at_last mysql_fetch_object($at_last_query)) {
                    
    $last_update $obj_at_last["tstamp"];
                }
                
    $last_update_date date("d.m.Y",$last_update);
                                            
                return 
    $last_update_date;
            } else {
                return 
    'Fehler! Bitte Artikel-ID eintragen!';
            }
        }
        
    // nicht unser Insert-Tag
        
    return false;
      }
    }
     
     
    mysql_close($link);
     
    ?>
    Und hier eine der dazugehörigen Fehlermeldungen:
    Anfrage fuer MAX(id) in 'tl_article' war nicht erfolgreich. Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'at_maxID_sel' at line 1
    Den MySQL-Code habe ich aber in phpmyadmin mit der betreffenden Datenbank getestet und da ging es perfekt.

    Wenn ich die ganze Abfrage bezüglich der höchsten Artikel-ID weglasse, kommt folgende Fehlermeldung:
    Anfrage fuer MAX(c.tstamp) in 'tl_content' war nicht erfolgreich. Error: Access denied for user '*********'@'localhost' (using password: NO)
    Ich bin nach folgender Anleitung vorgegangen und habe auch die Autoload.php generiert:
    http://de.contaowiki.org/Eigene_inse...spiel_Contao_3

    Nur wie gesagt... die Sache mit dem Zugriff auf die Datenbank, da versteh ich einiges noch nicht.

    Wie mach ich das?
    Geändert von pyretta (20.02.2014 um 11:52 Uhr)

  6. #6
    Contao-Fan
    Registriert seit
    26.05.2013.
    Ort
    Berlin
    Beiträge
    382

    Standard

    mach es doch nicht so kompliziert; ich benutze einfach die Erweiterung
    [last_change] , die funktioniert sogar unter 3.2.7; kann man unterschiedliche Zeitstempel abfragen und im Frontend anzeigen lassen;
    last_update gefiel mir für den Zweck auch nicht um den Betrachter auf die letzte Änderung oder Speicheung hinzuweisen

  7. #7
    Contao-Nutzer
    Registriert seit
    25.05.2010.
    Beiträge
    211

    Standard

    Vielen Dank VGT!
    Das werde ich gleich ausprobieren. Klingt jedenfalls genau nach dem was ich brauche. Super!

  8. #8
    Contao-Nutzer
    Registriert seit
    25.05.2010.
    Beiträge
    211

    Standard

    Habe das Modul installiert. Funktioniert perfekt! Nochmal vielen Dank!

    Ich hab es in das "fe_page.html5" Template eingefügt, damit es immer automatisiert auf jeder Seite erscheint ohne dass ich mich weiter darum kümmern muss. Super Sache!

    Hier der Beispiel-Code dafür:
    HTML-Code:
    [...]
    <div id="main">
    <div class="inside">
    <?php echo $this->main; ?>
    <div class="editdate">
    <p>zuletzt aktualisiert am: {{last_change_page::{{page::id}}::all::date}}</p>
    </div>
    [...]

  9. #9
    Contao-Fan
    Registriert seit
    26.05.2013.
    Ort
    Berlin
    Beiträge
    382

    Standard

    die Idee ist auch nicht schlecht ..., ich hatte es sonst nur direkt im Artikel oder Inhaltselement eingetragen

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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