Neues DB-Feld in $actCategory verfügbar machen

Hallo zusammen,

ich arbeite noch nicht sehr lange mit OXID und verzweifle gerade an einem - für mich - kuriosen Problem:

Ich habe ein neues Feld ‘new_field’ in die oxcategories eingefügt und kann auch schon mit Smarty per “$category->oxcategories__new_field->rawValue” drauf zugreifen. Allerdings nicht von der aktuellen Kategorie ($actCategory) aus.

Ich musste schon extra in der Klasse oxcategorylist und der Methode ‘_getSqlSelectFieldsForTree’ das SQL anpassen, damit ich überhaupt auf mein neues Feld zugreifen kann (nebenbei: gibts da ne elegantere Lösung?). :eek:
Aber was muss ich nun tun, damit das auch aus der aktuellen Kategorie ausgelesen werden kann?

Weiß einer woran das liegen könnte (vllt. Schreibweise meines Feldes)?

Liebe Grüße
Anja

Evtl. hilft das hier: http://www.musterdenker.de/2009/09/oxid-eshop-enable-lazy-loading-for-categories/

Danke für die schnelle Antwort!

Das hatte ich mir auch schon einmal angeschaut, allerdings steht dort auch

…Accessing a huge amount of not loaded fields on a long category list could thereby kill the performance of your shop …
und ich möchte das System so performant wie möglich halten.

Hat jemand noch eine andere Lösung?

LG
Anja

[QUOTE=Nedjem;28574]und ich möchte das System so performant wie möglich halten.
[/QUOTE]
Das ist natürlich ein guter Grund das gar nicht erst auszuprobieren :wink:

:rolleyes: das System ist mit fast 3000 Kategorien und über 1Mio. Artikeln schon langsam genug. Ich weiß dass es mit deiner Methode funktioniert, aber es muss doch eine Lösung geben ohne das System NOCH langsamer zu machen :wink:

LG
Anja

sooo, für alle die es interessiert:
Es gibt eine Lösung!
… nicht sehr schön, da ich im Core pfuschen musste und dadurch Updates evtl. wieder alles rückgängig machen werden, aber hier meine Lösung:

Einfach in der Klasse core/oxcategory.php die Methode load (ursprünglich aus oxbase.php) wiefolgt überschreiben:

 public function load( $sOXID)
    {

        //getting at least one field before lazy loading the object
        $this->_addField('new_field', 0);

        return parent::load($sOXID);
    } 

Ich weiß, nicht optimal, aber wenigstens performanter!

(ob eine Seite 2 oder doch 5s lädt macht schon ein Unterschied) :wink:

Kannst du die Methode nicht einfach über ein kleines Modul erweitern? Damit wäre die Updatefähgkeit gegeben.

Danke für den Denkanreiz! Ich kenn mich nur leider noch nicht ganz so gut aus mit den Modulen in Oxid… würde das sowas sein wie:

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', 0);

		return parent::load($sOXID);
		
	}
}

LG
Anja

Hallo Anja,

genau in die Richtung gehts!

Gruß Joscha

… sprach er und es funktioniert genau so! :smiley:

-> obige Klasse erstellen und unter [I]’/modules/new_fields_for_category.php’[/I] ablegen und dann im Backend unter [I]‘Stammdaten/Grundeinstellungen/System/Module’[/I] folgendes eintragen: [I]‘oxcategory => new_fields_for_category’[/I]

FERTIG

Vielen Lieben Dank nochmal Joscha :wink:

Gerne jederzeit wieder! :wink: