Franz Holzinger

Verse of the day

Bei Gott ist mein Heil, meine Ehre, der Fels meiner Stärke; meine Zuversicht ist auf Gott.
Psalm 62:7

© Bible Gateway's Verse of the Day


autor  
19-10-18 00:17:15 Rechnen mit Verkaufsstart, -ende
Matthias Leiser
Hallo,

Ich möchte einen Marker erstellen mit dem Verkaufsstart-Datum + einen festen Wert von Tagen. Zum Beispiel:
MARKER_TEST_1 = COA
MARKER_TEST_1 {
10 = TEXT
10.value = 1514761200 + 10 * 86400
10.prioriCalc = 1
10.strftime = %d.%m.%Y
}
So kann ich vom Timestamp (1514761200 = 01.01.2018) 10 Tage (10 * 86400) dazu rechnen und das Resultat im Format ausgeben.

Nun möchte ich die Timestamp und Tages Werte mit variable ersetzten aber das Funktioniert nicht.

1. Im Setup habe ich date_stdWrap.strftime > gelöscht damit ich im ###PRODUCT_SELLSTARTTIME### den Timestamp erhalte
2. Marker im Setup erstellen:
MARKER_TEST_1 = COA
MARKER_TEST_1 {
10 = TEXT
10.value = ###PRODUCT_SELLSTARTTIME##
}
Da liefert er mir den Timestamp.
3. Mit strftime = %d.%m.%Y liefert er mir aber 01.01.1970:
MARKER_TEST_1 = COA
MARKER_TEST_1 {
10 = TEXT
10.value = ###PRODUCT_SELLSTARTTIME##
10.strftime = %d.%m.%Y
}

Die Rechnerei wie im oberen Beispiel geht dann natürlich auch nicht.

Wie kann erreichen einen Marker zu erstellen mit dem Verkaufsstart-Datum + einen festen Wert von Tagen?

Vielen Dank für die Hilfe!
MattMa
19-10-18 09:39:10 tt_products Produktliste leerer Inhalt
Franz Holzinger
tt_products liest in der Produktliste nur jene Felder aus der Datenbank ein, zu denen es im Shop Template Marker für das aktuelle Plugin vorfindet. Das geschieht, um es zu beschleunigen und keine unnötigen Daten einzulesen.
Wenn aber Auswertungen verschiedener Art erfolgen sollen, auch wenn es keine Marker im Shop Template gibt, dann kann das über das Setup festgelegt werden.

plugin.tt_products.conf.tt_products.ALL {
requiredFields := addToList(sellstarttime)
}



19-10-18 12:46:16 hat keine Wirkung
Matthias Leiser
Hallo Herr Holzinger

Vielen Dank für die Antwort.
Das geht aber trotzdem nicht.
Es ist mir schon klar wenn es keinen Marker im Template gibt, dass ich das Feld mit addToList in der conf hinzu fügen muss. Den Marker habe ich zu Testzwecken im Template hinzugefügt.

MARKER_TEST_1 = COA
MARKER_TEST_1 {
10 = TEXT
10.value = ###PRODUCT_SELLSTARTTIME###
20 = TEXT
20.value = /
30 = TEXT
30.value = ###PRODUCT_SELLSTARTTIME###
30.strftime = %d.%m.%Y
}
Liefert mir: 1514761200/01.01.1970
Der Timestamp ist korrekt aber bei der strftime umwandlung entsteht 01.01.1970 wie wenn der Timstamp 0 wäre.
Wäre es möglich mit data = field:??? oder dataWrap = {field:???} den Timestamp ein zu lesen?
Eine andere Möglichkeit wäre die Daten direkt aus der DB zu lesen. Zum Beispiel mit dataWrap = DB:tt_products:{field:???}:sellstarttime aber da müsste ich wieder die product-id (field:) des aktuellen Datensatz wissen.

Vielen Dank für die Hilfe.
MattMa
19-10-18 13:05:58 ohne strftime
Franz Holzinger
Wie sieht denn der Wert aus, wenn kein strftime verwendet wird? Stimmt dann die sellstarttime bzw. die Ausgabe für den Marker ###MARKER_TEST_1###?

