Neu Frage zu Plugin Entwicklung : IO Request im Admin

vlat

Aktives Mitglied
2. Oktober 2009
24
1
Moin,

ich bin gerade am testen wie man IO Request erstellt da ich es für ein Plugin brauche. Im TestPlugin habe ich folgendes erstellt, bekomme aber HTTP 403. Verstehe aber nicht woran es liegt, habe schon jtl_token mitgeben und habe es auch schon als bearer token versucht.

mein Tpl Inhalt
Code:
{literal}
<script>
$(document).ready(function () {
    // Daten laden beim Start
    loadEntries();

    // Eintrag hinzufügen oder aktualisieren
    $('#entryForm').on('submit', function (e) {
        e.preventDefault();

        const name = $('#name').val();
        const id = $('#entryId').val();
        const jtl_token = $('input[name="jtl_token"]').val();

        const formData = new FormData();
        const requestData = id ? {
            'name': 'UpdateEntry',
            'params': [{'id': id, 'name': name, 'jtl_token': jtl_token }]
        } : {
            'name': 'CreateEntry',
            'params': [{'name': name, 'jtl_token': jtl_token}]
        };

        // Füge die Daten zum FormData-Objekt hinzu
        formData.append('io', JSON.stringify(requestData));

        $.ajax({
            type: 'POST',
            url: '{/literal}{$plugin_url}{literal}', // Hier binden wir die URL korrekt ein
            data: formData,
            processData: false,  // Verhindert, dass jQuery die Daten formatiert
            contentType: false   // Verhindert die automatische Einstellung des Content-Type Headers
        }).done(function (data) {
            if (data.success) {
                $('#entryForm')[0].reset();
                $('#entryId').val('');
                loadEntries();
            } else {
                alert('Fehler: ' + (data.message || 'Unbekannter Fehler'));
            }
        }).fail(function (xhr, status, error) {
            console.error('AJAX Fehler:', status, error);
            alert('Anfrage fehlgeschlagen: ' + xhr.status + ' ' + xhr.statusText);
        });
    });

    // Einträge laden und anzeigen
    function loadEntries(search = '') {
        const jtl_token = $('input[name="jtl_token"]').val();
        const formData = new FormData();
        const requestData = {
            'name': 'ListEntries',
            'params': [{'search': search ,'jtl_token': jtl_token}]
        };

        formData.append('io', JSON.stringify(requestData));

        $.ajax({
            type: 'POST',
            url: '{/literal}{$plugin_url}{literal}',
            data: formData,
            processData: false,  // Verhindert, dass jQuery die Daten formatiert
            contentType: false   // Verhindert die automatische Einstellung des Content-Type Headers
        }).done(function (data) {
            if (data.success) {
                $('#entries').empty();

                data.entries.forEach(entry => {
                    $('#entries').append(`
                        <tr>
                            <td>${entry.name}</td>
                            <td>
                                <button class="btn btn-warning edit-btn" data-id="${entry.id}">Bearbeiten</button>
                                <button class="btn btn-danger delete-btn" data-id="${entry.id}">Löschen</button>
                            </td>
                        </tr>
                    `);
                });
            } else {
                alert('Fehler beim Laden der Einträge: ' + (data.message ));
            }
        }).fail(function (xhr, status, error) {
            console.error('AJAX Fehler:', status, error);
            alert('Anfrage fehlgeschlagen: ' + xhr.status + ' ' + xhr.statusText);
        });
    }
});

</script>
{/literal}


    <form id="entryForm" class="form">
        {$jtl_token}
        <input type="hidden" id="entryId" class="form-control">
        <input type="text" id="name" placeholder="Name" required class="form-control">
        <br>
        <button type="submit" class="btn btn-block btn-info">Speichern</button>
    </form>
    <hr>
    <input type="text" id="search" placeholder="Suche nach Namen" class="form-control">
    <br>
    <table id="entries" class="table">
        <thead>
            <tr>
                <th>Name</th>
                <th>Aktionen</th>
            </tr>
        </thead>
        <tbody></tbody>
    </table>

Inhalt meiner Bootstrap.php

Code:
private $dispatcher;
public function boot(Dispatcher $dispatcher): void
    {
        parent::boot($dispatcher);
        $this->dispatcher = $dispatcher;
        $this->dispatcherListeners();
    }

    private function dispatcherListeners(): void
    {
        // Hook registrieren
        $this->dispatcher->listen(
            'shop.hook.' . \HOOK_IO_HANDLE_REQUEST_ADMIN,
            function (array &$args) {
                $args['io']->register('ListEntries', [$this, 'listEntries']);
                $args['io']->register('CreateEntry', [$this, 'createEntry']);
                $args['io']->register('GetEntry', [$this, 'getEntry']);
                $args['io']->register('UpdateEntry', [$this, 'updateEntry']);
                $args['io']->register('DeleteEntry', [$this, 'deleteEntry']);
            }
        );
    }

    // CRUD-Methoden
    public function listEntries(array $params): array
    {
        $search = $params[0]['search'] ?? '';
        $db = Shop::Container()->getDB();
        $query = "SELECT * FROM entries WHERE name LIKE :search";
        $entries = $db->getObjects($query,['search' => "%$search%"]);

        return ['success' => true, 'entries' => $entries];
    }
    ...

In der info.xml ist es als normaler tab eingebunden.

Danke für Tips im Voraus.
 
Zuletzt bearbeitet:

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.369
345
Halle (Saale)
Auf den ersten Blick sehe ich hier zwei Probleme:
Der Token muss als $_POST['jtl_token'] vorhanden sein.
Also brauchst du wahrscheinlich noch ein
Code:
formData.append('jtl_token', jtl_token);
statt das in dein requestData-Objekt zu packen.
Und die Ziel-URL sollte nicht deine Plugin-URL sein, sondern <shopurl>/admin/io bzw. in alten Shopversionen <shopurl>/admin/io.php
 
