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
857
181
@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 Plugin Preisvorschlag Plugins für JTL-Shop 6
Neu Plugin Allgemeine Fragen zu JTL-POS 1
Neu Betatester gesucht - Plugin: Geizhals Basket Tracking inkl. EMID Übermittlung Plugins für JTL-Shop 0
Neu JTL-Shop "Plugin-Vorlage" gesucht User helfen Usern 3
Neu Cross Selling Plugin Plugins für JTL-Shop 1
Neu Installation von Plugin PayPal Check-Out fehlgeschlagen, keine Verbindung zum Webshop Plugins für JTL-Shop 6
Neu Beim Versuch Paypal-Plugin mit Paypal-Konto zu verbinden Shop nicht mehr erreichbar Plugins für JTL-Shop 2
Neu Neues Plugin: Produktbundles mit Rabatten Plugins für JTL-Shop 1
Neu Widerrufsformular als kostenloses Plugin für Shops ab 5.1.5 Plugins für JTL-Shop 9
Neu Neues Plugin: Kaufimpuls Paket Plugins für JTL-Shop 0
Neu Paypal Checkout Plugin - Ist vorhanden aber nichts funktioniert Plugins für JTL-Shop 9
Neu Retourenetikett für Briefe kann unter Internetmarke 2.0 nicht erstellt werden JTL-ShippingLabels - Fehler und Bugs 0
Neu Widerrufsbutton: Jeder, der den Button betätigt, kann das Widerrufsformular ausfüllen und absenden - auch ohne Bestellung? Allgemeine Fragen zu JTL-Shop 68
Neu Exchange Konto kann nicht eingerichtet werden für E-Mail Versand User helfen Usern - Fragen zu JTL-Wawi 2
Neu Versandschnittstelle DPD Meta - wofür kann man diese nutzen? JTL-ShippingLabels - Ideen, Lob und Kritik 8
Neu kann man JTL POS alleine nutzen für 29 Euro? Einrichtung / Updates von JTL-POS 0
Neu Kann man mit JTL Gebrauchtware verkaufen? User helfen Usern - Fragen zu JTL-Wawi 8
Neu Wawi Synchronisation mit JTL Shop nicht möglich! seit 3 Stunden was kann man machen? Onlineshop-Anbindung 1
Neu JTL-Anmerkungen nicht in POS-Comments übertragen Allgemeine Fragen zu JTL-POS 1
Kaufland.pl - Aufträge werden nicht importiert. kaufland.de - Anbindung (SCX) 1
Neu Nach Update auf 1.11.9 - alle Shopify Shop nicht mehr connected Shopify-Connector 4
DHL Versenden 4.0 nicht vollständig konfigurierbar (GUI Fehler) JTL-Wawi 2.0 5
Neu Shopify Connector lässt sich nicht einrichten Shopify-Connector 0
Neu Wawi 1.11.3 startet häufig nicht Installation von JTL-Wawi 1
Neu Nach Update in Dez 2025 wird TSE Swissbit nicht mehr erkannt JTL-POS - Fehler und Bugs 1
Neu DHL 4.0 Versandschnittstelle wird nicht aufgeführt? JTL-ShippingLabels - Fehler und Bugs 5
Ebay angebote lassen sich nicht mehr bei JTL bearbeiten JTL-Wawi 2.0 0
2.0.1 BUG Versandaten Exportvorlagen nicht mehr bearbeitbar - Lizenzbug JTL-Wawi 2.0 0
Neu JTL Wawi Einloggen geht nicht!! User helfen Usern - Fragen zu JTL-Wawi 4
Neu Vorgang wenn Mahngebühren nicht bezahlt wurden? User helfen Usern - Fragen zu JTL-Wawi 3
Ameise-Export: Umsatzsteuer stimmt nicht mit Differenz aus Netto und Brutto überein (insbesondere bei mehreren Steuersätzen) JTL-Wawi 1.11 0
Bestellvorschläge stimmen nicht JTL-Wawi 1.11 0
Neu Workflows speichern z.B. Rechnungen nicht mehr seid der 2.01 User helfen Usern - Fragen zu JTL-Wawi 1
Rechteverwaltung - Verkaufspreise nur einsehbar, nicht bearbeiten? JTL-Wawi 1.10 1
Neu nicht lieferbare Artikel aus Bestellung wieder auf die Einkaufsliste setzen ?! User helfen Usern - Fragen zu JTL-Wawi 1
Neu DHL Versenden 4.0 Adressvalidierung nicht aktivierbar (Checkbox nicht sichtbar) JTL-ShippingLabels - Fehler und Bugs 9
Neu Listung mit Varianten - nicht alle Varianten sind vorhanden Amazon-Lister - Fehler und Bugs 0
Inaktive Verkaufskanäle lassen sich nicht löschen – erscheinen nach Löschen und Speichern erneut JTL-Wawi 1.11 0
Neu Lister 2.0 Ein Amazon Markplatz gleicht nicht ab Amazon-Lister - Fehler und Bugs 0
Update auf Shop 5.5.0 von 5.4.1 ist der Shop nicht mehr erreichbar Upgrade JTL-Shop4 auf JTL-Shop5 4
Anhänge lassen sich nicht mehr anzeigen JTL-Wawi 2.0 3
1.11.8 - Mengen aus FBA Umlagerungen werden nicht vom verfügbaren Bestand abgezogen JTL-Wawi 1.11 3
Mehrere Zeilen kopieren klappt nicht mehr JTL-Wawi 2.0 1
Neu Sendungsnummer in Versandmail wird nicht korrekt befüllt Arbeitsabläufe in JTL-Wawi 1
JTL hausinterner Herstellerslider auf Mobile Ansicht nicht sichtbar. Einrichtung JTL-Shop5 0
Packtisch Versanddatenexport startet nicht (2.0.1) JTL-Wawi 2.0 1
Wawi 1.10.14.3 lässt sich nicht mehr mit Datev verbinden JTL-Wawi 1.10 3
Neu Schlüssel ist im angegebenen Status nicht gültig Einrichtung / Updates von JTL-POS 2
Neu Amazon Lagerbestandsberichte werden nicht abgeholt. Amazon-Anbindung - Fehler und Bugs 9
Neu 2.0.0: Workflow Queue wird nicht abgearbeitet via API JTL-Wawi 2.0 1

Ähnliche Themen