OXID: wie man eigene DB-Felder ohne LazyLoading einbindet
Es hat mich einfach verrückt gemacht, dass ich in OXID ohne die Lösung von Mathias (http://www.musterdenker.de) nicht auf gerade neu erstellte Felder in der aktuellen Kategorie zugreifen konnte. Denn durch dieses Modul wird der Shop bei mehr als nur ein paar Kategorien richtig langsam.
Habe das mal mit fast 3000 Kategorien getestet und es würde eine Seite die sonst in ca. 2 Sekunden aufgebaut ist schon fast 5 Sekunden brauchen. Sowas kann man doch keinem Benutzer zumuten!
Deshalb hab ich mich durch das Klassengewirr begeben und bin auf eine jetzt ganz nette Lösung gestoßen.
Einfach ein Modul erstellen! Also eine Klasse unter module/new_fields_for_category.php anlgegen, die die Methode load (ursprünglich aus oxbase.php) überschreibt.
class new_fields_for_category extends oxcategory {
public function load($sOXID)
{
//getting at least one field before lazy loading the object
$this->_addField(‘new_field_1′, 0);
$this->_addField(‘new_field_2′, 0);
return parent::load($sOXID);
}
}
Tja, dann nur noch ins Backend einloggen und unter ‘Stammdaten/Grundeinstellungen/System/Module’ folgendes eintragen:
‘oxcategory => new_fields_for_category’
und schon kann man im Template darauf zugreifen:
[{$actCategory->oxcategories__new_field_1->rawValue}]
Falls jemand eine schönere Lösung hat, dann immer her damit


Posted on 9. April 2010 at 11:00
Deine Lösung ist auf jeden Fall schneller als meine, man muss eben nur jedes Feld einzeln angeben
Eine kleine Anmerkung:
class new_fields_for_category extends oxcategory
Viel besser ist:
class new_fields_for_category extendss new_fields_for_category_parent
Warum? Um das Modulsystem von OXID voll zu nutzen und Merhfacherweiterung einer Klasse zu ermöglichen muss diese “_parent” Syntax genutzt werden. Mehr dazu hier: http://www.oxid-esales.com/en/news/blog/how-extend-oxid-eshop-part2
Grüße Mathias