Zur Laufzeit Objekt überschreiben/neu-Laden

Hallo,

hab mir ein Modul programmiert, mit dem ich den Lagerstand einer externen API beim Details-Template Aufruf prüfe und dann in die DB schreibe. Ich schaffe es jedoch nicht, das Objekt $product zur Laufzeit neu zu laden, damit er Lagerstand dann auch beim Ausführen des Templates sauber angezeigt wird.

Habe schon im Template folgendes versucht:

[{assign var="product" value=$oView->getProduct() }]
[{assign var=piecesOnStock value=$product->check_stock_external($product->oxarticles__oxartnum->value) }]

[{assign var="product" value=$oView->getProduct() }]

das klappt aber nicht.

Als Alternative kann ich meine Lagerstandfunktion vor dem Erzeugen des Objektes $product laden, nur wie?

danke für die Hilfe

Das klappt deshalb nicht weil eigentlich so gut wie alle dieser get Methoden das Objekt cachen und nur einmal laden. Was du benutzen kannst ist entweder unser agload plugin - oder du schreibst dir einen eigenen getter in die view. Oder noch einfacher - gib das frisch geladene Objekt doch aus deiner Funktion zurück. (quatsch, du gibst ja schon was anderes zurück)

Was mir auch noch eingefallen ist.
Wäre es nicht sinnvoller mit den Rückgabewerten meiner Funktion das Objekt zu überschreiben. Sprich den Lagerstand dort einfach auf meinen Ermittelten wert setzen.
Dadurch das ja der Wert in der DB entspricht sollte das ja klappen.
Der Rest des Codes im Template sollte dann auch ohne Probleme funktionieren.

Der Vorschlag mit dem agload ist gut, aber ich müsste im Template dann alles durch die Daten vom agload ersetzen. Es wird dann nicht einfacher im Updatefalle das Template anzupasen.

danke
Michael

Wenn du statt $product->check_stock_external $oView->check_stock_external verwenden würdest, könntest du $this->_oProduct = null setzen und damit ein Neuladen erzwingen.

wow cool !!

klappt aber nicht wie gewollt…

wenn ich ein


[{assign var="product" value=$oView->getProduct() }]
[{assign var=piecesOnStock value=$oView->check_stock_external($product->oxarticles__oxartnum->value) }]


mache - bekomm ich eine Exception:

oxSystemComponentException-oxException (time: 2012-12-10 16:00:28): [0]: Function ‘check_stock_external’ does not exist or is not accessible! (exp_details)

Ich muss doch vorher das Objekt des Produktes laden oder?
direkt von $oView Objekt kann ich die Funktion ja nicht aufrufen…

Ja die müsste man erst erstellen (also die view-Klasse erweitern), etwa so dachte ich:

public function check_stock_external(){
    $oProduct = $this->getProduct();
    $oProduct->check_stock_external();
    $this->_oProduct = null;
}

$product->oxarticles__oxartnum->value musst du eigentlich nicht übergeben, das oxarticle Objekt weiß ja seine Artikelnummer.