$this ist NULL in {php}-Blöcken

Betten-Ritter

Aktives Mitglied
10. Juni 2014
15
0
Hallo liebe Community.
Ich arbeite gerade daran unser Template ein wenig anzupassen und ein paar nette Sonderfunktionen einzubauen. An einer Stelle benötige ich leider php. In im php-Block selbst muss ich auf eine Variable zugreifen.
Im alten Shop ging das problemlos mit
Code:
$this->get_template_vars("Artikel")
// oder
$this->_tpl_vars["Artikel"]
. Mittlerweile gehen allerdings beide Varianten nicht mehr.

Nach einigem Debugging habe ich festgestellt, dass $this NULL ist.
Wie soll ich jetzt auf das Smarty-Objekt zugreifen, bzw. wie komme ich an Templatevariablen?

Den php-Code brauche ich weil ich einige Berechnungen vollziehen muss und dazu noch ein paar php-Funktionen brauche, die es so nicht in Smarty gibt.
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.477
289
AW: $this ist NULL in {php}-Blöcken

$this ist eine Referenz auf das Objekt, zu welchem die Methode gehört, in der es verwendet wird.

In welcher Datei rreferenzierst du denn auf get_template_vars? Wenn du das über die functions.php machen willst, oder generell auf Plugin Ebene, muss du die Funktion über das Smarty Objekt aufrufen, also

Code:
$smarty->get_template_vars('Artikel');

Und das war meiner Meinung nach bei JTL schon immer so.
 

ag-websolutions.de

Sehr aktives Mitglied
29. Dezember 2009
14.548
232
AW: $this ist NULL in {php}-Blöcken

Sofern wir von Shop 4 reden .... php-Blöcke werden im aktuellen Smarty nict mehr unterstützt

[h=3]IMPORTANT NOTICE[/h] {php} tags are deprecated from Smarty, and should not be used. Put your PHP logic in PHP scripts or plugin functions instead.

[h=3]Note[/h] As of Smarty 3.1 the {php} tags are only available from SmartyBC.
 

Betten-Ritter

Aktives Mitglied
10. Juni 2014
15
0
AW: $this ist NULL in {php}-Blöcken

Ich referenziere in productdetails/details.tpl darauf. Also auf Template-Ebene. $smarty ist auch NULL.
Getestet mit:
Code:
<!-- {php}var_dump($smarty);{/php} -->
Ergebnis:
Code:
<!-- NULL 
 -->
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.477
289
AW: $this ist NULL in {php}-Blöcken

Wenn du eh auf der details.php bist, warum gehst du dann nicht direkt über da Smarty Objekt {$Artikel}?
 

Betten-Ritter

Aktives Mitglied
10. Juni 2014
15
0
AW: $this ist NULL in {php}-Blöcken

Weil ich $Artikel->Preise->SonderpreisBis_en in einer Variable im php-Code benötige. Ich hab damals ziemlich lange versucht den Code nur mit Smarty umzusetzten, bin dann aber auf php umgestiegen weil es einfach war.

Vielleicht kannst du (oder jemand anders) folgenden php-Block in pures Smarty umwandeln. Ich konnte es nicht:

Code:
               {php}
                  $remainingTime = strtotime($this->get_template_vars("Artikel")->Preise->SonderpreisBis_en . " +1 day") - time();
                  $hours = intval( $remainingTime / 3600 );
                  $minutes = intval( $remainingTime / 60 ) % 60;
                  $seconds = intval( $remainingTime % 60 );
                  
                  printf("%02d:%02d:%02d", $hours, $minutes, $seconds);
                {/php}
 

Betten-Ritter

Aktives Mitglied
10. Juni 2014
15
0
AW: $this ist NULL in {php}-Blöcken

Sofern wir von Shop 4 reden .... php-Blöcke werden im aktuellen Smarty nict mehr unterstützt

@ag-websolutions.de: Ich habe das ganze mal testweise in die funtions.php eingetragen und dann die Funktion aufgerufen. Bei Aufruf stürzt das Skript einfach ab und die Seite wird nur bis zu dem Punkt erzeugt. Ein PHP-Fehler wird nicht angezeigt und im Log konnte ich auch nichts finden.

Der Code sieht so aus:

Code:
// Alle anderen "registerPlugin"-Aufrufe
$smarty->registerPlugin('function', 'calculate_ticker', 'calculate_ticker');

// Alle anderen Funktionen

/**
 * @param JTLSmarty $smarty
 * @return string
 */ 
function calculate_ticker(&$smarty) {
    $remainingTime = strtotime($smarty->get_template_vars("Artikel")->Preise->SonderpreisBis_en . " +1 day") - time();
    $hours = intval( $remainingTime / 3600 );
    $minutes = intval( $remainingTime / 60 ) % 60;
    $seconds = intval( $remainingTime % 60 );
    
    return sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds);
}

Und im Template:

