$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.704
355
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.704
355
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.704
355
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 Selektieren aller Artikel, bei denen NICHT 'Preis aus Registerkarte JTL Wawi" eingestellt ist? User helfen Usern - Fragen zu JTL-Wawi 1
Neu Nach Update von POS ist alles groß dargestellt Sunmi t2 Allgemeine Fragen zu JTL-POS 6
Neu System für Ebay Artikelmerkmale - warum ist das so wichtig? User helfen Usern - Fragen zu JTL-Wawi 0
Neu onpage SEO auf SW - Was ist mit der Wawi? Shopware-Connector 1
Neu Shipping 2.0 ist ein Grund für kleine Shops JTL zu verlassen bzw. gar nicht erst mit JTL anzufangen JTL-ShippingLabels - Ideen, Lob und Kritik 26
Neu Wenn kein Land angegeben ist wird Ecuador JTL-Wawi - Fehler und Bugs 1
Format der E-Mail Adresse ist ungültig. Otto.de - Anbindung (SCX) 0
Neu Deine Meinung ist gefragt: direkte Anbindung der Schweizerischen Post (CH Post) in Shipping 2.0? Umfragen rund um JTL 2
Admin Zugang JWL WAWI ITler ist weg. JTL-Wawi 1.11 5
Neu Amazon Artikel ist mit Vaterartikel verknüpft Amazon-Anbindung - Fehler und Bugs 1
Neu Shipping 2.0 ist da: alle Infos zum Start, Webinar-Aufzeichnung & Q&A News, Events und Umfragen 0
Neu Verschieben ist immer nur 1x möglich JTL-Wawi - Fehler und Bugs 6
Neu JTL-ShippingLabels-Server ist nicht erreichbar JTL-Wawi - Fehler und Bugs 0
Wichtig Shipping 2.0 ist da: kurzer Überblick + Einladung zum Webinar News, Events und Umfragen 138
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 49
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 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