Felder der Eltern-Kategorie ausgeben

Hallo zusammen,

ich versuche eigene Datenbankfelder der Eltern-Kategorie im Template der Kind-Kategorie auszugeben.
Bei dem Template handelt es sich um eine angepasste Kopie von page/list/list.tpl
Ich verwende:

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

um an die Eltern-Kategorie zu kommen.
Das funktioniert soweit auch, Ich erhalte das oxcategory Objekt, nur auf die Felder die ich selbst in der Datenbank hinzugefügt hab kann ich nicht zugreifen, bzw. ich erhalte keine Daten (leer).
Ich rufe die Felder mit

[{$parentCategory->oxcategories__mycustomheading->value}] 

auf.
Mache ich das selbe für “childCategory” erhalte ich Werte, nur eben nicht die der Eltern-Kategorie logischerweise.
DIe Felder der Eltern-Kategorie sind nicht leer.
Ich verwende den Oxdi Shop 4.10.1

Hat jemand eine Idee, warum es für Child klappt aber nicht für Parent?
in beiden Fällen habe ich das Kategorie Objekt.
in print_r liefert mir in beiden Objekten [mycustomheading] => 0.

Viele Grüße
Raphael

es gab in älteren Versionen so eine lazy loading Geschichte, bei der OXID nur das Minimum an Daten (bzw das, was der Shop für nötig hält) aus der Datenbank lädt. Hab aber länger nichts mehr davon gelesen, daher müssen wir meinen Verdacht prüfen:
Probiere mal tmp/ zu leeren und die Seite zu aktualisieren.
Wenn das Feld dann vorhanden ist und nach dem erneuten Aktualisieren der Seite wieder weg ist, würde das meinen Verdacht bestätigen.

Probiere mal tmp/ zu leeren und die Seite zu aktualisieren.

Hab ich gemacht. Leider hat sich dein Verdacht nicht bestätigt. Das Feld wird nciht ausgegeben.
Datenbank Views habe ich ebenfalls aktualisiert.
Noch eine kleine korrektur: in print_r liefert mir das Child Objekten einen Wert für [mycustomheading]

es gab in älteren Versionen so eine lazy loading Geschichte

Was ich noch gelesen habe war, dass in älteren versionen im Admin eine Option gewählt werden konnte welche das Laden von eigenen Datenbankfeldern ermöglicht. Das soll aber schon lange Standard sein

Ich möchte noch hinzufügen:

[{$parentCategory->getIconUrl()}] 

oder z.B.

[{$parentCategory->oxcategories__oxtitle->value}]

Funktionieren einwandfrei!

ich habe gerade selbst das selbe Versucht, aber erfolglos. Das Feld wird einfach nicht geladen.
Was mir sonst einfällt, wäre eine eigene getter Methode, die die Info aus der DB lädt, falls das Feld im Objekt leer ist.

Ich habe das mal versucht.
Dafür habe ich es direkt im Template geschrieben um es zu testen.


    [{php}] 

	$catID =& $this->get_template_vars('parentCategoryID');  

	$sSelect = "SELECT * FROM oxcategories WHERE oxcategories.oxid = '$catID'";
		
	$this->assign('newParent', $db->getAssoc($sSelect));

	[{/php}] 

	[{$newParent|@debug_print_var}]

DIe Kategorie-ID wird korrekt übertragen also das select müsste stimmen.
Ich bin mir beim assign nicht sicher ob ich das so machen kann.
Mein aktuelles Ergebnis ist eine leere Seite.


	[{php}] 

	$catID =& $this->get_template_vars('parentCategoryID');  

	$sSelect = "SELECT * FROM oxcategories WHERE oxcategories.oxid = '$catID'";
		
	$newParent = oxDb::getDb(oxDB::FETCH_MODE_ASSOC)->EXECUTE($sSelect);

	print_r($newParent); 

	[{/php}] 

So bekomme ich das Ergebnis angezeigt. Wie komme ich jetzt an die Felder ran?

Ergebnis:
object_ResultSet Object ( [_obj] => [_names] => [connectionId] => Resource id #25 [fields] => Array ( [OXID] => d469efbbe14cd341850045f8c77e5956 …

Wie muss ich mit dem object_ResultSet Object umgehen? Wie komme ich z.B. an diese oxid ran?


	[{php}] 

	$catID =& $this->get_template_vars('parentCategoryID');  

	$oDb = oxDb::getDb();
	$myfield = $oDb->getOne("SELECT myfield FROM oxcategories WHERE oxcategories.oxid = '$catID'");

	$this->assign("myfield", $myfield);

	[{/php}]

Hiermit habe ich es hinbekommen. Zumindest für ein Feld. Wie schaff ich es dass ich nur mit einer Abfrage für mehrere Felder?
Entschuldigt bitte das Durcheinander. Das ist Neuland für mich und ich lese, suche und probiere viel aus :smiley:

versuch mal das hier


<!--
[{assign var="parentCategory" value="oxcategory"|oxNew }]
[{$parentCategory->load($childCategory->oxcategories__oxparentid->value)}]
-->
[{$parentCategory->oxcategories__myfield->value|@var_dump }]

Das ist eine wunderschöne Lösung. Ich ziehe meinen Hut!

Eine Frage:
Wofür der HTML- Kommentar?

die Funktion load() endet mit return true; wenn alles erfolgreich geladen wurde, das würde die Ausgabe einer 1 im Template bewirken.
Und so siehst du im Quelltext der Webseite irgendwo <!-- 1 -->

Ahhh sehr gut!
Nochmals vielen Dank für dir Hilfe!