$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.695
350
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
233
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.695
350
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.695
350
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 Shipping 2.0 ist da: kurzer Überblick + Einladung zum Webinar News, Events und Umfragen 94
Neu Rechnungen zeigen Paypal Text an, obwohl er in der Vorlage nicht ausgewählt ist JTL-Wawi 2.0 3
Beantwortet Aktuelles Sicherheitsupdate - wo ist die Anleitung zum manuellen Beheben? Allgemeine Fragen zu JTL-Shop 5
Neu Ist es ohne Probleme möglich Cloudflare in der Free Version mit JTL zu nutzen? Allgemeine Fragen zu JTL-Shop 7
Neu Connector 2.1.6 ist Live ! Releaseforum 0
Neu Release Shopify-Connector 2.1.6 ist Live Shopify-Connector 38
Neu JTL Lizensserver ist nicht erreichbar eBay-Anbindung - Fehler und Bugs 0
Neu Ab welcher JTL Wawi Version ist der OnPremise REST API Endpoint POST /v2/returns oder POST /v1/returns für Create Return verfügbar? Schnittstellen Import / Export 0
Neu Die Bilanz ist da Smalltalk 0
Keine Rückmeldung in JTL Wawi sobald SQL Server Memory durch Database Cache ausgeslastet ist JTL-Wawi 2.0 9
Wie ist euer aktuelles Fazit zur 2.02? JTL-Wawi 2.0 14
Neu Der Inhalt / Text ist verschwunden – ist das ein Fehler JTL-Shop - Fehler und Bugs 0
Plattformabgleich Shop löschen - Wo ist das in der MySQL DB? JTL-Wawi 2.0 4
Neu seit Umstellung auf DHL 4.0 ist auf DHL Aufkleber grauer Schleier im Hintergrund JTL-ShippingLabels - Fehler und Bugs 0
Aufgeblähte DB bereinigen (dbo.POS_Bon) - Welches Vorgehen ist empfehlenswert? JTL-Wawi 1.10 11
Neu Google Shopping: g:product_type mit Attribut befüllen ist immer DE, obwohl mehrsprachig angelegt Plugins für JTL-Shop 0
Update auf Shop 5.5.0 von 5.4.1 ist der Shop nicht mehr erreichbar Upgrade JTL-Shop4 auf JTL-Shop5 4
Neu Schlüssel ist im angegebenen Status nicht gültig Einrichtung / Updates von JTL-POS 4
Neu Internetmarke 2.0 Beta – Value cannot be null. Parameter name: accessToken JTL-ShippingLabels - Fehler und Bugs 24
Neu Internetmarke 2.0 Beta – „Value cannot be null (accessToken)“ JTL-ShippingLabels - Fehler und Bugs 6

Ähnliche Themen