Zugriff auf Private Functions in plugins

Hallo liebe Community,

ich möchte in einem Plugin eine Core Function replacen. Das Problem ist, dass in dieser Function eine weitere private Function aufgerufen wird. Da diese „privat“ ist, kommt die Fehlermeldung " Call to private method sAdmin::processOpenOrderDetails() … 503 Service Unavailable".

Wie kann ich aus einem Plugin auf eine Private Methode zugreifen?

Gruss Jon

@Jon schrieb:

Wie kann ich aus einem Plugin auf eine Private Methode zugreifen?

Die Antwort lautet: Gar nicht.

Deshalb heißen die Methoden auch Private   Wink

Das bedeutet, dass bei der public Methode 

„public function sGetOpenOrderData($destinationPage = 1, $perPage = 10)“

kein Hook replace möglich ist, weil diese die private Methode

…->processOpenOrderDetails($orderValue, $getOrders, $orderKey)

aufruft???

 

das ist quatsch, du kannst nur die private function nicht hooken, die public aber schon. das ist ja der unterschied zwischen public und private. da muss man, falls es unverständlich ist, mal in der doku nachschauen. aber nicht in der shopware doku, die ist nicht allumfassend

Das habe ich auch gar nicht behauptet. Lese dir meinen Beitrag noch einmal genau durch. Die Frage von dir lautete: 

@Jon schrieb:

Wie kann ich aus einem Plugin auf eine Private Methode zugreifen?

Und hier lautet die Antwort: das kann man nicht. Der Fehler wird verursacht, da du in deinem Hook die Methode  „processOpenOrderDetails“ aufrufst. Und das geht schlicht weg nicht. 

Solltest du die Methode in deinem Hook nicht aufrufen (davon gehe ich jedoch nicht aus) dann zeige uns bitte deine Hook Methode. Dann kann man dir sicher weiterhelfen  Wink

Hier ist mein gekürzter Replace Hook bis zur Fehlermeldung:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

public function replaceGetOpenOrderData($destinationPage = 1, $perPage = 10)
    {
        $shop = Shopware()->Shop();
        $mainShop = $shop->getMain() !== null ? $shop->getMain() : $shop;

        $destinationPage = !empty($destinationPage) ? $destinationPage : 1;
        $limitStart = Shopware()->Db()->quote(($destinationPage - 1) * $perPage);
        $limitEnd = Shopware()->Db()->quote($perPage);

        $sql = „“; // Inhalt hab ich ausgelassen, dass der Schnipsel nicht zu lang wird :slight_smile:
        $getOrders = Shopware()->Db()->fetchAll(
            $sql,
            array(
                Shopware()->Session()->offsetGet(‚sUserId‘),
                $mainShop->getId()
            )
        );
        $foundOrdersCount = (int)Shopware()->Db()->fetchOne(‚SELECT FOUND_ROWS()‘);

        foreach ($getOrders as $orderKey => $orderValue) {
            $getOrders[$orderKey][„invoice_amount“] = Shopware()->Modules()->Articles()
                ->sFormatPrice($orderValue[„invoice_amount“]);
            $getOrders[$orderKey][„invoice_amount_net“] = Shopware()->Modules()->Articles()
                ->sFormatPrice($orderValue[„invoice_amount_net“]);
            $getOrders[$orderKey][„invoice_shipping“] = Shopware()->Modules()->Articles()
                ->sFormatPrice($orderValue[„invoice_shipping“]);
// Durch die folgende Zeile entsteht die Fehlermeldung:Call to private method sAdmin::processOpenOrderDetails() … 503 Service Unavailable"
            $getOrders = Shopware()->Modules()->Admin()->processOpenOrderDetails($orderValue, $getOrders, $orderKey);

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

An der privaten Methode muss auch nichts ändern, diese wird aber benötigt.

Danke für eure Unterstützung!!!

@Jon schrieb:

An der privaten Methode muss auch nichts ändern, diese wird aber benötigt.

@simkli schrieb:

@Jon schrieb:

Wie kann ich aus einem Plugin auf eine Private Methode zugreifen?

Die Antwort lautet: Gar nicht.

Deshalb heißen die Methoden auch Private   Wink

Und nochmal: geht nicht geht nicht geht nicht geht nicht  Sticking-out-tongue

Da musst du wohl die Methode ebenfalls in dein Plugin übernehmen und sie mit $this-> … aufrufen. 

Hat soweit funbtioniert! Keine Fehlermeldung :-)! Nur zeigt er mir jetzt keine Bestellungen im Account an, weil ich im Plugin noch etwas umschreiben muss:

In der sAdminProxy.php steht:

public function sGetOpenOrderData($destinationPage = 1, $perPage = 10)
    {
        return Shopware()->Hooks()->executeHooks(
            $this, 'sGetOpenOrderData', array('destinationPage'=>$destinationPage, 'perPage'=>$perPage)
        );
    }

In meinem Plugin habe ich jetzt die “Pages” wir folgt geändert:

public function replaceGetOpenOrderData(Enlight_Hook_HookArgs $arguments)
    {
        $destinationPage = $arguments->get('destinationPage');
		$perPage = $arguments->get('perPage');

Das ist leider nicht richtig. Sorry ich bin Anfänger. Kann mir jemand helfen wie die Schreibweise richtig ist, dass er die Seitenzahlen im Plugin erkennt?