Neu Plugin kann nicht auf Datenbank zugreifen

Th3_J0k3

Neues Mitglied
13. Oktober 2020
19
1
Moin,
Ich versuche durch einen Ajax Call von einem PHP File eines Frontendlinks auf die Datenbank zuzugreifen, doch ich kriege ständig den Fehler: POST 500 (Internal Server Error). Wenn ich nur einen String o.Ä. rausgebe und die Datenbankabfrage lösche, funktioniert alles. Es muss also an dem Datenbankzugriff liegen.

PHP im Frontendlink:
PHP:
function getFromDatabase(){
    Shop::DB()->select('tartikel', 'kArtikel', $artikel_id); // $artikel_id ist vorher definiert.
}


if(!empty($_POST['action'])){
    if($_POST['action'] == 'get_price'){
        if(!empty($_POST['tType']) && !empty($_POST['tSurface']) && !empty($_POST['tLength']) && !empty($_POST['tWidth'])){
            echo getFromDatabase();
        }
    }
}

Ajax Call:
JavaScript:
    $.ajax({
        type: 'post',
        url: 'frontendlink_1.php',
        data: {
            'action': 'get_price',
            'tType': active_params.type,
            'tSurface': active_params.surface,
            'tLength': active_params.length,
            'tWidth': active_params.width
        },
        success: function(response) {
            document.getElementById("priceLabel").innerHTML = response;
        },
    });
 

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.369
347
Halle (Saale)
Wenn du an eine eigene php-Datei postest, kenn die natürlich auch den ganzen Shopcode nicht.
Du musst also entweder z.B. an die index.php posten und einen Hook nutzen, oder die includes/globalinclude.php requiren, damit der Autoloader ausgeführt und der Shop initialisiert werden.
 

Th3_J0k3

Neues Mitglied
13. Oktober 2020
19
1
Wenn du an eine eigene php-Datei postest, kenn die natürlich auch den ganzen Shopcode nicht.
Du musst also entweder z.B. an die index.php posten und einen Hook nutzen, oder die includes/globalinclude.php requiren, damit der Autoloader ausgeführt und der Shop initialisiert werden.

Danke für die Antwort! Sollte das in einem FrontendLink nicht eigentlich automatisch geschehen?
 

SamSoooM

Mitglied
1. Februar 2021
10
0
Hallo Guten Tag,
Kann jemand mir helfen bitte.
ich habe die folgende Funktion in Javascript und versuche sie durch eine Ajax Call durch den HOOK HOOK_IO_HANDLE_REQUEST - 213 aufzurufen

habe versucht, wie im Kommentar erwähnt, an die index.php zu posten
Wenn du an eine eigene php-Datei postest, kenn die natürlich auch den ganzen Shopcode nicht.
Du musst also entweder z.B. an die index.php posten und einen Hook nutzen, oder die includes/globalinclude.php requiren, damit der Autoloader ausgeführt und der Shop initialisiert werden.


JavaScript:
$(document).on('change', selectorBrand, function (event) {
        let currentBrand = $(this).find('option:selected').data('brand');
        resetDisplacements();
        resetModels();
        resetYears();

        $.ajax({
                type: 'POST',
                url: 'index.php',
                data: {
                    'io': JSON.stringify(
                        {
                            'name': 'getDisplacements',
                            'params': [{'brand': currentBrand}]
                        }
                    ),
                }
            }
        ).done(function (data) {
            if (data.success) {
                setDisplacements(data.displacements);
            } else {
                console.log('couldn\'t, load displacements for ' + currentBrand);
            }
        });
    });


wir wollen unser Shop zu Shop 5 updaten und wollen zuerst unsere eigenen Plugins umzuschreiben und testen
bin noch neu hier im Shop 5 und mit dem dispatcher-> listener auch
ich will die Funktion getDisplacements() in IO registrieren wie kann ich das machen bitte?
im Bootstraper Klasse :

PHP:
namespace Plugin\getor_bike_filter;

use JTL\Events\Dispatcher;
use JTL\Plugin\Bootstrapper;
use JTL\Shop;
use JTL\Smarty\JTLSmarty;
use JTL\IO\IO;
use JTL\Helpers\Request;
use Plugin\getor_bike_filter\classes\BikeFilter;
use JTL\Plugin\BootstrapperInterface;

