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
872
182
@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 JTL-Shop 5 Backup Professional Plugin Plugins für JTL-Shop 0
Neu Plugin trotz Hinweis Kompatibel mit JTL-Shop bis 5.6.* auch unter 5.7.2 nutzen Plugins für JTL-Shop 2
Neu Mail mit Plugin zum testen der Sicherheitslücke echt? Allgemeine Fragen zu JTL-Shop 47
Beantwortet [Shop 5.7.2 / Wawi 2.0.5] GPSR-Daten werden am Artikel nicht angezeigt trotz korrekter Übertragung und installiertem Plugin Allgemeine Fragen zu JTL-Shop 1
Neu JTL Shop Plugin - BD Automatisierter Widerruf (Von Händler für Händler - Schluss mit Mail-Chaos & Spam-Sorgen!) Plugins für JTL-Shop 0
Neu Plugin: JTL Exportformat Google Shopping gibt <g:google_product_category> unter Shop 5.7.1 und Wawi 2.0.4 nicht aus Plugins für JTL-Shop 1
Neu Seller2Go – Mobile App & JTL-Plugin für Bestellungen, Support und Produktmanagement Plugins für JTL-Shop 0
Neu PayPal Plugin wirft Fehler auf einmal wegen telefonnummer JTL-Shop - Fehler und Bugs 3
Neu Neues Plugin: Erweiterter Widerrufsbutton für JTL-Shop Plugins für JTL-Shop 9
Neu Plugin Preisvorschlag Plugins für JTL-Shop 6
Neu E-Mail-Vorlage kann nicht bearbeitet werden JTL-Shop - Fehler und Bugs 0
Ein neuer Hersteller kann weder angelegt noch bearbeitet werden JTL-Wawi 1.11 7
Ameise (1.11.11.0) Export auf Clients nicht möglich - Das Dezimaltrennzeichen kann nicht die leere Zeichenfolge sein JTL-Wawi 1.11 5
Zugriff verweigert nach Umzug auf neuen Rechner, X-Rechnung kann nicht gespeichert werden JTL-Wawi 1.11 4
Neu Retourenetikett für Briefe kann unter Internetmarke 2.0 nicht erstellt werden JTL-ShippingLabels - Fehler und Bugs 6
Neu Widerrufsbutton: Jeder, der den Button betätigt, kann das Widerrufsformular ausfüllen und absenden - auch ohne Bestellung? Allgemeine Fragen zu JTL-Shop 94
Stückzahl teilbar nicht deaktivierbar JTL-Wawi 1.11 2
Neu Nicht mehr aktive Shops aus Ameise entfernen JTL Ameise - Eigene Exporte 3
Neu Hub öffnet sich nicht, Anfrage wir bearbeitet JTL-ShippingLabels - Fehler und Bugs 2
Neu Lister 2.0 per Ameise bedienen nicht möglich oder? Amazon-Lister - Ideen, Lob und Kritik 0
Login nach Downgrade nicht möglich JTL-Wawi 1.11 1
Neu JTL-WAWI 2.0.5 Worker läuft nicht mehr und Versandarten werden falsch ausgegeben. JTL-Wawi - Fehler und Bugs 1
JTL-WAWI 2.0.5 Worker läuft nicht mehr und Versandarten werden falsch ausgegeben. JTL-Wawi 2.0 1
Neu Shop und Worker synchronisieren nicht nach Wechsel zu Cloudflare Allgemeine Fragen zu JTL-Shop 0
Neu Einige Rechnungen (Firmenkunden) werden nicht mehr an Amazon übertragen Amazon-Anbindung - Fehler und Bugs 1
Neu PPWR für Importeure aus dem Nicht-EU-Ausland Business Jungle 2
Neu JTL-Shop Konfigurator - die Ausgewählten Konfigurator gruppen werden im Artikel nicht vollständig angezeigt User helfen Usern - Fragen zu JTL-Wawi 2
Neu Versandprofile trotz eBay-Abgleich nicht vorhanden JTL-Wawi 2.0 2
Neu Update auf 1.11 / 2.0 nicht möglich Installation von JTL-Wawi 6
Neu JTL-ShippingLabels-Server ist nicht erreichbar JTL-Wawi - Fehler und Bugs 0
Neu JTL Shipping Labels 4.0 Sendungsnummer Kleinpaket nicht an Amazon übermitteln JTL-ShippingLabels - Ideen, Lob und Kritik 0
Verbindung zur Datenbank nicht möglich JTL-Wawi 2.0 3
Amazon-Bestände werden nicht übertragen – Überverkäufe nach Reaktivierung aus Urlaubsmodus (Wawi 1.11.11) JTL-Wawi 1.11 1
Neu Shopversion: 5.7.2 Bilder in Artikeldetailseite werden nicht angezeigt JTL-Shop - Fehler und Bugs 0
Neu Amazon - Einlesen / Übernahme der Bestellungen klappt nicht ?! Amazon-Anbindung - Fehler und Bugs 2
Neu S360 Custom Sort: „Request error: parsererror" – Solution360-Server nicht erreichbar? Plugins für JTL-Shop 3
Neu IDU funktioniert nicht seit automatischer USt.-Berechnung Amazon-Anbindung - Fehler und Bugs 3
Neu Preislisten-Filter klappen nicht User helfen Usern - Fragen zu JTL-Wawi 0
Seit dem Update meines JTL-Shops auf Version 5.7.1 funktioniert die Verbindung zwischen JTL-Wawi 2.0.4.0 und dem Shop nicht mehr. JTL-Wawi 2.0 6
Neu Kind-Artikel nicht bei Ebay anbieten Allgemeine Fragen zu JTL-Shop 1
Sichtbarkeit in Kategorien wird nicht mehr gespeichert JTL-Wawi 2.0 1
Die Suche von Stücklistenartikeln/Bundles funktioniert nicht Allgemeine Fragen zu JTL-Shop 0
Neu Altes Bild wird einfach nicht gelöscht. DB Eintrag löschen? Betrieb / Pflege von JTL-Shop 0
Neu Varianten die nicht online in JTL geschaltet sind werden trotzdem zu Shopify geladen Shopify-Connector 6
Neu Amazon Aufträge werden nicht erstellt Amazon-Anbindung - Fehler und Bugs 2
Stücklisten in Stücklisten nicht möglich – alternative Lösung gesucht (MwSt.-Varianten) JTL-Wawi 1.11 2
Neu DHL Versenden 4.0 - Versand in EU geht nicht mehr, nur DE JTL-ShippingLabels - Fehler und Bugs 6
Plattform Abgleich nicht möglich JTL-Wawi 1.11 2
Gelöst: Störung bei LInk11 - JTL- Shops teilweise nicht erreichbar Störungsmeldungen 1
Name der Versandarten wird im Auftrag sporadisch nicht mehr angezeigt (2.0.3) JTL-Wawi 2.0 2

Ähnliche Themen