Core Funktion überschreiben

Hallo,

ich möchte den SQL-Befehl in der Funktion Core->sAdmin->sGetOpenOrderData() anpassen.

Wie gehe ich da am besten vor?

Mich an das Event ‚Shopware_Modules_Admin_GetOpenOrderData_FilterResult‘ zu hängen bringt in dem Fall ja nix, da da ja die Abfrage schon ausgeführt wurde…

Wie kann ich das also lösen?

Besten Dank für eure Tipps!

Hallo @vivatec‍,

Dies hängt davon ab, was Sie anpassen möchten.

schuae mal die Shopware Hooks( ::before, ::after, ::replace ) hier:

https://developers.shopware.com/developers-guide/event-guide/#hooks

VG,

Tel.: +49 755 - 183 990 00 | Web: http://enbit.de/

Hallo,

danke für die Antwort. Leider komme ich damit nicht weiter. Ich weiß nicht, an welcher Stelle ich das einbauen müsste.

Also die Anforderung wäre, dass ich den SQL-Befehl anpasse, alles weitere in dieser Funktion kann so bleiben.

Lässt sich das realisieren?

Hi,

da es dafür kein weiteres Event gibt, musst du wohl es kopieren + überschreiben.

Gruß Heiner

Ok.

Also muss ich trotzdem nen Hook auf diese Funktion setzen und “replace” verwenden, richtig?
Aber wie genau muss ich das denn bauen, wenn ich das in einem Plugin haben möchte?

Also beispielsweise einen Controller erweitern, krieg ich wohl hin.
Aber für so ne Core-Funktion? Muss das dann direkt in die myPlugin.php mit rein?

Und den Hook so in etwa?

 

class MyPlugin extends Plugin
{
	public static function getSubscribedEvents()
    {
        return [
            'sAdmin::sGetOpenOrderData::replace' => 'myCallback'
        ];
    }

    public function myCallback(\Enlight_Event_EventArgs $args){
        ...
    }


...

}

 

 

Das sieht schon sehr gut aus! Aus den $args kriegst Du die Parameter der originalen Funktion, die kannst Du jetzt komplett neu implementieren.

Du solltest bei deiner myCallback Funktion als Übergabewert Enlight_Hook_HookArgs $args angeben.

Hallo,

ich möchte das Thema nochmal aufgreifen, weil ich vor einem ähnlichen Problem stehe.

Was ist denn der Unterschied zwischen:

Enlight_Event_EventArgs $args
und:
Enlight_Hook_HookArgs $args

Ich habe einen separaten Post aufgemacht https://forum.shopware.com/discussion/72260/plugin-programmiert-was-mache-ich-falsch/, weil ich scheinbar beim replace was falsch mache, und dann bei der Ausgabe im Frontend eine Exception bekomme:
 

Fatal error: Uncaught TypeError: Argument 1 passed to Shopware_Controllers_Frontend_Account::applyTrackingUrl() must be of the type array, null given, called in [SHOPWARE_PATH]/engine/Shopware/Controllers/Frontend/Account.php on line 137 and defined in [SHOPWARE_PATH]/engine/Shopware/Controllers/Frontend/Account.php:751 Stack trace:
#0 [SHOPWARE_PATH]/engine/Shopware/Controllers/Frontend/Account.php(137): Shopware_Controllers_Frontend_Account->applyTrackingUrl(NULL)
#1 [SHOPWARE_PATH]/engine/Library/Enlight/Controller/Action.php(193): Shopware_Controllers_Frontend_Account->ordersAction()
#2 [SHOPWARE_PATH]/engine/Library/Enlight/Controller/Dispatcher/Default.php(549): Enlight_Controller_Action->dispatch('ordersAction')
#3 [SHOPWARE_PATH]/engine/Library/Enlight/Controller/Front.php(222): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_R in [SHOPWARE_PATH]/engine/Shopware/Controllers/Frontend/Account.php on line 751

Aber soweit ich das gesehen habe in der Dokumentation, wird doch bei Plugins auf Enlight_Event_EventArgs verwiesen.

Macht das einen Unterschied ?

Wäre gut, wenn hierzu mal jemand was sagen könnte, und vielleicht doch was zu meinem Post schreiben kann zum lösen.

Danke.