class Bootstrap extends Bootstrapper implements BootstrapperInterface{

public function boot(Dispatcher $dispatcher)
   {
       parent::boot($dispatcher);
       $plugin       = $this->getPlugin();

       $dispatcher->listen(
           'shop.hook.' . \HOOK_IO_HANDLE_REQUEST , function (array &$args){
             $args['io']->register('getDisplacements', getDisplacements );
             $args['io']->register('getModels', getModels);
             $args['io']->register('getYears', getYears);
             $args['io']->register('setActive', setActive);
             $args['io']->register('setInactive', setInactive);
       });



       $dispatcher->listen(
           'shop.hook.' . \HOOK_SMARTY_OUTPUTFILTER,
           function (array &$args){
             $this->hook140();
           }
       );

   }

 function getDisplacements($params)
     {
         if (!isset($params['brand'])) {
             return [
                 'success' => false,
             ];
         }
         $brand = $params['brand'];
         $displacements = BikeFilter::findDisplacementsByBrand($brand);
         return [
             'success' => true,
             'displacements' => $displacements,
         ];
     }

}


Dankeschön !
 

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.369
347
Halle (Saale)
Das was da steht ist jedenfalls kein gültiger PHP-Code?
In IO::register() musst du als zweiten Parameter schon einen Callback angeben - das soll scheinbar die Methode getDisplacements() in der Bootstrapper-Klasse sein?

Dann sähe ein Minimalbeispiel ungefähr so aus:
Code:
<?php

namespace Plugin\getor_bike_filter;

use JTL\Events\Dispatcher;
use Plugin\getor_bike_filter\classes\BikeFilter;
use JTL\Plugin\Bootstrapper;

class Bootstrap extends Bootstrapper
{
    public function boot(Dispatcher $dispatcher)
    {
        parent::boot($dispatcher);
        $dispatcher->listen(
            'shop.hook.' . \HOOK_IO_HANDLE_REQUEST , function (array &$args){
            $args['io']->register('getDisplacements', [$this, 'getDisplacements']);
        });
    }

    public function getDisplacements($params)
    {
        if (!isset($params['brand'])) {
            return [
                'success' => false,
            ];
        }
        $brand = $params['brand'];
        $displacements = BikeFilter::findDisplacementsByBrand($brand);
        return [
            'success' => true,
            'displacements' => $displacements,
        ];
    }

}
 
  • Gefällt mir
Reaktionen: SamSoooM

ple

