$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.605
320
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.605
320
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.605
320
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
Ameisenimport ignoriert Feld "Ist Standardlieferant für Dropshipping" JTL-Wawi 1.10 2
Neu "Ist Standard Dropshipping Lieferant" per Ameise exportieren User helfen Usern - Fragen zu JTL-Wawi 2
Neu Ihr Token bei JTL-eazyAuction ist ausgelaufen - Verletzung von Nebenpflichten (Treue- und Informationspflicht) durch JTL Einrichtung und Installation von JTL-eazyAuction 3
Neu Seit ~ 1 Monat werden UPS-Etiketten fehlerhaft gedruckt - Adresse ist gar nicht oder nicht vollständig. JTL-ShippingLabels - Fehler und Bugs 0
Neu Fehlermeldung: Der angegebene Wert für "purchasable_offer" ist ungültig. | Fehlercode(s): (4000001) Amazon-Anbindung - Fehler und Bugs 11
Neu Kindartikel direkt anzeigen/auswählen wenn nur ein Kind vorhanden ist? User helfen Usern - Fragen zu JTL-Wawi 0
[Bug] DATEV Rechnungsdatenservice 2.0 – Fehlermeldung „USt-Id Nr. ist nicht geprüft oder ungültig“, obwohl Feld leer ist (Wawi 1.10.13.2 Beta) JTL-Wawi 1.10 2
Neu Shopify Basic mit JTL? Wie einrichten? Ist der JTL Guide noch aktuelle wegen PII Einschränkung? Shopify-Connector 2
Neu Wann ist JTL WaWi / Connector mit Shopware 6.7 kompatibel? Shopware-Connector 6
Neu Checkout ist nicht mehr möglich Allgemeine Fragen zu JTL-Shop 30
Preis im Warenkorb für 10 min sichern, wenn Preis geändert wurde. Ist das möglich? Einrichtung JTL-Shop5 3
Datenbank ist über 800gb groß Hilfe !!! JTL-Wawi 1.9 23
Neu Ist es nicht möglich unter Plattformen - Neukunden sich die Mobilnummer anzeigen zu lassen, mit der die Kunden sich regsitriert haben? User helfen Usern - Fragen zu JTL-Wawi 2
Neu JTL PayPal Checkout 5.3.0 mit Shop 5.5.2 - Artikel nur sichtbar wenn Kunde eingeloggt ist oder Artikel nicht verfügbar ist Plugins für JTL-Shop 6
Artikel soll laut Wawi auf der Pickliste sein. Ist er er aber nicht. JTL-Wawi 1.9 1
Neu Ist das ein BUG JTL-Ameise - Fehler und Bugs 1
Gelöst Ist JTL-POS mit dem SumUp 3G+ kompatibel? JTL-POS - Fragen zu Hardware 2
Neu Bug - Grundpreis bei Preis mit Rabatt ist falsch JTL-Shop - Fehler und Bugs 0
Neu Die Zahlungsart SOFORT ist eine Plugin-Zahlungsart für Mollie. Das zugehörige Plugin ist jedoch nicht installiert! Allgemeine Fragen zu JTL-Shop 0
Neu Wie lange ist der JTL Token gültig? Ich bekomme rel. schnell die Meldung "Fehlerhafter Token" User helfen Usern - Fragen zu JTL-Wawi 0
Wie ist euer Fazit zur 1.10? JTL-Wawi 1.10 20
Neu PayPal Plugin 2.0 - Vaulting - Ist IMMER ein neues Onboarding nötig? Wie prüfen, ob OK? Plugins für JTL-Shop 6
Neu Wenn keine Postnummer für Versand per DHL notwendig ist User helfen Usern - Fragen zu JTL-Wawi 0

Ähnliche Themen