Neu AJAX Anfrage an Plugin senden

hzweiagmbh

Aktives Mitglied
6. Januar 2017
27
0
Guten Tag zusammen,

ich schreibe aktuell ein Plugin für unseren JTL Shop 5.
Leider scheitere ich an entsprechenden AJAX Calls...
Ich komme eigentlich eher aus der Shopware-Landschaft und bin dort mit den Vorgängen vertrauter, daher hoffe ich auf eure Hilfe..

Ich habe ein Bootstrap.php erstellt, welche ich nun nach und nach befülle.
Unter frontend/template/layout/header.tpl habe ich eine Template-Datei, welche mir auf jeder Seite einen Block anzeigt, wo der Benutzer Daten eingeben kann.
Diese brauche ich nun per AJAX in meinem Plugin, daran scheitere ich leider.

Ich habe versucht, das Ganze über den Hook HOOK_IO_HANDLE_REQUEST zu regeln. Leider bekomme ich da aber nichts. Wenn ich einfach nur versuche, $args['io'] im error_log auszugeben und dann return [ 'success' => 'true', 'data' => $args ]; mache, bekomme ich einen Fehler 500 "Not registered". Ich habe dann auch versucht, den Ajax Call wie folgt zu machen:
JavaScript:
$.evo.io().call('hzweia_kbaplugin.kbagewaehlt', $('#kbaHsn').val() + $('#kbaTsn').val(), this, function(error, data) {
      if(error) {
        return;
      }
      console.log(data.data);
    });
  });

Da bekomme ich zwar keinen Fehler, bekomme aber leider auch keine Daten zurück.

Mein ursprünglicher AJAX-Call sah so aus:
JavaScript:
$.ajax({
    type: 'POST',
    url: '/io.php',
    data: {
        'io': JSON.stringify({
           'name': 'KBA',
           'params': [{'value': 'TEST'}]
           })
    },
    success: function(result){
        console.log(result);
    },
})

Damit klappts aber leider nicht. Ich habe es zum Laufen bekommen, indem ich mir eine eigene PHP-Datei geschrieben habe, an welche ich den Call sende. Das ist aber, soweit ich das blicke, bei JTL Shop 5 dank des EventDispatchers eigentlich nicht mehr Sinn der Sache...

Meine Bootstrap.php sieht so aus:

PHP:
<?php declare(strict_types=1);
/**
 * @package Plugin\hzweia_kbaplugin
 * @author  Stefan Schulte - HZWEIA
 */

namespace Plugin\hzweia_kbaplugin;

use JTL\Events\Dispatcher;
use JTL\Plugin\Bootstrapper;
use JTL\Smarty\JTLSmarty;
use JTL\IO\IO;

/**
 * Class Bootstrap
 * @package Plugin\hzweia_kbaplugin
 */
class Bootstrap extends Bootstrapper
{
    /**
     * @inheritdoc
     */
    public function boot(Dispatcher $dispatcher): void
    {
        parent::boot($dispatcher);
        $plugin = $this->getPlugin();
        $db     = $this->getDB();
        $cache  = $this->getCache();
        $dispatcher->listen('shop.hook.' . \HOOK_ARTIKEL_PAGE, function ($args) use ($plugin, $db, $cache) {
            // implement me
        });
        $dispatcher->listen('shop.hook.' . \HOOK_LETZTERINCLUDE_INC, function ($args) use ($plugin, $db, $cache) {
            // implement me
        });
        $dispatcher->listen('shop.hook.' . \HOOK_ARTIKEL_CLASS_FUELLEARTIKEL, function ($args) use ($plugin, $db, $cache) {
            // implement me
        });
        $dispatcher->listen('shop.hook.' . \HOOK_ATTRIBUT_CLASS_LOADFROMDB, function ($args) use ($plugin, $db, $cache) {
            // implement me
        });
        $dispatcher->listen('shop.hook.' . \HOOK_GLOBALINCLUDE_INC, function ($args) use ($plugin, $db, $cache) {
            // implement me
        });
        $dispatcher->listen('shop.hook.' . \HOOK_SMARTY_OUTPUTFILTER, function ($args) use ($plugin, $db, $cache) {
            // implement me
        });
        $dispatcher->listen('shop.hook.' . \HOOK_CORE_SESSION_CONSTRUCTOR, function ($args) use ($plugin, $db, $cache) {
            // implement me
        });
        $dispatcher->listen('shop.hook.' . \HOOK_GET_ALL_CATEGORIES, function ($args) use ($plugin, $db, $cache) {
            // implement me
        });
        $dispatcher->listen('shop.hook.' . \HOOK_PRODUCTFILTER_GET_BASE_QUERY, function ($args) use ($plugin, $db, $cache) {
            // implement me
        });
        $dispatcher->listen('shop.hook.' . \HOOK_IO_HANDLE_REQUEST, function ($args) use ($plugin, $db, $cache) {
            error_log("AJAX!");
            error_log(print_r($args, TRUE));
            $io = $args['io'];
            $io->register('hzweia_kbaplugin.herstellergewaehlt', [$this, 'herstellergewaehlt'])
                ->register('hzweia_kbaplugin.modellgewaehlt', [$this, 'modellgewaehlt'])
                ->register('hzweia_kbaplugin.typgewaehlt', [$this, 'typgewaehlt'])
                ->register('hzweia_kbaplugin.kbagewaehlt', [$this, 'kbagewaehlt']);
        });
    }
 
    public function kbagewaehlt($params)
    {
        error_log(print_r($params['io'], TRUE));
        error_log(print_r($_REQUEST, TRUE));
        error_log(print_r($_POST, TRUE));
        return [
          'success' => 'true',
          'data' => 'DAS IST JA GEIL',
        ];
    }

Ich hatte schon andere Varianten, aber nichts lief...

Wäre vielleicht jemand so freundlich und gibt mir eine kurze Einweisung, wie ich vernünftig AJAX Calls verarbeite?

Danke euch!
 

hzweiagmbh

Aktives Mitglied
6. Januar 2017
27
0
Hallo FPrüfer,

vielen Dank, den Beitrag hatte ich bisher nicht gesehen.
Kannst du mir vielleicht noch eine kurze Erklärung geben, wofür die Parameter bei $evo.io.call() stehen?
JavaScript:
$.evo.io().call(
    'meine_plugin_id.meinAjaxCall',
    {meineAjaxVariable: 'Hello world!'},
    {},
    function (error, data) {
        ... do some stuff if ajax call returns
    }

Den Call an meine Funktion verstehe ich - meine eigenen Variablen auch. Wofür steht das leere Array danach?
Bei vielen Calls im Standardplugin stehen da Angaben wie "this" oder "that".

Danke dir!
 
Ähnliche Themen
Titel Forum Antworten Datum
Anfrage zur Einrichtung des Dashboards (Gewinnanzeige) in JTL-Wawi – Remote-Support über AnyDesk JTL-Wawi 1.10 6
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