Code:
{calculate_ticker()}
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.477
289
AW: $this ist NULL in {php}-Blöcken

Wenn du mit PHP besser klar kommst, bau dir halt eine entsprechende Funktion in die functions.php und schick die ans Template. Als Parameter kannst du dir die Preise übergeben.

Code:
function meineFunktion($params, &$smarty) {
    
    $Preise= $params['Preise'];

    $neuePreise = '';
    
    $smarty->assign($params['return'], $neuePreise);
    
}
$smarty->register_function("meineFunktion", "meineFunktion");

und dann in der tpl

Code:
{meineFunktion Preise=$Artikel->Preise return="neuePreise"}

{$neuePreise|@debug_print_var}
 

Betten-Ritter

Aktives Mitglied
10. Juni 2014
15
0
AW: $this ist NULL in {php}-Blöcken

Habs jetzt hinbekommen. Danke für eure Hilfe!

Das jetzt php-Blöcke deprecated sind ist echt nervig...
Aber gut, wenn ich das jetzt weis kann ich das in Zukunft anders machen.
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Kaufland ist aktuell verschwunden - Verkaufskanal deaktiviert! kaufland.de - Anbindung (SCX) 8
Neu Frage an die (Hobby-) Controller: B2C Einzelhandel mit 6% Marketingbudget - das ist normal? Business Jungle 7
Dashboard ist nicht aktiviert JTL-Wawi 1.9 0
Ihre Subscriptionszeit (2024-09-19) ist abgelaufen. Einrichtung JTL-Shop5 2
Neu JTL2Datev ist defekt bei mir seit dem Update von 30.10.2024 User helfen Usern - Fragen zu JTL-Wawi 6
Welche Barcodeschriftart ist zu verwenden, damit der Druck auch von einem iOS-Gerät korrekt ausgeführt wird? JTL-Wawi App 7
Neu Verbindung ist Track&Trace ist gestört JTL-Track&Trace - Fehler und Bugs 10
Neu Artikelnamen auf der Homepage vollständig sehen. Er ist wenn er zu lang ist verkürzt. Allgemeine Fragen zu JTL-Shop 2
Neu Workflow der prüft, ob eine Bestellung komplett aus einem bestimmten Lager lieferbar ist. User helfen Usern - Fragen zu JTL-Wawi 7
Neu Community Free Edition ist nicht mehr kostenlos? Installation / Updates von JTL-Shop 7
Neu WooCommerce JTL Connector nach Back-Up ist deaktiviert WooCommerce-Connector 1
Neu Alles aus dem Composer ist verschwunden Allgemeine Fragen zu JTL-Shop 1
Neu Warum ist der Ameisen Export so langsam? JTL-Ameise - Ideen, Lob und Kritik 22
Neu Meldung: "Ihre Auswahl ist leider nicht verfügbar" ist irritierend Betrieb / Pflege von JTL-Shop 10
Neu Kunden in UK - was ist der sinnvollste Weg? Business Jungle 8
Neu Wo ist denn unser Lieblings-Mod "Manuel"? User helfen Usern 5
Neu Beim Retouren anlegen, Retourenposition ist nicht verfügbar Installation / Updates von JTL-Shop 2
Neu Amazon Lister 2.0 - Code 99016 - Ein Maximum von 1 Vorkommen (oder Vorkommnissen) ist für das Attribut color zulässig Amazon-Lister - Fehler und Bugs 1
Neu Amazon Lister 2.0 ...ist erforderlich, wird aber nicht bereitgestellt. Amazon-Lister - Fehler und Bugs 2
Das Remotezertifikat ist laut Validierungsverfahren ungültig JTL-Wawi 1.8 2
Neu Upload Modul - ist nicht rückgängig zu machen Allgemeine Fragen zu JTL-Shop 3
Neu Abholung mit DHL: Ist das immer so schlimm? User helfen Usern 5
Neu Probleme mit Varianten dann Stückliste und beim Hinzufügen ist dann schluss JTL-Wawi - Fehler und Bugs 7
Neu Es ist nicht mehr möglich Artiekl bei eBay einzustellen Code 240 und Code 21920203 eBay-Anbindung - Fehler und Bugs 2
Neu Stornierte Aufträge werden mit "Ist bezahlt" JA gekennzeichnet JTL-Wawi - Ideen, Lob und Kritik 21
Gelöst Gibt es einen Cash-Recycler der kompatibel ist? Allgemeine Fragen zu JTL-POS 2
Neu Verkaufskanalverwaltung: languageIso / Der Wert darf nicht NULL sein. Shopware-Connector 1
Neu Bestand auf einem Amazon-Marktplatz auf Null setzen. User helfen Usern - Fragen zu JTL-Wawi 0
Welche Einstellung für "Überverkäufe nicht mehr möglich" wenn "alle Lagerbestände null" sind. JTL-Wawi 1.9 5

Ähnliche Themen