$oUser->loadActiveUser() bringt Fehler

Hallo,

ich benötige einen Theme-Switcher, da wir eine neues Theme brauchen und im Live-Shop entwickeln wollen.
Dazu soll bei einer bestimmten Gruppe im Frontend ein anderes Theme angezeigt werden.

Wird das if mit loadActiveUser() auskommentiert, lässt sich das Modul aktivieren.
Andernfalls zeigen sich die Frames im Backend weiß.

Welchen Fehler mache ich?

Gruß
Thoni

class themeswitcher extends themeswitcher_parent {
public function getConfigParam($sName)
{
if ($sName == ‘sTheme’) {
if($oUser = oxNew(\OxidEsales\Eshop\Application\Model\User::class)) {
if ($oUser->loadActiveUser()) {
// if($oUser->inGroup(‘d3c6fe49c74cbb2b4af42b8ef254415f’)) return “theme2020”;
}
}
}
return parent::getConfigParam($sName);
}
}

Namespace vorhanden?

Nein - das probiere ich mal.

Danke

Das gilt natürlich nur für neue Module (sMetadataVersiom 2.0).

Ich würde es so versuchen:

namespace deinmodul\ordner;
class themeswitcher extends themeswitcher_parent {
public function getConfigParam($sName)
{
if (!$this->isAdmin() && $sName == ‘sTheme’) {
$oUser = oxNew(\OxidEsales\Eshop\Application\Model\User::class);
if ($oUser->loadActiveUser() && $oUser->inGroup(‘d3c6fe49c74cbb2b4af42b8ef254415f’)) {
return “theme2020”; //sTheme2020 ???
}
}
return parent::getConfigParam($sName);
}
}

Hallo,

der Shop findet die Klasse nicht.

Wie muss ich es denn im ‘extend’ schreiben? (bei 1.0 hatte ich nie Probleme)
Erweitert werden soll Config.

Das Modul soll nur manuell in source/modules installiert werden, also ohne Composer und ohne composer.json.

Danke
Thoni

Dann muss der Namespace weg. Alles andere ist im Forum zu finden:

Danke,

theoretisch funktioniert es, aber ->loadActiveUser() gibt immer ein false zurück.

Auf welchem Wege kann ich den User noch bekommen?
Ist das in der Config-class überhaupt möglich? Das sollte doch.

Gruß
Thoni

loadActiveUser() habe ich noch nie gesehen, ich kenne nur $this->getUser();

loadActiveUser(): Damit kannst den aktiven User auch bekommen. Hast $oUser = oxNew(\OxidEsales\Eshop\Application\Model\User::class); noch im Einsatz? Das wäre dann m.M. zu ändern in $oUser = oxNew(‘oxuser’);

Ich danke euch,

leider hat es nichts gebracht.

Inzwischen habe ich User erweitert:

class myuser extends myuser_parent {
public function showBetaTheme()
{
// $myUser = $this->getUser();
die(print_r($this));
if($this->inGroup(‘d3c6fe49c74cbb2b4af42b8ef254415f’)){
return true;
}
return false;
}
}

Alles, was ich versuche, bringt mir “die()” nur ein leeres User-Objekt.

class myuser extends myuser_parent {
public function showBetaTheme()
{
    $myUser = $this->getUser();
	die(print_r($this));
	if($this->inGroup('d3c6fe49c74cbb2b4af42b8ef254415f')){
		return true;
	}
	return false;
}

}

so ist es besser

**$myUser**->inGroup(...)

Danke rubbercut,

ich bekomme dann einen Fehler:

OXID Logger.ERROR: Call to a member function inGroup() on boolean …

Bei dem “die()” bekomme ich nur die Ziffer “1” ausgegeben. Das wird der Boolean der Fehlermeldung sein.

$myUser = $this->getUser();
die(print_r($myUser));
if($myUser->inGroup('d3c6fe49

Es sind keine weiteren Module aktiviert.

Das bringt auch eine “1”:
die(print_r(\OxidEsales\EshopCommunity\Core\Base::getUser()));

Ehrlich gesagt, verstehe ich Dein Problem nicht, weshalb ich es selbst testen musste. Folgendes ist in 4.10.x und 6.xx installierbar und gibt oxidpriceb (preis b) aus, wenn du eingeloggt bist und in der Gruppe:

Demo

Ich verstehe es auch nicht.
Deine Demo funktioniert, aber meines nicht.
Kann es am Aufruf aus der Config liegen? Ist dann noch nicht alles geladen?

In den modules-Ordner

Ok, dazu findet man folgendes: Fatal error: Class 'Smarty' not found nachdem ich getConfigParam von oxConfig überschrieben habe

Du könntest es aber über oxconfig::getDir(…) statt getConfigParam(…) versuchen, das Custom-Template zu laden. Ich würde es nach der User-Abfrage mit $this->setConfigParam(‘sTheme’, $xxx); und $this->setConfigParam(‘sCustomTheme’, $yyy); versuchen.

Das Überschreiben der Funktion funktioniert bei mir.
Ich bekam nur nicht den aktuellen User.

Nun habe ich Plan B umgesetzt - direkt in mythemeswitcher.php:

			$param = $this->getRequestParameter( "intern", true );
		if($param == 'newtheme') oxSession::setVariable("theme","new");
		if($param == 'oldtheme') oxSession::setVariable("theme","");
		if (oxSession::getVariable("theme")=="new"){

Wir können jetzt GET-Parameter nutzen, um die Themes zu wechseln.

Vielen Dank für deine/eure Hilfe

Wie immer führen mehrere Wege nach Rom :wink:

1 Like