Es könnte auch an einem Fehler in der Einstellung der Zeitzone liegen. Siehe
http://php.net/manual/de/function.strftime.php
19-10-18 13:32:24 ohne strftime ist OK = Timestamp
Matthias Leiser
Wiie im oberen Beispiel liefert der Marker ###MARKER_TEST_1### den Timestamp (1514761200 bei 01.01.2018) das ist korrekt weil ich ja im Setup mit date_stdWrap.strftime > den strftime gelöscht habe.
Wenn ich aber beim marker strftime = %d.%m.%Y verwende geht es nicht.
Übrigens date_stdWrap.strftime = %d.%m.%Y würde korrekt arbeiten. Das verwende ich nicht weil ich im Setup auf dem Marker mit dem Timestamp rechnen möchte.

Testweise habe ich beim value anstatt ###PRODUCT_SELLSTARTTIME### den Timestamp 1514761200 eingetragen und da gibt er mir mit strftime = %d.%m.%Y das korrekte Datum (01.01.2018) heraus. In der ganze TYPO3 konf habe ich kein Datum Problem und mit dem einfachen Beispiel klappt es auch, deshalb glaube ich nicht das es an der Zeitzone liegen kann.

Der andere Ansatz wäre eben den Timestamp aus der DB zu holen oder mitteld field:
Ich bräuchte mit DB:tt_products:{???}:sellstarttime eben die aktuelle product uid und weiss nicht wie ich diese bekomme.
19-10-18 14:42:35 Ziel: Rechnen mit Verkaufsstart im eigenen Marker
Matthias Leiser
Das folgende Ziel möchte ich erreichen aber eben mit den Werten aus "sellstarttime" des product und "newItemDays" aus den Konstanten.
Das folgende funktioniert ohne die Variablen Werte:
MARKER_TEST_1 = COA
MARKER_TEST_1 {
10 = TEXT
10.value = 1514761200 + 10 * 86400
10.prioriCalc = 1
# Ausgabe lesbar
10.strftime = %d.%m.%Y
}

Wie könnten die Werte ersetzt werden:
1514761200 => sellstarttime
10 => newItemDays

Vielen Dank für die Hilfe!
20-10-18 09:34:10 globale Marker nicht in tt_products
Franz Holzinger
Der globale Template Marker ###MARKER_TEST_1### über ein globales Setup MARKER_TEST_1 kann keine Marker aus tt_products verwenden. Denn die Marker von tt_products werden innerhalb des Ablaufs im Shop generiert und können gar nicht global zur Verfügung gestellt werden. Zumindest in der Produktliste und im Warenkorb gibt es mehrere Produkte gleichzeitig.

Man kann ein TypoScript RECORDS definieren, und dort als Parameter tables auf tt_products zugreifen und den Parameter tt_products[product] auswerten.
Siehe https://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/Records/Index.html .

Alternativ kann ein Marker wie ###PRODUCT_SELLSTARTTIME### für jedes Feld mit einem anderen Konstrukt überschrieben werden.

plugin.tt_products.conf.tt_products.LIST.field.sellstarttime = COA
plugin.tt_products.conf.tt_products.LIST.field.sellstarttime {
10 = TEXT
10.value = ###PRODUCT_SELLSTARTTIME###
20 = TEXT
20.value = /
30 = TEXT
30.value = ###PRODUCT_SELLSTARTTIME###
30.strftime = %d.%m.%Y
}

20-10-18 09:44:09 Beispiel für tt_news
Franz Holzinger
Die Beispiele für die Extension tt_news lassen sich auf ähnliche Art auch mit tt_products nutzen. Statt RECORDS kann auch das TypoScript CONTENT verwendet werden, um Inhalte der Tabelle tt_products auszulesen.

