Zum Inhalt springen

dynamisches Contentelement

Erstellt am 17. Juni 2014 · 16 Antworten · letzte Antwort am 25. Juni 2014

Tags: TYPO3 6.x, Frage

typo3_hp ·

Guten Abend!

Für eine Bar mit täglich wechselnden Aktionen, habe ich folgende Anforderung:

Es soll die am aktuellen Tag gültige Aktion angezeigt werden.

Ich möchte das gerne nicht im Template als Marker machen, sondern auf der Startseite ein Contentelement einfügen "heutige Aktion", welches z.B. über Typoscript-Conditions Wochentag=X befüllt wird (mit einem Verweis auf ein weiteres Contentelement-> die gültige Aktion)

Es würde also auf der Startseite das eine Element "heutige Aktion" geben und auf einer anderen Seite die 7 Contentelemente (Mo,Di,Mi,Do,Fr,Sa,So). Nun soll das Element auf der Startseite je nach Tag das richtige Contentelement (der sieben) gemappt bekommen.
Wie kann ich dies machen?

Danke und LG

toifel ·

Mit date:N solltest du im Typoscript den Wochentag auslesen können. 1 steht für Montag und wird entsprechend hochgezählt. Hier ein kleines Beispiel womit geprüft wird, ob heute (also Mittwoch, der 3. Tag der Woche) ist..

page.10.marks.content = COA
page.10.marks.content {
	10 = TEXT
	10.value = HEUTE
	10.if {
		value.data = date:N
		equals = 4
	}
	
	20 = TEXT
	20.value = NICHT HEUTE
	20.if {
		value.data = date:N
		equals = 4
		negate = 1
	}
}
typo3_hp ·

Hallo Zusammen!

Danke, das passt soweit!
Mir ging es aber primär darum, wie ich das Contentelement dynamisch befüllen kann. Kein Marker im Template!

Ich hätte gerne auf der Startseite ein Content-Element (Text und Bild), welches ich je nach Wochentag mit einem anderen Content-Element (von einer Sys-Seite) befüllen möchte.

Danke

typo3_hp ·

Super!

Vielen Dank!

Geht genau in die Richtung, was ich suche.
Kann mir hier noch jemand helfen, ich würde mittels der EXT typoscript_code ein anderes Contentelement je nach Wochentag zuordnen.

Das Skript scheint aber nicht zu stimmen. Da der Content egal an welchem Wochentag angezeigt wird.

    10 = TEXT
    10.value = HEUTE
    10.if {
    value.data = date:N
    equals = 4
    }
    
