Thoni
March 12, 2020, 8:19am
1
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);
}
}
Thoni
March 12, 2020, 3:16pm
3
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);
}
}
Thoni
March 15, 2020, 3:43pm
5
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:
Hi there,
I’m trying to extend the oxconfig class via an Oxid Module. Things work fine, except when adding static methods.
What I’m trying to achieve with this module is basically having the reverse of the checkSpecialChars & checkParamSpecialChars methods.
Am I doing something wrong, or this is not achievable via the Oxid extend?
Thanks in advance!
Extracts from the relevant code:
metadata.php
'extend' => array(
'oxconfig' => 'my_module/my_class_oxconfig',
…
Ho!
Ich versuche gerade in Oxid 6 die Controller ‘FrontendController’ oder ‘BaseController’ zu überladen. Ist das überhaupt möglich? Laut dieser Liste ja nicht, gilt die denn noch? Gibt ggf. eine neue Liste?
Danke & LG
Sio
Thoni
March 17, 2020, 12:32pm
7
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’);
Thoni
March 17, 2020, 2:49pm
10
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.
Thoni
March 17, 2020, 2:55pm
11
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(...)
Thoni
March 17, 2020, 4:34pm
13
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.
Thoni
March 17, 2020, 4:56pm
14
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
Thoni
March 17, 2020, 6:08pm
16
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.
Thoni
March 18, 2020, 5:39pm
18
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
1 Like
system
Closed
March 18, 2021, 8:03pm
20
This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.