$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 Service Partner
SPBanner
6. September 2012
3.724
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 Service Partner
SPBanner
6. September 2012
3.724
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 Service Partner
SPBanner
6. September 2012
3.724
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