20 = CONTENT
20 {
    table = tt_content
    select {
        # Seite mit ID X ist Quelle
        pidInList = 13
        #languageField = sys_language_uid
        orderBy = sorting
        # colPos=2 ist Spalte 'RECHTS'
        where = colPos=0
      
    }
    20.if {
    value.data = date:N
    equals = 4
    negate = 1
    }

Danke und LG

jenses ·

Das Öffnen und Schließen der geschweiften Klammern sollte man schon korrekt durchführen,
schau dir dein TS noch mal selbst dahingehend an...

typo3_hp ·

Vielen Dank!

Leider funktioniert es aber immer noch nicht. Der Contentverweis wird in jedem Fall angezeigt, nicht nur - wie gewollt - donnerstags.

    10 = TEXT
    10.value = HEUTE
    10.if {
    value.data = date:N
    equals = 4
    }
     
    20 = CONTENT
    20 {
    table = tt_content
    select {
    # Seite mit ID X ist Quelle
    pidInList = 13
    #languageField = sys_language_uid
    orderBy = sorting
    # colPos=2 ist Spalte 'RECHTS'
    where = colPos=0
     
    }
    
    if {
    value.data = date:N
    equals = 4
    negate = 1
    }

}

Danke und LG

jenses ·

CONTENT hat keine Eigenschaft if,
wohl aber stdWrap,
also:

20 = CONTENT
20 {
   ...
   stdWrap.if {
   ...
   }
}
typo3_hp · · Beste Antwort

Vielen dank,

irgendwie tue ich mir schwer mit dem Script:

Habe es so:

20 = CONTENT
    20 {
    table = tt_content
    select {
    # Seite mit ID X ist Quelle
    pidInList = 13
    #languageField = sys_language_uid
    orderBy = sorting
    # colPos=2 ist Spalte 'RECHTS'
    where = colPos=0
      }
      
    20.stdWrap.if {
    value.data = date:N
    equals = 4
    negate = 1
    }

und so:

20 = CONTENT
    20 {
    table = tt_content
    select {
    # Seite mit ID X ist Quelle
    pidInList = 13
    #languageField = sys_language_uid
    orderBy = sorting
    # colPos=2 ist Spalte 'RECHTS'
    where = colPos=0
    }
      
    stdWrap.if {
    value.data = date:N
    equals = 4
    negate = 1
    }
    }

versucht, jedoch wird immer noch in allen Fällen das Contentelement angezeigt.

Was mache ich falsch?

Danke und LG

Chrissli ·

Ich lasse mich gerne korrigieren, aber die If-Bedingung sagt doch gerade aus "zeige den Inhalt wenn der Tag nicht '4' ( Donnerstag? ) ist ".

War das denn der Plan? So kommt der Inhalt der Seite mit der ID 13 ja an allen Tagen ausser Donnerstags, oder nicht?

Edit: Gibt es date:N überhaupt? Analog zur PHP-Formatierung aus strftime sollte das doch vermutlich date:u sein?

jenses ·

Variante 2 ist korrekt und funktioniert (getestet).
Cache gelöscht?
Sicher, daß das TS auch ausgeführt wird?
Wird es eventuell später irgendwo überschrieben?

jenses ·
Chrissli schrieb

Ich lasse mich gerne korrigieren, aber die If-Bedingung sagt doch gerade aus "zeige den Inhalt wenn der Tag nicht '4' ( Donnerstag? ) ist ".

Ja, genau das macht sie.
Entfernt man das negate = 1, ist die Funktionsweise umgekehrt.

Chrissli ·
jenses schrieb
Chrissli schrieb

Ich lasse mich gerne korrigieren, aber die If-Bedingung sagt doch gerade aus "zeige den Inhalt wenn der Tag nicht '4' ( Donnerstag? ) ist ".

Ja, genau das macht sie.
Entfernt man das negate = 1, ist die Funktionsweise umgekehrt.

Ok, ich hab den Gesprächsverlauf nämlich so interpretiert, dass eigentlich der Content Donnerstags ( in diesem Fall jetzt ) angezeigt werden soll, entsprechend wäre das negate=1 dann ja fehl am Platz, oder seh ich das falsch?

typo3_hp ·

Suupi ;-)

das war es tatsächlich!
Habe das negate nun entfernt und für jeden Tag der Woche ein Block angelegt.
PASST!

Lieben Dank noch einmal!

Chrissli ·

Als kleiner Tipp für die Übersichtlichkeit:

temp.heute = COA
    #montag
    10 = CONTENT
    10 {
        table = tt_content
        select {
            # Seite mit ID X ist Quelle
            pidInList = 13
            #languageField = sys_language_uid
            orderBy = sorting
            # colPos=2 ist Spalte 'RECHTS'
            where = colPos=0
        }
     
        stdWrap.if {
            value.data = date:N
            equals = 1            
        }
    }
    # dienstag
    20 < .10
    20.select.pidInList = 14
    20.stdWrap.if.equals = 2
    
    # mittwoch
    30 < .10
    30.select.pidInList = 15
    30.stdWrap.if.equals = 3
    
    ...
}

Aber das kennst du ja sicher 😃

Und dann den Thread als gelöst markieren XD