Neu Frage zu Plugin Entwicklung : IO Request im Admin

vlat

Aktives Mitglied
2. Oktober 2009
21
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.367
342
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
Neu Frage zur Plugin Entwicklung Plugins für JTL-Shop 3
Neu Spam über Frage zum Artikel User helfen Usern - Fragen zu JTL-Wawi 9
Neu Frage zur Kartonagen Verwaltung in JTL WMS 1.8 - Karton per Scan ersetzen? Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 1
Frage: Webrequest mit Dateiübertragung JTL-Wawi 1.9 0
Gelöst Frage zur Kompatibilität eines Druckers JTL-POS - Fragen zu Hardware 1
Frage: 🐌🐌🐌JTL-Wawi 1.9 - Wie schnell öffnet sich bei euch die Auftragsansicht? JTL-Wawi 1.9 78
Neu Planung & Konzeptphase: Frage zur Umsetzung User helfen Usern - Fragen zu JTL-Wawi 1
Neu Frage zu. errorlog-Einträgen Gelöste Themen in diesem Bereich 4
Neu Plugin: WooCommerce Wallet oder Gutscheine mit JTL nutzen - Fehler in der MwSt User helfen Usern - Fragen zu JTL-Wawi 0
Neu JTL Plugin fuer Wordpress Plugin wirft Error/success Fehler WooCommerce-Connector 2
Neu JTL Google Shopping Plugin - Bilder Updaten Plugins für JTL-Shop 3
Neu Wie andere Länder und Sprachen vom Google Shopping Plugin mit dem Merchant Center verbinden Plugins für JTL-Shop 5
Neu Google Shopping Plugin - Artikel filtern Plugins für JTL-Shop 3
Neu Rollenbasiertes Kunden-Plugin (B2B) Plugins für JTL-Shop 1
Neu Eigenes Plugin und der cache.. Plugins für JTL-Shop 3
Neu Plugin Variantenauswahl Plugins für JTL-Shop 1
Neu CIN Farbkonfigurator Plugin JTL-Shop 5 Plugins für JTL-Shop 0
Neu Per Plugin Felder für das Newsletter-Anmeldungs-Template hinzufügen Technische Fragen zu Plugins und Templates 2
Neu 💙 Neues Plugin: Multi Page Portlets für OPC ( 1 Portlet auf mehreren Seiten ) Plugins für JTL-Shop 0
Neu IT-Recht Kanzlei Plugin v 1.0.7 - Einstellung PDF anhängen deaktiviert sich immer wieder Plugins für JTL-Shop 16
Neu Plentymarkets-Plugin 2.0 für JTL-Fulfillment Network Technische Fragen zu den JTL-Connectoren 0
Neu Neues Plugin: "Schnellkauf Plus" (Artikel direkt durch die Eingabe von Artikelnummer, GTIN, ISBN, ASIN, HAN oder UCP in den Warenkorb legen) Plugins für JTL-Shop 2
Neu IT-Recht Kanzlei Plugin fügt immer die Datenschutzerklärung mit in die Mails ein. Plugins für JTL-Shop 12
Neu JTL Google Shopping Plugin - Farbe und Größe bei mehreren Sprachen Plugins für JTL-Shop 1
Neu DHL Wunschzustellung Plugin Plugins für JTL-Shop 0
Neu Payone Plugin Zahlungen werden abgebucht aber keine Aufträge erstellt Plugins für JTL-Shop 0
Neu PayPal Checkout Plugin Update Arbeitsabläufe in JTL-Wawi 1
Neu Webstollen EU-Cookie Plugin ab 1.7. nicht mehr für Shop4 ? Plugins für JTL-Shop 43
Neu PayRexx jetzt mit eigenem Plugin für den JTL-Shop Plugins für JTL-Shop 20
Neu Anfrage bezüglich Popup-Plugin für JTL-Shop Plugins für JTL-Shop 1
google shopping plugin - Grundpreis + Sonderpreis Gelöste Themen in diesem Bereich 10
Neu 📢 Neues Plugin "Zahlungsarten kopieren" by NETZdinge.de Plugins für JTL-Shop 1
Neu suche Plugin Kategorien/Artikel ausblenden pro User Plugins für JTL-Shop 1

Ähnliche Themen