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
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 0
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 Plugin "Verwalte deinen JTL Shop mit Excel Dateien" geht wohl nicht mit JTL-Shop 5.4.1 Plugins für JTL-Shop 1
Neu Update 5..50 + Plugin: JTL Exportformat Google Shopping Export Stopp JTL-Shop - Fehler und Bugs 8
Neu JTL-Shop 5.5.0 PayPal Plugin Installation / Updates von JTL-Shop 2
Neu Update auf Shop 5.5.0 in Kombination mit Plugin "AmazonPay" nicht möglich - 500er Fatal Error JTL-Shop - Fehler und Bugs 13
Neu Test Plugin lässt sich weder installieren, noch löschen Plugins für JTL-Shop 0
Neu ChatGPT Plugin Plugins für JTL-Shop 0
Neu Plugin Produktsicherheitsverordnung (GPSR) Plugin für den JTL-Shop 5 nicht PHP 8.4 fähig Technische Fragen zu Plugins und Templates 4

Ähnliche Themen