Sehr aktives Mitglied
20. August 2019
782
153
@FMoche , sorry, ich muss das Thema noch mal wieder aus der Versenkung holen.
Ich bin aktuell dabei mir ein kleines Plugin zu schreiben, soweit so gut. Ich will eigentlich nur, dass der Client dem Server ein Timestamp schickt alle 15s. dieser schickt dann ein Json zurück.
Ich bekomme es aber irgendwie nicht hin. Den Hook HOOK_IO_HANDLE_REQUEST konnte ich soweit registrieren und die Funktion wurde aufgerufen. soweit so gut.
Aber der Client bekommt warum auch immer irgendwas zurück, was kein Json ist. Ich hatte auch mal nur ein String versucht, aber klappt auch nicht, gleiche Fehlermeldung.
Code:
Arguments(3) ['handleError', 'parsererror', SyntaxError: Unexpected token '<', "<br />
<b>"... is not valid JSON

Dein Code aus 2021, ist der nicht mehr kompatibel mit Shop 5.3.3 zufällig?

Mein Test JS ist
Code:
// templates/NOVA/js/numiverse-test.js
$(function () {                         
    callEcho();                         
    setInterval(callEcho, 10_000);     

    function callEcho () {
        $.evo.io().call(
            'test.echo',
            {text: 'Ping'},             
            null,
            function (err, data) {
                console.log('ERR:', err);   
                console.log('DATA:', data); 
            }
        );
    }
});


und meine test bootstrap ist

Code:
<?php declare(strict_types=1);

namespace Plugin\test;

use JTL\Plugin\Bootstrapper;
use JTL\Events\Dispatcher;
use JTL\IO\IO;
use JTL\IO\IOResponse;

class Bootstrap extends Bootstrapper
{
    public function boot(Dispatcher $dispatcher): void
    {
        parent::boot($dispatcher);

        $dispatcher->listen(
            'shop.hook.' . \HOOK_IO_HANDLE_REQUEST , function (array &$args){
            $args['io']->register('test.echo', [$this, 'echoTest']);
        });
    }

    

  
    public function echoTest($params)
    {
          return [
            'success' => true,
            'anwort' => 'ist ein Test',
        ];
    }
}

Oder ich seh den Wald vor lauter Bäumen nicht mehr.

Gruß und Vielen Dank für die Unterstützung.
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu VeroPay Plugin? Kampfansage gegen PayPal? User helfen Usern 39
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
Neu Artikelseiten 500 HTTP Fehler PayPal Plugin 2.1.0 JTL Shop 5.4.0 Plugins für JTL-Shop 4
Neu Exportformat Google Shopping Plugin Plugins für JTL-Shop 1
Neu 500 Error durch Paypal Plugin im B2B Shop Plugins für JTL-Shop 0
Bestand anderer Kinderartikel wird in Artikelstammdaten mit angezeigt – wie kann man das deaktivieren? JTL-Wawi 1.11 2
Neu 1.11.4 Programmstart bricht ab, Fehlerprotokoll kann nicht geschrieben werden User helfen Usern - Fragen zu JTL-Wawi 0
Neu Wo kann ich diesen Warenkorb abstellen oder die Varianten hinzufügen? User helfen Usern - Fragen zu JTL-Wawi 0
Extension Store: Kann Kompatibiltität zu Wawi 1.11 nicht einstellen JTL-Wawi 1.11 5
Beantwortet SalesOrderPosition.AmazonCustomJSON kann nicht interpretiert werden User helfen Usern - Fragen zu JTL-Wawi 1
Neu Kann man keine Testlizenzen mehr archivieren? Allgemeine Fragen zu JTL-Shop 0
DHL 4.0 Absenderreferenz kann nicht gespeichert werden JTL-Wawi 1.11 1
Kann ich mit dieser SQL Version die neue WaWi 1.11.1 installieren? JTL-Wawi 1.11 2
Neu Wawi 1.10 weigert sich zu starten und 1.11 kann man nicht downloaden JTL-Wawi - Fehler und Bugs 4
Neu JTL Wawi 1.10.14.3 / Unbehandelte Ausnahme im WaWi-Error-Log / Die Sammlung wurde geändert. Der Enumerationsvorgang kann möglicherweise .... JTL-Wawi - Fehler und Bugs 1
Neu Kann man das Shop-Guthaben von Kunden per Workflow beeinflussen? User helfen Usern - Fragen zu JTL-Wawi 0
Neu Kunde kann sich im Checkout-Prozess nicht anmelden bzw. bleibt nicht angemeldet. Installation / Updates von JTL-Shop 11
Artikel kann trotz Lagerbestand nicht reserviert werden Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 0
Neu Bestellung aus JTL-Shop wird nicht in die Wawi übernommen Allgemeine Fragen zu JTL-Shop 1
Neu AMAZON LISTER 2.0 Hochladen nicht möglich! Satus " Wartet auf Rückmeldu..." Amazon-Lister - Fehler und Bugs 0
Neu Amazon Externe Belege werden nicht neu erstellt Amazon-Anbindung - Fehler und Bugs 0
Neu Stückzahl in Wawi teilbar - aber nicht im Shop. Möglich? Allgemeine Fragen zu JTL-Shop 3
Neu Mediendateien nicht mit Shopware synchronisiert Shopware-Connector 0
Neu Exporte: $Artikel->Versandkosten ist nicht der günstigste Tarif? Allgemeine Fragen zu JTL-Shop 2
Neu Artikel werden nach Löschung in Shopify nicht neu aus der WaWi übertragen Shopify-Connector 2
Externe Auftragsnummer für Rechnungs-Druckvorlage nicht vorhanden JTL-Wawi 1.11 6

Ähnliche Themen