Aktive Artikelnummer in PHP Funktion

Hallo zusammen,

habe ein Modul für eine Funktion auf der Produkt Detail Seite.
Ist es möglich in dem Modul (PHP) die aktuelle Artikelnummer abzufragen?

Wenn ja, gibt es irgendwo ein Beispiel?

Danke vorab!

ArticleDetails::

$xxx = $this->getProduct();
$oxartnum = $xxx->oxarticles__oxartnum->value;

Meinst sowas?

Hallo rubbercut,

ja genau, nur funktioniert dass so nicht, hatte ich schon versucht. :frowning:

$oArticle = oxNew(ArticleDetails::class);
$oArticle->getProduct();
$oxartnum = $oArticle->oxarticles__oxartnum->value;

Beste Grüße

Was ist denn denn Deine ArticleDetails-Klasse? Meinst Du die \OxidEsales\EshopCommunity\Application\Component\Widget\ArticleDetails?)

Die kannst Du zwar von außen instanziieren, ohne GET-Parameter weiß die Klasse aber nicht, welcher Artikel zu laden ist. Rubbercut geht bei seiner Antwort davon aus, dass sich Dein Script innerhalb der ArticleDetails-Klasse befindet.

Du wirst uns schon etwas mehr über den aktuellen Kontext verraten müssen, in dem sich Dein Script gerade befindet. Hast Du ein Script außerhalb der Shopcontroller oder erweiterst Du einen solchen? Davon ist abhängig, wie der aktuelle Artikel spezifiziert wird.

Hallo DanielS,

genau die Klasse spreche ich an.

Details zu meinem Vorhaben:
Ich habe einen neuen Tab auf der Produkt Detail Seite in dem man Bilder runterladen kann. Die Bilder sollten als Prefix die Artikelnummer bekommen.

Habe es auch schon so probiert (ohne Erfolg):

$oArticle = oxNew(OxidEsales\Eshop\Application\Model\Article::class);
$oArticle->load('id');
$oArtnum = $oArticle->getProductId();

Ich extende in meinem Skript \OxidEsales\Eshop\Application\Controller\FrontendController

Da müssen wir erst einmal Ordnung reinbringen:

Du kannst zwar die FrontendController-Klasse überladen, das hat nur keine Wirkung, da die nicht via oxNew instanziiert wird. Das ist eine Basisklasse, die grundsätzlich nicht wirksam mit einem Modul überladen werden kann.

  • Variante 1:
    Die Tabs der Detailseite dürften (wie weiter oben schon beschrieben) aus der \OxidEsales\Eshop\Application\Component\Widget\ArticleDetails kommen. Du müsstest also die überladen.

    Darin kannst Du analog zu Rubbercuts Kommentar den Artikel holen.

    Dein Code aus dem letzten Kommentar ist damit nicht mehr nötig. Ohne Angabe einer gültigen Artikel-ID (nicht der Artikel-Nummer) hätte der auch nicht funktioniert.

    In Deiner Überladung von ArticleDetails steht dann so was:

public function tbGetProductNumber()
{
    $article = $this->getProduct();
    return $article->getFieldData('oxartnum');
}

Im Template kannst Du Dir dann mit [{oView->tbGetProductNumber()}] die aktuelle Artikelnummer holen.

  • Variante 2

    In den Tabs steht der aktuelle Artikel eigentlich schon zur Verfügung. Damit reicht ein [{$oDetailsProduct->getFieldData('oxartnum')}] im Template aus. Eine Klassenüberladung ist nicht mehr nötig.

Für welche Version Du Dich entscheidest, hängt von Deinen weiteren Anforderungen ab.

Hallo DanielS,

erst mal vielen Dank für deine Zeit.
Ich brauche die Artikelnummer in meiner PHP Funktion und mit getProduct() bekomm ich immer ein redirect auf die Startseite :frowning:

Das…

ist nicht dasselbe wie das: Und das funktioniert bei Erweiterung von ArticleDetails :

Die Angabe
ArticleDetails::class

benötigt entweder im Header
use \OxidEsales\EShop\Application\Component\Widget\ArticleDetails;

oder den Pfad im Aufruf der Klasse mit oxNew

Hallo rubbercut,

dass habe ich natürlich bedacht.

Gesetzt ist im Header:

use OxidEsales\Eshop\Application\Component\Widget\ArticleDetails;

Class extend ist:

extends \OxidEsales\Eshop\Application\Component\Widget\ArticleDetails

Meine PHP Funktion:

public function getArtNum()
{
       // $oArticle = oxNew(OxidEsales\Eshop\Application\Component\Widget\ArticleDetails::class);
        $oArticle = $this->getProduct();
        $oArtnum = $oArticle->oxarticles__oxartnum->value;
        ....
}

Benutze ich getProduct() und führe die Funktion in OXID aus, lande ich auf der Startseite. Logfile bleibt leer.
Liegt es evtl. an der 6.4.0 EE Version?

Dann ist das Dein Fehler.

=>

classname extends classname_parent

Die Erweiterung findet in der metadata statt

1 Like

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.