Neu Einsteigerfragen Plugin Entwicklung bzw. Ausgabe im Template

HannesD.

Aktives Mitglied
14. März 2021
14
0
Hallo zusammen,

ich will (vorerst) im Template eine SQL-Abfrage machen, um dann das daraus erzeugte Array im Footer darzustellen:

Bootstrap.php
... public function getLatestOrders() { $query = " SELECT ...... "; $latestOrders = Shop::Container()->getDB()->query($query,2); Shop::Smarty() ->assign('latestOrdersS', $latestOrders ); Shop::dbg($latestOrders); ...

footer.tpl
... {getLatestOrders} ...

jetzt erhalte ich folgendes Array:
Bootstrap.php:77 array(3) { [0]=> object(stdClass)#12727 (6) { ["kArtikel"]=> string(5) "53203" ["nAnzahl"]=> string(6) "1.0000" ["cSEO"]=> string(28) "Testartikel" ["cName"]=> string(28) "Testartikel" ["dErstellt"]=> string(19) "2022-08-18 18:25:31" ["cOrt"]=> string(9) "Testort" } ...

Wie kann ich nun auf die einzelnen Arrayinhalte bzw. die darin enthaltenen Objekte per Smarty zugreifen?
Laut Debugger scheint eine Smartyvariable $latestOrdersS als Array mit Inhalt einer StdClass vorhanden zu sein. Ein {$latestOrdersS[0]->kArtikel} wirft jedoch folgende Warnung: "Undefined array key "latestOrdersS""

Vielleicht denke ich auch zu kompliziert. Ich will eigentlich nur eine DB-Abfrage machen und die Ergebnisse im Footer ausgeben. Gibt es da eine geschmeidigere Möglichkeit?
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.049
2.300
Berlin
Firma
css-umsetzung
Verwendest du ein Child Template?

Hast du dir im Nova mal die plugin.php angeschaut, so solltest du das machen.

Funktion anmelden. Nutzen und dann die Variable ausgeben.

Mit {$variable|dump} kannst du dir variablen im Template schön anzeigen lassen.
 

HannesD.

Aktives Mitglied
14. März 2021
14
0
Verwendest du ein Child Template?

Hast du dir im Nova mal die plugin.php angeschaut, so solltest du das machen.

Funktion anmelden. Nutzen und dann die Variable ausgeben.

Mit {$variable|dump} kannst du dir variablen im Template schön anzeigen lassen.
Vielen Dank für deine rasche Antwort :)

Ja es ist ein Child Template.

Ich weise die Variable vorerst direkt im Bootstrap zu:
Shop::Smarty() ->assign('latestOrdersS', $latestOrders );
(Laut Docs die bevorzugte Methode: https://jtl-devguide.readthedocs.io...gramming_tips/shopclass.html?highlight=assign)

Laut debugger Plugin scheint das auch zu funktionieren:
template1.png

im Footer kann ich trotzdem nicht darauf zugreifen.
{getLatestOrders} {$latestOrdersS|dump}
Gibt NULL zurück:
template2.png
Sicher nur eine Kleinigkeit, ich komme aber echt nicht drauf.
 

HannesD.

Aktives Mitglied
14. März 2021
14
0
Okay, ich habe wohl ein Verständnisproblem mit den Smarty functions.

meine Function in der bootstrap.php lautet getLatestOrders()

wenn ich jetzt in der footer.tpl {getLatestOrders} eintrage, werden die Variablen zwar laut Debug Plugin als Smarty-Variablen gelistet, ich bekomme aber in der footer.tpl keinen Zugriff drauf.
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.049
2.300
Berlin
Firma
css-umsetzung
also zuerst musst du die Funktion ja registrieren

PHP:
$this->getSmarty()->registerPlugin(Smarty::PLUGIN_FUNCTION, 'getLatestOrders', [$this, 'getLatestOrders']);

und dann hast du die Funktion:

PHP:
public function getLatestOrders($params = array(), &$smarty)    {

    // hier kommt mein code
    $deinIhhalt = "dieses hier ist mein  Inhalt";
    
    if(!empty($params['assign'])) {
        $smarty->assign($params['assign'],$deinInhalt);
    } else {
        return $deinInhalt;
    }
}

so in der Art sollte es schon aussehen und du rufst das dann aus dem Template heraus so auf:

Code:
{getLatestOrders assign='latestOrdersS'}

dann sollte {$latestOrdersS} jetzt meinen Inhalt haben.
 
  • Gefällt mir
Reaktionen: frankw75

HannesD.

Aktives Mitglied
14. März 2021
14
0
Hallo css-umsetzung,

vielen Dank, dass du dich des Themas angenommen hast. Leider stehe ich hier noch immer auf dem Schlauch.

Ich habe in der Bootstrap.php des NOVA Child-Templates die Funktion registriert:

PHP:
<?php declare(strict_types=1);
namespace Template\meintemplate;
use Smarty;
use Shop;
/**
 * Class Bootstrap
 * @package Template\meintemplate
 */
class Bootstrap extends \Template\NOVA\Bootstrap
{
    /**
     * @inheritdoc
     */
    public function boot(): void
    {
        parent::boot();
        // whatever you do, always call parent::boot() or delete this method!
        try {
            $this->getSmarty()->registerPlugin(Smarty::PLUGIN_FUNCTION, 'getLatestOrders', [$this, 'getLatestOrders']);
        } catch (\SmartyException $e) {
            throw new \RuntimeException('Problems during smarty instantiation: ' . $e->getMessage());
        }
    }
    protected function registerPlugins(): void
    {
        parent::registerPlugins();
        // whatever you do, always call parent::registerPlugins() or delete this method!
    }
    public function getLatestOrders($params = array(), $smarty)    {
        global $smarty;   
        // hier kommt mein code
        //$deinInhalt = "dieses hier ist mein Inhalt";
        
        $deinInhalt = array(
            "test" => "antwort",
            "test2" => "antwort2",
        );
        if(!empty($params['assign'])) {
            $smarty->assign($params['assign'],$deinInhalt);
        } else {
            return $deinInhalt;
        }
    }


}
Ich habe in der fuction getLatestOrders das $smarty statt &$smarty gesetzt.

Meine meintemplate/layout/footer.tpl endet folgendermaßen:

<br>---<br> {getLatestOrders assign='latestOrdersS'} {$latestOrdersS.test} <br>---<br> {$latestOrdersS.test|dump} </body> </html> {/block}
Ich erhalte keine Ausgabe der Variablen. Das JTL Debug Plugin sagt aber:

Smartyvariablen- latestOrdersS : array (2) $latestOrdersS test : antwort $latestOrdersS.test test2 : antwort2 $latestOrdersS.test2

Folgende PHP (8.0) Warnings erhalte ich im TL Debug Plugin:
Undefined array key "latestOrdersS"
Attempt to read property "value" on null
Trying to access array offset on value of type null

Hätte ich noch Haare, würde ich sie mir gerade ausreißen :-/
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu JTL-Shop 5.2.3 – Google-Shoppin-Plugin 2.3.0: Mehrere Rückgaberichtlinien (DE + Ausland) bei einem Feed / return_policy_label Plugins für JTL-Shop 0
Neu VeroPay Plugin? Kampfansage gegen PayPal? User helfen Usern 54
Neu Coupon-Steuer Plugin: Korrekte Steuerberechnung für JTL-Shop Coupons Plugins für JTL-Shop 1
Neu How to properly update order status through JTL Shop plugin? Allgemeine Fragen zu JTL-Shop 4
Neu Update auf 5.6.1. – Trusted Shops Plugin erzeugt Fehlercode 500 Installation / Updates von JTL-Shop 6
Neu 🌟Neues Plugin: 35up Automatisiertes Cross-Selling Plugins für JTL-Shop 0
Neu 🚀 Pilotkunden gesucht: HS Dynamic Pricing Plugin für JTL-Shop Plugins für JTL-Shop 0
Neu Plugin: DITH Mengenrabatt – Warenkorbrabatte nach Stückzahl (mix + match), ohne Preisänderung am Artikel Plugins für JTL-Shop 0
Neu 🚀 JTL Shop Performance Check (Free): Kostenloses Plugin Plugins für JTL-Shop 0
Neu HTTP ERROR 500 - plugin installieren JTL-Shop - Fehler und Bugs 0
Neu Neues Plugin: DITH ShipNow – Versand-Countdown ⏱️ Plugins für JTL-Shop 0
Neu Paypal Plugin JTL-Shop - Fehler und Bugs 1
Neu Fragen zum KBA Finder Plugin (CiN) Plugins für JTL-Shop 1
Neu JTL Shop Brevo Plugin meldet keine Abmeldungen an JTL Shop + Kontakte landen nicht in der Willkommenssequenz Plugins für JTL-Shop 0
Neu Neues PLugin: DITH Lieferantenbestand – realistische Lieferzeiten mit Lieferanten- + Eigenbestand Plugins für JTL-Shop 0
Neu PayPal-Plugin blockiert bei PayPal-Störung Checkout JTL-Shop - Fehler und Bugs 4
Neu Teststand auf localhost - Plugin-Lizenzen abgelaufen Plugins für JTL-Shop 2
Neu Neues Plugin: JTL Closed Shop – Zugangsbeschränkung, Pre-Sale & Wartungsmodus für deinen JTL-Shop Plugins für JTL-Shop 2
Neu KI-WaWi-Workflows: Eigene KI-Endpunkte direkt aus JTL-Workflows ansprechen – ohne Plugin, flexibel und schnell Dienstleistung, Jobs und Ähnliches 3
Neu Mindestbestellwerte nach verschiedenen Lieferarten mit dem Plugin Lieferslot Allgemeine Fragen zu JTL-Shop 1
Neu PayPal Checkout Plugin (iPhone), Probleme mit PayPal-App Plugins für JTL-Shop 0
Neu Plugin: Mengenrabatt im Warenkorb nach Artikelanzahl Plugins für JTL-Shop 0
Neu 📢 Neues Plugin "JTL Translate Pro" by Nirico.de Plugins für JTL-Shop 0
Neu JTL PayPal Plugin - keine Einstellmöglichkeiten, keine Anzeige im Frontend Plugins für JTL-Shop 2
Neu Plugin-Idee: Überkäufe Lieferantenbestände & Lieferzeiten (API/CSV/XML) in Shop & Wawi Plugins für JTL-Shop 2
Neu Plugin Manager Fehlermeldung JTL-Shop - Fehler und Bugs 4
Neu Nach Update auf PayPal 2.1.0 doppelte Zahlungsarten und Ratepay Plugin erforderlich Plugins für JTL-Shop 0

Ähnliche Themen