Ergebnis 1 bis 7 von 7

Thema: Modul - Textgrafik 'Update' Anzeige für 7 Tage auf der Startseite

  1. #1
    Contao-Nutzer
    Registriert seit
    22.06.2010.
    Beiträge
    29

    Frage Modul - Textgrafik 'Update' Anzeige für 7 Tage auf der Startseite

    Hallo Leute.

    Ich programmiere gerade ein Script, welches ich mittels inserttag auf der Seite ausgebe.
    Konkret handelt es sich um eine kleine Textgrafik mit dem Inhalt "Update", die nur auf der Startseite erscheint, wenn auf meiner Bildergalerieseite ein neuer Artikel veröffentlicht worden ist.

    Das Script ist soweit schon fertig und funktioniert (ist ja noch nichts aufwendiges ).

    Allerdings fehlt noch das wichtigste - und zwar soll die Grafik bis längstens 7 Tage nach Erstellung des letzten Artikels angezeigt werden.

    so sieht die Baustelle momentan aus:

    Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    // Datei /system/modules/myinserttag/MyClass.php
     
     class myinserttags extends Frontend
     {
        public function myReplaceInsertTags($strTag)
        {
            $arrSplit = explode('::', $strTag);
     
            if ($arrSplit[0] == 'update')
            {
                if (isset($arrSplit[1]) && $arrSplit[1] == 'img')
                {
    				{
    					$var_pid1 = $this->replaceInsertTags( '{{insert_article::31}}' );
    					
    					$daten1 = 
    					
    					//NUR TEST!!! echo $var_pid1;
    				
    				}
    				$var_pid2 = $this->replaceInsertTags( '{{env::page_id}}' );
    				$date = $this->replaceInsertTags( '{{date::d.m.}}' );
    				
    				if ($var_pid2 == '2') {
    					return "<img class=\"noborder\" src=\"tl_files/nvd-graz/media/intern/grafiken/update.png\" width=\"35\" height=\"12\" />
    					$date";
    				}
    			} else {
                    return 'Fehler! foo ohne Parameter!';
    			}
    		}
            // nicht unser Insert-Tag
            return false;
        }
     }
     
    ?>
    Mittels der Abfrage zur Variable $var_pid1 habe ich schon mal den kompletten Inhalt aus der Bildgalerieseite geladen.

    Die Inhalte sind, so vermute ich mal alle in einem Datenarray in der Variable $var_pid1 geladen. Jetzt muss ich noch die Variable zum Datum aus dem Array herausholen.

    Bin beim Entwickeln in Contao noch ziemlicher Anfänger, ein paar Beispiele zur Entwicklung von Module habe ich schon erfolgreich abgeschlossen.


    Michael

  2. #2
    Contao-Fan
    Registriert seit
    27.11.2009.
    Beiträge
    329

    Standard

    Hallo Michael,
    ich bin zwar kein Profi und verstehe auch nicht, was genau Du da gemacht hast und ob Deine Variable wirklich die gewünschten Daten bereits enthält. Aber überprüf doch mal mit print_r(), ob das Datum drin ist (wäre dann das Feld tstamp, wobei das meines Wissens das letzte Bearbeitungsdatum ist, d.h. wenn Du den Artikel nach dem Erstellen nochmal änderst, bekommt er einen neuen tstamp).
    Falls nicht musst Du eine Datenbankabfrage machen und Dir den tstamp zur Article-ID aus der DB holen und prüfen, ob die Dfferenz zu 'jetzt' (time()) < 7 Tage (in Sekunden) ist.
    Soweit meine unbedarfte Meinung zu Deinem Problem - keine Ahnung, ob das hilft.
    Gruß!

  3. #3
    Contao-Nutzer
    Registriert seit
    22.06.2010.
    Beiträge
    29

    Standard

    Hallo tlnewbie

    Vielen Dank für den Ratschlag - nun, ich habe mittlerweile eh schon weitergewerkelt. Ohne SQL-Abfrage geht da sowieso nichts.

    Hier mal mein aktueller Stand - ich frickele noch mit der Timestampausgabe herum. Sie funktioniert zwar schon, aber die Überprüfung ist noch nicht fertig. Nun, ich muss erst mal die Variable $tstamp außerhalb der foreach Schleife laden können, was ich noch nicht geschafft habe. Die Funktion der Überprüfung der Zeitabfrage innerhalb der foreach-Schleife ergibt auch keine Lösung, da die eigentliche foreach-Schleife ja in der Anzahl der Tabellen ausgeführt wird. Aber vielleicht denke ich einfach nur zu kompliziert, wer weiß das schon.


    Michael

    Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    // Datei /system/modules/myinserttag/MyClass.php
     
     class myinserttags extends Frontend
     {
        public function myReplaceInsertTags($strTag)
        {
            $arrSplit = explode('::', $strTag);
     
            if ($arrSplit[0] == 'update')
            {
                if (isset($arrSplit[1]) && $arrSplit[1] == 'img')
                {
    				{
    					$var_pid1 = $this->replaceInsertTags( '{{insert_article::31}}' );
    					
    					$this->import('Database');
    					$timestamp = $this->Database->execute("SELECT * FROM tl_content WHERE tstamp");
    					
    					if ($timestamp->numRows)
    					{
    						$rows = $timestamp->fetchAllAssoc();						
    						
    						foreach ($rows as $tstamp)
    						{
    							//echo $tstamp['tstamp'] . "\n";
    							echo $tstamp .= $tstamp['tstamp'] . "\n";
    							/*
    							while ($tstamp as $zeit) {
    								echo $zeit;
    							}*/
    						}
    					}
    					/*
    					echo $tstamp;
    					
    					foreach ($tstamp as $test) {
    						echo $test['tstamp']."\n";
    					}*/
    					
    					//echo $tstamp;
    					
    					/*
    					$nowtime = time();
    					echo $nowtime;
    							
    					$berechnung = $dd;*/
    
    					
    					
    					
    					
    					//NUR TEST!!! echo $var_pid1;
    				
    				}
    				$var_pid2 = $this->replaceInsertTags( '{{env::page_id}}' );
    				$date = $this->replaceInsertTags( '{{date::d.m.}}' );
    				
    				if ($var_pid2 == '2') {
    					return "<img class=\"noborder\" src=\"tl_files/nvd-graz/media/intern/grafiken/update.png\" width=\"35\" height=\"12\" />
    					$date";
    				}
    			} else {
                    return 'Fehler! foo ohne Parameter!';
    			}
    		}
            // nicht unser Insert-Tag
            return false;
        }
     }
     
    ?>

  4. #4
    Contao-Fan
    Registriert seit
    27.11.2009.
    Beiträge
    329

    Standard

    mal zum Verständnis:
    willst Du denn nur die Grafik anzeigen oder den ganzen Artikel? denn {{insert_article::xx}} ist ja eigentlich dazu da, den ganzen Artikel anzuzeigen.

    und ist die 31 die ID des Artikels oder der Seite, auf der Du einen neuen Artikel veröffentlichst?

    Du brauchst doch eigentlich nur 1 tstamp abfragen und keine foreach-Schleife?!

    gruß!

  5. #5
    Contao-Nutzer
    Registriert seit
    22.06.2010.
    Beiträge
    29

    Standard

    denn {{insert_article::xx}} ist ja eigentlich dazu da, den ganzen Artikel anzuzeigen.
    Richtig. Die 31 war die ID des Artikels, also der Bildergalerie. Da die Abfrage nun eh mit SQL erfolgt, ist der Code nicht mehr gegenständlich - ich habe ihn entfernt


    Der ganze Code ist Baustelle - da verliere ich ja schon den Überblick.

    Was jedenfalls ausgeführt werden soll, wenn die Bedingung (letzter Artikel nicht älter als 7 Tage) erfüllt wird, ist folgendes:

    Code:
    return "<img class=\"noborder\" src=\"tl_files/nvd-graz/media/intern/grafiken/update.png\" width=\"35\" height=\"12\" />";
    Du brauchst doch eigentlich nur 1 tstamp abfragen und keine foreach-Schleife?!
    Ok. Da fehlt mir noch einiges an Wissen in PHP...

    rein theoretisch sollte die folgende Abfrage funktionieren:

    Code:
    $this->import('Database');
    					$timestamp = $this->Database->execute("SELECT * FROM tl_content WHERE tstamp");
    					
    					if ($timestamp as $tstamp) {
    						echo 'Ja';
    					} else {
    						echo 'Nein';
    					}
    tut sie aber nicht - Ergebnis ist nur eine weisse Seite

    Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    // Datei /system/modules/myinserttag/myinserttags.php
     
     class myinserttags extends Frontend
     {
        public function myReplaceInsertTags($strTag)
        {
            $arrSplit = explode('::', $strTag);
     
            if ($arrSplit[0] == 'update')
            {
                if (isset($arrSplit[1]) && $arrSplit[1] == 'img')
                {
    				{
    					$this->import('Database');
    					$timestamp = $this->Database->execute("SELECT * FROM tl_content WHERE tstamp");
    					
    					if ($timestamp as $tstamp) {
    						echo 'Ja';
    					} else {
    						echo 'Nein';
    					}
    										
    					/*
    					echo $tstamp;
    					
    					foreach ($tstamp as $test) {
    						echo $test['tstamp']."\n";
    					}*/
    					
    					//echo $tstamp;
    					
    					/*
    					$nowtime = time();
    					echo $nowtime;
    							
    					$berechnung = $dd;*/
    				
    				}
    				$var_pid2 = $this->replaceInsertTags( '{{env::page_id}}' );
    				
    				if ($var_pid2 == '2') {
    					return "<img class=\"noborder\" src=\"tl_files/nvd-graz/media/intern/grafiken/update.png\" width=\"35\" height=\"12\" />";
    				}
    			} else {
                    return '';
    			}
    		}
            // nicht unser Insert-Tag
            return false;
        }
     }
     
    ?>

  6. #6
    Contao-Fan
    Registriert seit
    27.11.2009.
    Beiträge
    329

    Standard

    also wenn die article-ID immer gleich ist, würde ich sowas ähnliches probieren (ungetestet!!):
    so wird der tstamp des letzten contents des articles mit der id 31 abgefragt:

    PHP-Code:
    $objResult $this->Database->prepare("SELECT tstamp FROM tl_content WHERE pid=? ORDER BY tstamp desc")
                                ->
    limit(1)
                                ->
    execute(31);

    $now time();
    $zeitraum $now 604800;

    if (
    $objResult->tstamp <= $zeitraum) {
        return 
    '<img ... ';

    Wenn Du allerdings noch anderen (aktuellen) Content im selben Artikel hast, wird der mit abgefragt - vielleicht wäre es besser, über die Bildergalerie-Tabelle zu gehen.?!
    Geändert von tlnewbie (17.04.2011 um 17:14 Uhr)

  7. #7
    Contao-Nutzer
    Registriert seit
    22.06.2010.
    Beiträge
    29

    Daumen hoch

    Hallo

    Danke für die große Hilfe!

    Ich musste noch eine Kleinigkeit in der SQL-Abfrage ergänzen, damit die Abfrage den neuesten Wert ermittelt: ORDER BY id DESC

    Code:
    $objResult = $this->Database->prepare("SELECT tstamp FROM tl_content WHERE pid=? ORDER BY id DESC")
                                ->limit(1)
                                ->execute(31); // jedenfalls die ID
    und so sieht der gesamte Code aus:
    Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    // Datei /system/modules/myinserttag/myinserttags.php
     
     class myinserttags extends Frontend
     {
        public function myReplaceInsertTags($strTag)
        {
            $arrSplit = explode('::', $strTag);
     
            if ($arrSplit[0] == 'update')
            {
                if (isset($arrSplit[1]) && $arrSplit[1] == 'img')
                {
    			
    				$objResult = $this->Database->prepare("SELECT tstamp FROM tl_content WHERE pid=? ORDER BY id DESC")
                                ->limit(1)
                                ->execute(31); // jedenfalls die ID
    
    				$now = time();
    				$zeitraum = $now - 604800;
    				
    				if ($objResult->tstamp <= $zeitraum) {
    					echo '';
    				} else {
    					return '<img class="noborder" src="tl_files/nvd-graz/media/intern/grafiken/update.png" width="35" height="12" />';
    				}
    
    			}
    		}
            // nicht unser Insert-Tag
            return false;
        }
     }
     
    ?>

    Vielen Dank nochmals und einen erholsamen Sonntag-Abend,

    Michael

Aktive Benutzer

Aktive Benutzer

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

Berechtigungen

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