2 Variablen gleichzeitig abfragen?

Ich möchte entweder

$this->_dWeight = $oArticle->getWeight() * $this->_dAmount;

und

$this->_dWeight = $oArticle->oxarticles__oxweight->value * $this->_dAmount;

in einer Abfrage unterbringen. Ist das möglich? Wie bau ich das?

Hier wäre es die oxbasketitem.php in

// calculating general weight.

Gleichzeitig nicht, nur nacheinander.

Aha, die Idee dahinter ist, wenn

oxarticles__oxweight->value nicht gefunden wird dann soll die nächste Funktion aufgerufen werden. Dann

    // calculating general weight
    $this->_dWeight = $oArticle->getWeight() * $this->_dAmount;

    if ($iOnStock !== true) {
        /** @var oxOutOfStockException $oEx */
        $oEx = oxNew('oxOutOfStockException');
        $oEx->setMessage('ERROR_MESSAGE_OUTOFSTOCK_OUTOFSTOCK');
        $oEx->setArticleNr($oArticle->oxarticles__oxartnum->value);
        $oEx->setProductId($oArticle->getProductId());
        $oEx->setRemainingAmount($this->_dAmount);
        $oEx->setBasketIndex($sItemKey);
        throw $oEx;
    }
}

Wie bekomm ich das hin Marat?

versuch mal

$this->_dWeight = ( $oArticle->oxarticles__oxweight->value ? $oArticle->oxarticles__oxweight->value : $oArticle->getWeight() ) * $this->_dAmount;

Danke Marat. Ich hatte ähnliches versucht. Jetzt geht das schon mal ohne Fehler im Log. Meine nächste Frage wäre, wie bekomm ich das Update sicher verpackt? In das Child Theme geht ja nicht.

Ich habe die productmain.tpl im Child Theme angepasst und es werden jetzt die Gewichte in den Varianten angezeigt und im Warenkorb wird der Versand nach Gewicht wieder berechnet. Bin einen riesen Schritt weiter.

Wenn das Gewicht im template benötigt wird, geht entweder Child Theme oder ein Modul mit template Blocks, wobei letzteres zwar mehr Initialaufwand als Child Theme macht, bereitet bei Updates aber bedeutend weniger Aufwand als ein Child Theme.
Alternativ ab 4.9/4.10 hätte ich ein Modul, das cms Seiten an template Blocks anhängen kann.

Wenn das Gewicht schon im php verarbeitet werden muss, dann bleibt nur ein Modul übrig.

Jo, hab ich mir gedacht. Das traurige ist, das ich genau dafür ein Modul erworben habe, welches es nicht so tut. Danke Dir erst einmal Marat. Ich bastel mal weiter.

Marat, ich bräuchte noch einmal Hilfe, weil ich hier einfach nicht weiter komme. Im Backend hab ich jetzt folgenden Fehler, der mir erst nicht aufgefallen ist, weil ich mit der Wawi arbeite.

Function ‘getWeight’ does not exist or is not accessible!

Welche Dateien muß ich editieren?

wo im backend taucht der fehler denn auf?

es gibt in oxid ein paar Stellen, da sind $oArticle mal oxArticle und mal oxOrderArticle. Dann müsste oxOrderArticle erweitert werden.

Die Fehlermeldung taucht immer dann auf, wenn im Backend auf “getWeight” zugegriffen werden soll. Im Stamm zum Beispiel.

oxSystemComponentException-oxException (time: 2017-11-30 18:27:55): [0]: Function ‘getWeight’ does not exist or is not accessible! (sccp_oxorderarticle)

Stack Trace: #0 …/shop/application/models/oxbasketitem.php(409): oxSuperCfg->__call(‘getWeight’, Array)
#1 …/shop/application/models/oxbasketitem.php(409): sccp_oxorderarticle->getWeight()
#2 …/shop/application/models/oxbasketitem.php(316): oxBasketItem->setAmount(‘1’)
#3 …/shop/application/models/oxbasket.php(541): oxBasketItem->initFromOrderArticle(Object(sccp_oxorderarticle))
#4 …/shop/application/models/oxorder.php(1880): oxBasket->addOrderArticleToBasket(Object(sccp_oxorderarticle))
#5 …/shop/application/models/oxorder.php(1637): oxOrder->_addOrderArticlesToBasket(Object(dwa_remailing_oxbasket), Object(trosofortueberweisungreleaseoxlist))
#6 …/shop/application/controllers/admin/order_main.php(72): oxOrder->getShippingSetList()
#7 …/shop/core/oxshopcontrol.php(486): Order_Main->render()
#8 …/shop/core/oxshopcontrol.php(368): oxShopControl->_render(Object(sccp_order_main))
#9 …/shop/core/oxshopcontrol.php(126): oxShopControl->_process(‘order_main’, NULL, NULL, NULL)
#10 …/shop/core/oxid.php(40): oxShopControl->start()
#11 …/shop/index.php(29): OXID::run()
#12 …/shop/admin/index.php(27): require_once(‘/is/htdocs/wp11…’)
#13 {main}