Ähnliche Themen
Titel Forum Antworten Datum
Frage vor Serverwechsel und Umzug Einrichtung JTL-Shop5 8
Neu Frage zu Telekom Glasfaser Tarifen Smalltalk 0
Neu Amazon Artikel mehrfach listen / Generelle Frage / Amazon-Anbindung - Ideen, Lob und Kritik 4
Neu Frage zu Tickets aus dem öffentlichen Ticketsystem JTL-Wawi - Ideen, Lob und Kritik 5
Neu Frage an die (Hobby-) Controller: B2C Einzelhandel mit 6% Marketingbudget - das ist normal? Business Jungle 7
Neu Frage zur Rechtevergabe bei eigenen Übersichten Eigene Übersichten in der JTL-Wawi 0
Neu Wir kommt man um Trusted Shops herum? (SEO Frage?) Business Jungle 8
Neu Frage zu Kampagnen Allgemeine Fragen zu JTL-Shop 1
Neu Frage zur Korrekturbuchung User helfen Usern - Fragen zu JTL-Wawi 0
Neu 💙 Neues Plugin: Ähnliche Artikel als Liste (Ähnliche Artikel vergleichen) Plugins für JTL-Shop 0
Neu JTL GPSR Plugin, Herstellerdaten im Tab anzeigen lassen? Allgemeine Fragen zu JTL-Shop 1
Neu Selber Plugin erstellen Plugins für JTL-Shop 3
Neu GPRS Plugin Infos doppelt und in Artikelliste Plugins für JTL-Shop 2
Neu Plugin-Manager Error 500 Technische Fragen zu Plugins und Templates 2
Neu Lizenkosten Shopware 6 Plugin ? Shopware-Connector 7
Neu Worüber Klarna am besten nutzen? Mollie oder Plugin? User helfen Usern - Fragen zu JTL-Wawi 1
Voucher Guthaben Payment Plugin Berechnen Allgemeine Fragen zu JTL-Vouchers 0
Neu Plugin für Bundles gesucht Plugins für JTL-Shop 4
Neu GPSR Plugin wird nicht bei allen Artikeln angezeigt Plugins für JTL-Shop 18
Neu GPSR Plugin Formatierung anpassen. Plugins für JTL-Shop 8
Neu GPSR Plugin Installation haut nicht hin Plugins für JTL-Shop 2
Neu 📢 Plugin "Verbotene Artikel: Kauf nur für richtige Kundengruppe" by NETZdinge.de Plugins für JTL-Shop 1
Neu GPSR Plugin Format Fehler Plugins für JTL-Shop 0
Neu Payment plugin order number Plugins für JTL-Shop 0
Plugin: JTL Exportformat Google Shopping - Mindermengenzuschlag Einrichtung JTL-Shop5 0
Neu Nach Update auf JTL GPSR-Plugin 1.0.3 vom Backend ausgeschlossen Plugins für JTL-Shop 25
Beantwortet Plugin Dev: Setting-Links Spacer Problem (info.xml) JTL-Shop - Fehler und Bugs 1
Neu Paypal Plugin wird von akutellen IOS Geräten nicht geladen Plugins für JTL-Shop 17
Neu Warnung bei Paypal Plugin Plugins für JTL-Shop 4
Neu Klarna Plugin mit JTL Shop 5.4.0 lässt Pay Now nicht zu Plugins für JTL-Shop 17
Neu WARNUNG JTL GPSR Plugin 1.0.2 funktioniert nicht, wenn Artikel keine Beschreibung hat Plugins für JTL-Shop 20
Neu Neues Datatrans-Plugin als Alternative zu CustomWeb/Sellxed – inkl. Twint, PostFinance und PowerPay 🚀 Plugins für JTL-Shop 0
Neu GPSR mit JTL Wawi + Plugin JTL-Wawi - Fehler und Bugs 5
Neu Zahlung Kreditkarte nicht möglich (Paypal Plugin) JTL-Shop - Fehler und Bugs 5
Neu KI-Plugin für JTL-Shop - Eure Meinung ist gefragt! 🚀 🤖 Plugins für JTL-Shop 0
Neu GPSR-Plugin ignoriert Hersteller-Firmenangabe JTL-Shop - Fehler und Bugs 5
Welche GPSR Plugin-Einstellungen mit WaWi 1.9.6.1 JTL-Wawi 1.9 8
Neu Felder vom neuen Plugin importieren möglich? Shopware-Connector 0
Neu GPSR Plugin für Gambio Connector steht bereit Gambio-Connector 0
Neu DRINGEND Hilfe - Google Analytics Plugin JTL-Shop - Fehler und Bugs 4
Neu PlugIn: JTL GPSR Plugins für JTL-Shop 32
Neu Plugin Suche: Mailchimp Plugins für JTL-Shop 0
Neu Plugin mit transparentem Hintergrund (Auswahlassistent) Plugins für JTL-Shop 1
Neu Probleme mit PayPal-Plugin: Bestellungen "pending" & doppelte Zahlungen nach Direktzahlung Plugins für JTL-Shop 0
Neu Template Dateien Rendern im Plugin Plugins für JTL-Shop 6
Neu 🎉 Neues Plugin: "Versandkosten und Lieferzeit automatisch beziehen - ShipMonk Extension" 🎉 Plugins für JTL-Shop 1
Neu 🎉 Neues Plugin: "Versandkosten und Lieferzeit automatisch beziehen - DHL-Express Extension" 🎉 Plugins für JTL-Shop 3
Neu S: Plugin Dropdown-Menü für meine Kategorien Plugins für JTL-Shop 10

Ähnliche Themen