Neu Frage zu Plugin Entwicklung : IO Request im Admin

vlat

Aktives Mitglied
2. Oktober 2009
40
3
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
347
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
Bedeutung der Farben (Grün/Orange) in der Auftragsmaske + Frage zum Fehlbestand JTL-Wawi 1.10 4
Frage zu Variationsartikeln im Onlineshop ( Bei einem Kauf ) JTL-Wawi 1.9 7
Neu Frage zu BLINDKOPIE bei Versand User helfen Usern - Fragen zu JTL-Wawi 2
Neu Frage zum Onlineshop-Abgleich - HOOK_ARTIKEL_XML_BEARBEITEINSERT Technische Fragen zu Plugins und Templates 0
Neu Umstellung auf JTL Shop - Frage zu Auswahlartikel / Bundle / Set Allgemeine Fragen zu JTL-Shop 5
Frage zu 1.10.x (Worker Timeout behoben? SCX Marktplätze parallel?) JTL-Wawi 1.10 5
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 7
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 6
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 9
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
Neu 📢 Neues JTL-Software Plugin "Rechnung Download" by CIN GmbH Plugins für JTL-Shop 16
Neu JTL GPSR Plugin - Automatischer https://-Prefix trotz HTML-Formatierung im Hersteller-Text Plugins für JTL-Shop 7
Neu 📢 Plugin: "Video für Beschreibung (YouTube, Vimeo, andere Formate) 📢 Plugins für JTL-Shop 1
Neu Affiliate Plugin Empfehlung für JTL Shop 5 Plugins für JTL-Shop 3

Ähnliche Themen