Faulty component →

OXID 4.10.6 Community Edition

:stuck_out_tongue:

klingt sccp nach einem eigenen Modul? Dann könnte man es dort einbauen. Du brauchst jedenfalls sowas in oxorderarticle:

public function getWeight() {
return $this->getArticle()->getWeight();
}

Ne, ne ist ein Modul von einem Payment Provider. Ich hab eins in Arbeit. Aber das macht mir Kopfzerbrechen ohne Ende. Da soll eigentlich alles rein. Hier mein Versuch:

class pmd_oxbasketitem_getweight extends pmd_oxbasketitem_getweight_parent{

// calculating general weight
$this->_dWeight = ( $oArticle->oxarticles__oxweight->value ? $oArticle->oxarticles__oxweight->value : $oArticle->getWeight() ) * $this->_dAmount;

    	if ($iOnStock !== true) {
        /** @var oxOutOfStockException $oEx */
        $oEx = oxNew('oxOutOfStockException');
        $oEx->setMessage('ERROR_MESSAGE_OUTOFSTOCK_OUTOFSTOCK');
        $oEx->setArticleNr($oArticle->oxarticles__oxartnum->value);
        $oEx->setProductId($oArticle->getProductId());
        $oEx->setRemainingAmount($this->_dAmount);
        $oEx->setBasketIndex($sItemKey);
        throw $oEx;
    }
}

Ich hab hier versucht die oxbasketitem zu erweitern.

Ich erwähne nur am Rande, dass oxbasketitem und oxorderarticle zwei verschiedene Dinge sind

Ja, das weiß ich. Wenn ich es direkt einbaue funktioniert es. Aber das nutzt ja nix ohne das ich beide Erweiterungen in ein Modul packe.

methode zB getPmdWeight() die folgendes macht:

dafür machst du ein modul für oxarticle: pmd_oxarticles dann kannst du das über $oArticle->getPmdWeight() aufrufen.

danach machst du noch ein modul für oxorderarticles: pmd_oxorderarticles wo du nach dem laden des oxarticle objects dann auch die methode aus oxarticles aufrufen kannst

Danke! Ich habe oben im Beitrag die falsche Stelle kopiert. War wohl zu spät heute Nacht.:open_mouth:

Hab es noch einmal editiert.

class pmd_oxbasketitem_getweight extends pmd_oxbasketitem_getweight_parent{

// calculating general weight
$this->_dWeight = ( $oArticle->oxarticles__oxweight->value ? $oArticle->oxarticles__oxweight->value : $oArticle->getWeight() ) * $this->_dAmount;

    	if ($iOnStock !== true) {
        /** @var oxOutOfStockException $oEx */
        $oEx = oxNew('oxOutOfStockException');
        $oEx->setMessage('ERROR_MESSAGE_OUTOFSTOCK_OUTOFSTOCK');
        $oEx->setArticleNr($oArticle->oxarticles__oxartnum->value);
        $oEx->setProductId($oArticle->getProductId());
        $oEx->setRemainingAmount($this->_dAmount);
        $oEx->setBasketIndex($sItemKey);
        throw $oEx;
    }
}

…

Das wäre für oxbasketitem Hab ich da einen Denkfehler drin?

Das erste Modul läuft. Die oxbasketitem ist wieder original und wird jetzt durch das Modul erweitert. Bugs konnte ich noch nicht feststellen. Jetzt versuche ich noch das Template mit einzubinden, so das alles in einem Modul steckt.

Danke Euch vorerst für die vielen Anregungen. Keine Angst - da kommen noch mehr Fragen.:sunglasses:

EDIT: @ProudCommerce Was ich nicht verstehe, wozu muß die oxarticle erweitert werden? Ich habe die oxbasketitem und die oxorderarticle erweitert und es läuft so wie es soll.

Eigentlich möchte man ja an der “sinnvollsten” Stelle einer Erweiterung schreiben. Nachdem es sich hier um das Artikelgewicht handelt ist das imho oxarticle. Auch darauf bezogen dass man jeden Code ja auch nur einmal verwenden sollte und nicht ggf. in mehreren Klassen den gleichen Code um zum gleichen Ergebnis zu kommen.