temp.newscat = CONTENT
temp.newscat {
table = tt_news_cat
select {
pidInList = 46 # Sysfolder-ID der News
andWhere {
data = GPvar:tx_ttnews|cat
wrap = uid=|
}
}
renderObj = TEXT
renderObj.field = title

}
22-10-18 18:54:52 GP var liefert leer
Matthias Leiser
Die GP variable liefert mir nicht mit:
plugin.tt_products.marks {
NEWPRODUCT = COA
NEWPRODUCT {
10 = CONTENT
10 {
table = tt_products
select {
pidInList = 10
andWhere {
data = GP:tx_ttproducts|product
wrap = uid = |
}
}
renderObj = COA
renderObj {
10 = TEXT
10.field = sellstarttime
}
}
}

Wenn ich Testweise keine GP definiere mit der festen 1 (wrap = uid = 1|) geht es aber eben nur mit dem 1 Datensatz.
plugin.tt_products.marks {
NEWPRODUCT = COA
NEWPRODUCT {
10 = CONTENT
10 {
table = tt_products
select {
pidInList = 10
andWhere {
wrap = uid = 1|
}
}
renderObj = COA
renderObj {
10 = TEXT
10.field = sellstarttime
}
}
}

Brauche aber GP:tx_ttproducts|product.
Was mach ich falsch?
22-10-18 21:00:34 tt_products Parameter
Franz Holzinger
Die Parameter in der Url werden doch als "tt_products[product]" angezeigt.


data = GP:tt_products|product
22-10-18 21:39:17 keine GP var in der LIST
Matthias Leiser
Der Marker ist im LIST
Ich kann es drehen und wenden es geht in LIST ansicht nicht.

plugin.tt_products.marks {
NEWPRODUCT = COA
NEWPRODUCT {
10 = TEXT
10.data = DB : tt_products:1:sellstarttime
}
habe ich das Ding, aber eben mit dem fixen Datensatz 1.
Wie bringe ich die aktuelle uid anstelle der fixen 1 hinein.
22-10-18 21:56:26 mit ###PRODUCT_UID###
Matthias Leiser
plugin.tt_products.marks {
NEWPRODUCT = COA
NEWPRODUCT {
10.value = ###PRODUCT_UID###
10.dataWrap = DB : tt_products:|
10.wrap3 = |:sellstarttime
}
}
Da werden mir die Marker und die uid korrekt gesetzt, kommen aber als String heraus:
DB : tt_products:1:sellstarttime
DB : tt_products:4:sellstarttime
DB : tt_products:2:sellstarttime
DB : tt_products:15:sellstarttime
Wie bringe ich das ganze jetzt noch dazu den String aus zu führen?
22-10-18 22:06:24 strftime
Franz Holzinger
Sie müssen, wie anfangs, wieder ein strftime verwenden.
23-10-18 06:43:08 aktuelle product und im marker
Matthias Leiser
meine Frage ist wie ersetze ich Product-und im Marker der im LIST view.
Zum Bespiel habe ich den fixen Datensatz 1 den ich mit der aktuellen uid des product ersetzen möchte (LIST view):
DB:tt_products:1:sellstarttime
23-10-18 15:00:36 unklar
Franz Holzinger
Was genau wollen Sie noch probieren?

23-10-18 15:37:06 aktuelle produkt uid im marker für DB Abfrage
Matthias Leiser
oha, da hat mir die Rechtschreibekorr. vom iPad reingefunkt

Also ich habe einen Marker (###NEWPRODUCT###) im Template ###ITEM_LIST_TEMPLATE### erstellt.
Dieser marker ist im Subpart ###ITEM_CATEGORY_AND_ITEMS### -> ###ITEM_LIST### -> ###ITEM_SINGLE### und wird für jedes Produkt auf der Liste verarbeitet.
Bei diesem Marker möchte ich die DB (tt_products) abfragen mit dem jeweiligen Produkt und das Feld "sellstarttime" (ich brauche den Timstamp von sellstarttime für die weitere verarbeitung und prüfung).
Diesen Marker habe ich im Setup so definiert:
plugin.tt_products.marks {
NEWPRODUCT = COA
NEWPRODUCT {
10 = TEXT
10.data = DB : tt_products:1:sellstarttime
}
}
Da erhalte ich den Timestamp ganz korrekt vom Feld sellstarttime ganz korrekt aber eben vom Datensatz 1 (DB:tt_products:1:sellstarttime). Deshalb sollte die 1 mit der jeweils aktuellen uid des Produkt ersetzt werden. Mein versuch mit:
plugin.tt_products.marks {
NEWPRODUCT = COA
NEWPRODUCT {
10.value = ###PRODUCT_UID###
10.dataWrap = DB : tt_products:|
10.wrap3 = |:sellstarttime
}
}
scheitert weil ich als Ausgabe im Marker jeweils den String:
DB : tt_products:1:sellstarttime
DB : tt_products:4:sellstarttime
... usw. erhalte aber nicht den jeweiligen Timstamp vom sellstarttime Feld.

Es zeigt mir aber das ich Grundsätzlich mit dem Marker ###PRODUCT_UID### arbeiten könnte.

23-10-18 15:55:54 Programmierung
Franz Holzinger
Für eine solche Anwendung wäre eine Programmierung erforderlich. Denn dieses TypoScript für den globalen Marker dürfte erst innerhalb des Ablaufs des Shops ermittelt werden. Es wäre dann gar kein globaler Marker mehr. Man müsste eigens einen lokalen Marker innerhalb des ITEM_SINGLE Bereichs (###ITEM_SINGLE###) im LIST-Template (###ITEM_LIST_TEMPLATE###) definieren.

< Zurück zum Forum