Was ist $oDetailsProduct?

Hallo zusammen,

ich bin Oxid-Neuling und blicke noch nicht so ganz durch die Struktur.
In der Datei /application/views/flow/tpl/page/details/inc/productmain.tpl wird die Methode $oDetailsProduct->getFPrice() verwendet.
Kann mir bitte jemand sagen, wo die Klasse $oDetailsProduct bzw die Methode getFPrice() definiert wird?
Ich bin leider nicht fündig geworden.

Danke und beste Grüße,
Patrick

wir haben eine Sourcecode Dokumentation:
http://docu.oxid-esales.com/CE/sourcecodedocumentation/
da kannst du einfach die Shop version auswählen und in das Feld rechts oben copy-paste’n (also hier einfach “getFPrice” ) und schauen, wo diese Funktion alles definiert wird.

Je nach Funktionsnamen, gibts Funktionen die in mehreren Klassen vorkommen oder auch nur in einer einzigen.
Hier musst du aus dem Kontext die richtige Klasse anklicken.
“oDetailsProduct” hat “Product” im Namen, könnte also ein Shop Produkt sein, auch “Artikel” genannt.
Und tatsächlich wird da in der Liste “oxArticle” drin stehen.

schon mal Pappa Google gefragt? -> getFPrice() docu liefert einiges …

PS … zu spät :slight_smile:

[QUOTE=vanilla thunder;186555]wir haben eine Sourcecode Dokumentation:
http://docu.oxid-esales.com/CE/sourcecodedocumentation/[/QUOTE]

Vielen Dank für den Link!
Das hilft mir schon mal weiter, um mir einen besseren Überblick zu verschaffen.

Ich habe allerdings noch eine weitere Fragestellung, welche mit der Datei /application/views/flow/tpl/page/details/inc/productmain.tpl zusammenhängt.
Ich würde gerne in der productmain.tpl auf die Elternkategorie der aktuellen Kategorie des Produktes zugreifen.
Hierzu habe ich im Forum den folgenden Thread gefunden:
http://forum.oxid-esales.com/showthread.php?t=16971&highlight=elternkategorie

Ich habe daraufhin in Zeile 217 der Datei productmain.tpl den folgenden Code eingefügt, um mir die Elternkategorie der aktuellen Kategorie auszugeben:

[{assign var="actCategory" value=$oView->getActiveCategory()}]
[{assign var="parentCategory" value=$actCategory->getParentCategory()}]
[{$parentCategory}]

Ich bekomme jedoch beim Aufruf eines Produktes die folgende Fehlermeldung:
Fatal error: Call to undefined method stdClass::getParentCategory() in /opt/lampp/htdocs/oxid/tmp/smarty/79ba2aa04e8fc1919506bd1cc218f8f3^%%5E^5E9^5E9B9D5B%%productmain.tpl.php on line 426

Weiß jemand, wo der Fehler liegt bzw. wie ich auf die Elternkategorie zugreifen kann?

Viele Grüße und besten Dank!

nur zur Info: wenn nach dem Abschicken des Beitrages steht, dass der eben abgeschickte Beitrag erst freigeschaltet werden muss, dann bedeutet es, dass man warten sollte. Den gleichen Beitrag noch 20 mal zu posten macht die Sache auch nicht schneller. Bitte warte das nächste mal einfach nur ein bisschen, bis einer der Admins deinen Beitrag freischaltet.

Der Code funktioniert, hat denn dein Produkt auch eine Kategorie?
und mach mal aus [{$parentCategory}] ein

<pre>[{$parentCategory|@var_dump}]</pre>

, sonst kann es im Template nicht angezeigt werden,.

Leider funktioniert das auch nicht.
Die Fehlermeldung beim Aufruf des Produktes lautet ja

Fatal error: Call to undefined method stdClass::getParentCategory() in /opt/lampp/htdocs/oxid/tmp/smarty/79ba2aa04e8fc1919506bd1cc218f8f3^%%5E^5E9^5E9B9D5B%%productmain.tpl.php on line 426

Wenn ich in die genannte Datei reinschaue, erscheint ab Zeile 425 - 427 der folgende Code:

<?php $this->assign('actCategory', $this->_tpl_vars['oView']->getActiveCategory()); ?>
<?php $this->assign('parentCategory', $this->_tpl_vars['actCategory']->getParentCategory()); ?>
<pre><?php echo var_dump($this->_tpl_vars['parentCategory']); ?></pre>

Da der Code an der Stelle sequentiell ausgeführt wird, werden die Zeilen 425 und 426 ja scheinbar erfolgreich ausgeführt. Lediglich über die Zeile 427 stolpert der Interpreter und wirft den oben stehenden Fehler. Er scheint Probleme zu haben aus der Datei productmain.tpl auf die Methode getParentCategory() zuzugreifen.
Die Fehlermeldung besagt ja, dass er auf eine nicht definierte Methode zugreifen will.

Der Code

[{assign var="actCategory" value=$oView->getActiveCategory()}]

liefert die aktuelle Kategorie des Produktes ordnungsgemäß.

hast du irgendwelche Module, die oxArticle oder oxwArticleDetails erweitern?
entferne mal die Zeilen 2+3 und füge stattdessen ein

<pre>[{$actCategory|@var_dump}]</pre>

ein.
im Template sollte es etwa so aussehen:


Ich habe den Code am Ende von productmain.tpl, bei dir könnte es wo anders stehen.
Da ist eine Stelle gelb markiert “object (oxcategory)”, was steht bei dir dort?

Bei mir steht dort

object(stdClass)#2930 (6) {
:confused:

Ich habe bisher keine Zusatzmodule installiert. Lediglich testweise PayPal Plus, das Module ist aber zurzeit deaktiviert.

