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
7.821
2.206
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
7.821
2.206
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 Artikelseiten 500 HTTP Fehler PayPal Plugin 2.1.0 JTL Shop 5.4.0 Plugins für JTL-Shop 4
Neu Exportformat Google Shopping Plugin Plugins für JTL-Shop 1
Neu 500 Error durch Paypal Plugin im B2B Shop Plugins für JTL-Shop 0
Neu Plugin Empfehlung gesucht - Warenkorb z.B. Kaufe 2, 2. Produkt x Rabatt Plugins für JTL-Shop 1
Neu CSS-Gutschein-Plugin funktioniert nach Shop-update auf 5.5.3 nicht mehr Plugins für JTL-Shop 1
Neu Google Shopping (Plugin) Export immer leer Allgemeine Fragen zu JTL-Shop 4
Neu Sendcloud Plugin immer im Tab fehlerhaft - Lizenz abgelaufen Plugins für JTL-Shop 0
Neu Texteditor Hinweis Plugin von Webstollen Plugins für JTL-Shop 0
Neu Welches PlugIn für ein besseres Google Ranking? Plugins für JTL-Shop 2
Neu Händlerbund Plugin: "Zahlung und Versand" wird nicht automatisch übernommen Plugins für JTL-Shop 2
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 Plugin PayPal - capture failed for method PayPal Checkout Plugins für JTL-Shop 2
Neu Plugin-Update 2.4.1: JTL Exportformat Google Shopping Plugins für JTL-Shop 6
Neu Paypal Plugin läßt sich nicht installieren - SQL Fehler Plugins für JTL-Shop 2
Neu Paypal Plugin 2.0.1 Merachant JTL-Shop - Fehler und Bugs 10
Neu Plugin Fehler JTL-Shop - Fehler und Bugs 7
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 Plugin - Kindartikel in der Artikelübersicht anzeigen - SHOP-475 Plugins für JTL-Shop 8
Neu 🌟Neues Plugin: Produkt FAQ Plugins für JTL-Shop 0
Neu Suche Plugin: Zusatzartikel mit einfacher Variationsauswahl Plugins für JTL-Shop 8
Neu Neues Plugin - Der ultimative Super-Slider Plugins für JTL-Shop 0
Neu Ankündigung: Entwicklung eines modified-Connectors für JTL-WaWi Modified eCommerce-Connector 0

Ähnliche Themen