View klasse user erweitern

Hallo zusammen,

ich versuche gerade in einer 4.2 Version die View Klasse “user” zu erweitern bzw. die Funktion isNewsSubscribed zu überschreiben.

Leider wird meine überschriebene Funkiton nicht ausgeführt.
Folgenden Eintrag hätte ich enstprechend den Klassennamen in der Modulkonfig hinzugefügt:

user => extuser/extuser_user

Kann man die Viewklasse user nicht erweitern bzw. überschreiben?

Lg, Thomas

schau mal hier:

Danke für die schnelle Antwort. Hab mir die Seite mal gleich gebookmarkt.

Das heißt im Klartext wenn ich die Funktion isNewsSubscribed verändern will muss ich die Original Klasse ändern, richtig?

Lg, Thomas

Entweder ja, oder für die Problemstellung die deiner Arbeit zu Grunde liegt gibt es auch auf anderem Wege Mittel zur Lösung.

Grüße

Rafael

Hintergrund ist die Einbindung eines externen Newslettersystems.

An/Abmeldung ist durch die Erweiterung der entsprechenen Funktionen von oxuser auch kein Thema.

Jetzt geht es nur mehr darum die Information ob der Benutzer angemeldet ist aus dem Fremdsystem zu holen.
Weiters solll auch noch mehrere Newsletter-Themengebiete [dynamisch aus Fremdsystem] per Checkbox auswählbar sein. Diese Funktion hätte ich auch in meiner erweiterten “user” View Klasse hinterlegt damit ich sie in z.B. im Template register.tpl in $oView zur Verfügung habe.
Oder gibt es andere Möglichkeiten Funktionen aus einem selbstegebauten Modul in das Template zu bringen?

Lg, Thomas

… oder, wenn das mit den “hint” bei user geht.

hint
Some classes can be overloaded by setting up this information in config.inc.php directly:


$this->aModules =
  array(‘oxutilsobject’ => ‘my_oxutilsobject’
);

alle abhängigen Klassen erweitern.

@Oxid: Warum gibt es das Inherit-Diagramm nicht mehr für aktuelle Versionen?

Edit: Fast Zeitgleich.

Ggf. die Klasse oxuser erweitern… die sollte auch im Template zur Verfügung stehen.

[QUOTE=MBa;74630]… oder, wenn das mit den “hint” bei user geht.

[/QUOTE]

Ich hätte das so verstanden, dass der “hint” eine Alternative zur Backend Deklaration darstellt

[QUOTE=MBa;74630]…
Ggf. die Klasse oxuser erweitern… die sollte auch im Template zur Verfügung stehen.
[/QUOTE]

Hätte ich auch schon probiert. Kann im Template aber trotzdem nicht darauf zugreifen:
oxuser erweitert um
public function getTestString()
{
return “Juhu funkt.”;
}
Zugriffversuche im Template:
[{ $oView->getTestString() }]
[{ $oUser->getTestString() }]
[{ $oView->oxuser->getTestString() }]

Lg, Thomas

Naja du musst ja nicht unbedingt die user Klasse erweitern. Wenn du dir mal den Quellcode anschaust dann siehst du dass sie nur prüft ob es eine Veränderung gab oder der user (oxuser) angemeldet ist. du könntest daher die Funktion: oxuser::getNewsSubscription()::getOptInStatus() überladen und mit deiner externen Quelle verbinden.

Grüße

Rafael

[QUOTE=Rafael Dabrowski;74639]du könntest daher die Funktion: oxuser::getNewsSubscription()::getOptInStatus() überladen und mit deiner externen Quelle verbinden.
[/QUOTE]
Ja da hast du recht, diese Anforderung kann man so lösen.

Bleibt noch die Frage wie komme ich zu meiner Checkboxliste. Ich habe ein assoziatives Array aus einem Webservice, das muss ich ja irgendwie ins Template bringen, bzw.nach dem Absenden des Formulars dort auch wieder raus. Das kann man doch nur über die passende View Klasse [sprich “views/user”]lösen oder?
Sorry aber ich stehe gerade voll auf der Leitung.

Lg, Thomas

Die Checkbox wird doch anhand des Codes von isNewsSubscribed definiert. Diese Funktion gibt true zurück es gibt ein Häkchen wenn nicht dann nicht.
Wenn du aber eine Funktion erweiterst die von dieser Funktion ausgeführt wird ist natürlich das Ergebnis der vorgelagerten Funktion das ausschlaggebende. Ich würde dir aber auch so raten lieber oxuser… zu verändern denn der Newsletterstatus wird noch in ganz vielen anderen Views abgefragt die alle auf die Funktion die ich genannt habe zurückgreifen.