Du kannst “parentCategory” nicht ausgeben, sondern “etwas” daraus abrufen. Bsp:

[{assign var="actCategory" value=$oView->getActiveCategory()}]
[{assign var="parentCategory" value=$actCategory->getParentCategory()}]
[{$parentCategory->getLink()}]

PS: Die rote Zeile sollte an der Stelle eigentlich überflüssig sein, weil bereits vorhanden

Wenn ich den Code

[{assign var="parentCategory" value=$actCategory->getParentCategory()}]
[{$parentCategory->getLink()}]

einfüge, erhalte ich weiterhin die Fehlermeldung

Fatal error: Call to undefined method stdClass::getParentCategory() in /opt/lampp/htdocs/oxid/tmp/smarty/79ba2aa04e8fc1919506bd1cc218f8f3^%%5E^5E9^5E9B9D5B%%productmain.tpl.php on line 424

Ich vermute, dass das Problem mit meinem Post #8 zusammenhängt.
Bei vanilla thunder steht dort:

object(oxCatergory)#

Bei mir steht dort:

object(stdClass)#

Ich weiß allerdings nicht, was dieses Verhalten verursacht.

Sehr ungewöhnlich, wenn alles korrekt installiert wurde. Checke mal die Systemgesundheit und lösche den TMP (temporären Ordner).

ich würde mal das Diagnosewerkzeug im Backend starten

Die Systemgesundheit ist in Ordnung und ein Löschen des Ordners /tmp hat leider auch nicht den gewünschten Erfolg gebracht.

Ich konnte das Problem jedoch ein wenig eingrenzen.
Ich komme von oscommerce und habe eine Datenmigration durchgeführt.
Ich habe gerade beim einem Produkt, was beim Einfügen des Codes

<pre>[{$actCategory|@var_dump}]</pre>

die Ausgabe

object(stdClass)#
anstatt
object(oxcategory)#
erzeugt, die Kategorie geändert und als “Unterkategorie von” “–” angegeben.
Anschließend habe ich bei “Unterkategorie von” die selbe Kategorie wie vorher zugewiesen und auf einmal funktioniert auch die Ausgabe.

Die Kategorien und Produkte sind alle automatisiert über die Import-Schnittstelle angelegt worden und nicht manuell. Wenn ich jetzt manuell die Elternkategorie einmal an die oberste Stelle “–” hänge und anschließend wieder zurück, scheint es zu funktionieren. Dies ist jedoch keine Lösung für mich, da ich fast 2000 Produkte in 153 Kategorien habe.

Solche Informationen gehören an den Anfang. Dann stimmen die Daten in oxcategories__oxparentid wohl nicht. Kannst als Excel exportieren, korrigieren und als CSV wieder einspielen.

Alle anderen Fehlzuordnungen kommen m.A. ohne Fehlermeldung aus, sodass der Artikel dann einfach nur nicht erscheint.

Leider war die oben beschriebene Vermutung nicht des Rätsels Lösung.

Der Fehler tritt leider sporadisch auf.
Ich habe das Ganze jetzt mit einem frischen OXID CE 4.10.2 Shop und den Demoprodukten ausgetestet.
Wenn ich in der Datei /application/views/flow/tpl/page/details/inc/productmain.tpl in Zeile 197 den Code

<pre>[{$actCategory|@var_dump}]</pre>

einfüge, bekomme ich sporadisch die Ausgabe

object(stdClass)#

In diesem Falle habe ich keinen Zugriff auf die Elternkategorie, da die Klasse oxCategory nicht gefunden wird, sondern stattdessen die Klasse stdClass verwendet wird, welche wiederum die Methoden nicht kennt, um auf die Elternkategorie zuzugreifen.

Handelt es sich hier um einen Bug?

So, jetzt bin ich dahinter gestiegen. :slight_smile:
Es scheint tatsächlich ein Bug zu sein.

Wenn ich die Suche verwende, um auf ein bestimmtes Produkt zuzugreifen, erhalte ich immer

object(stdClass)#

Wenn ich ein Produkt über die Kategorien bzw. über die Navigation aufrufe, funktioniert es hingegen und ich erhalte

object(oxCategory)#

Das Verhalten lässt sich mit allen Produkten reproduzieren.

ja, bei mir auch. Das liegt daran, dass die Suche keine Kategorie ist.
Aber warum es dann trotzdem ein actCategory gibt, ist mir ein Rätsel.

Also meinst Du, dass das Verhalten gewollt ist? Also kein Bug?

Wenn dem so sein sollte, gibt es denn noch eine weitere Möglichkeit, an die Elternkategorie zu gelangen, wenn die Suche verwendet wird?

ich weiß nicht, ob es gewollt ist.
Aber in der Suche gibts keine Elternkategorie, weil es gar keine Kategorie gibt.
Kategorien gibts nur, wenn man über Kategorien navigiert.

Hmm, das Verhalten scheint mir nicht ganz logisch.
Meines Erachtens muss das Produkt ja im Vordergrund stehen und nicht die Art und Weise, wie ich das Produkt aufrufe (Suche oder Navigation).
Wenn ich ein Produkt mit Hilfe der Suchfunktion aufrufe, hat das Produkt ja trotzdem eine Kategorie und ggfs. eine Elternkategorie.

Als Oxid-Neuling bin ich mir nicht sicher, wie man mit so einer Situation umgeht. Meldet man so ein Verhalten über den Bugtracker oder wie ist hier der übliche Weg?

Unabhängig davon, ob es sich um einen Fehler handelt oder nicht:
Gibt es denn noch eine andere Möglichkeit, außer über die Klasse oxCategory auf die Elternkategorie eines Produktes zuzugreifen?