Grüße

Rafael

Ich meine nicht die Standardcheckbox “Newsletter Ja/Nein” - die ist [jetzt] klar.

Über ein Webservice bekomme ich verschiedene Newsletter-Themengebiete z.B. Spielzeug, Kosmetik etc. Diese Themengebiete sollen dem Benutzer per Checkboxen zur Auswahl stehen, allerdings nur wenn die “isNewsSubscribed” false zurückgibt [das wäre ja schon gelöst].
Weiters gibt es diese Auswahl nur bei der Kundeneuregistrierung und im Bestellprozess [wenn isNewsSubscribed false zurückgibt].
Zur Änderung im Benutzerprofil, bzw. bei nur Newsletteranmeldung wird auf einer Landingpage ein Iframe vom Fremdanbieter eingebunden [das ist auch schon fertig]

Was mir jetzt fehlt:
wo definiere ich mein Array der Checkboxoptionen damit ich im Template zum durchloopen darauf Zugriff habe, und wie bekomme ich dann die angeklickten Werten in die oxuser Klasse zu weiteren Verarbeitung?

Lg, Thomas

OK jetzt bin ich im Bilde. Wenn du im Bestellprozess darauf verzichten kannst dann kannst du es doch in die account_newsletter rein schreiben, oder in die newsletter oder in die register. Sind meiner Meinung nach eh die besseren Orte für sowas.
In die user dann nur wenn du anbietest auch ohne Registrierung zu bestellen, dann ist aber klar, dass die Person wohl noch kein Newsletterkunde ist. Zumindest kannst du es dann nicht abfragen, also wäre es immer false.
Kannst es dann also immer Anzeigen lassen. Bei check dann wieder Funktionen von oxuser aufrufen. die save könnte sich da anbieten.

Grüße

Rafael

Danke nochmals für deine Hilfe.
Leider komme ich an einer Erweiterung der views/user.php nicht herum, zumindest die Statusabfragen muss ich da hinein, da ich sonst keinen Zugriff in allen Templates habe.

Lg, Thomas

? die Aussage macht irgendwie nicht so viel Sinn, da die user.php nur für ein Template zuständig ist. Da verwechselst du etwas. wenn du Zugriff in allen Templates haben willst dann musst du das Model und nicht die View verändern also eher “oxuser” und das hatte ich dir ja empfohlen. Was ist denn mit der Newsletter Anmeldeseite? die Erbt nix von User oder was ist mit der “account_newsletter”? die erbt auch nicht von “user”. das Einzige was von User erbt ist “register”. “oxuser” hast du aber in allen. Ich gebe aber zu, dass es etwas komisch ist(rein rational logisch) oxuser abzufragen um die Newsletteroptionen abzufragen. dafür kannst du dir aber mal die oxcmp_utils anschauen die wie geschaffen dafür zu sein scheint.

Grüße

Rafael

Ok, war wohl etwas verwirrend geschrieben.
Mit “in allen Templates” meinte ich in allen von mir benötigten. Das sind im übrigen genau die von dir angesprochenen “user” und “register”.
Die Newsletteranmeldeseite und die “account_newsletter” enthalten ein Iframe vom Drittanbieter, also der Newslettersoftware.
So was hab ich jetzt gemacht:
die views/user.php um die Funktion getBereiche(){ … gibt BereichsArray zurück} erweitert.
Dadurch habe ich über $oView->getBereiche() in den oben genannten Templates Zugriff auf diese Funktion.
Für die Registeirungsübergabe an die Fremdsoftware hab ich die Funktionen _changeUser_noRedirect und createUser der Klasse oxcmp_user per Modul Klasse überschrieben.
Grundsätlich funktioniert das jetzt auch so, bin jetzt allerdings etwas verunsichert ob das auch so im Sinne des Erfinders ist ?!

@oxcmp_utils
wenn ich hier in einem Modul die Klasse erweitere, wie hab ich dann im Template Zugriff auf die Funktionen?

Lg, Thomas


<?php 
class test extends test_parent
{
 public function render()
 {
	$this->_oParent->addTplParam("xx", $this->halloWelt());
	parent::render();
 }
 public function halloWelt()
 {
	return "Hallo Welt";
 }
}

Das ganze kann, wenn es im Backend eingetragen wurde, im Template mit [{$xx}] aufgerufen werden.

Grüße

Rafael