Shop soll nur nach Login (Anmeldung) sichtbar sein

Hallo,

ich würde gerne den OXID Shop so anpassen, dass man eingeloggt sein muss um ihn nutzen zu können.

d.h. wenn ich NICHT eingeloggt bin als Kunde soll er auf die Loginin Page wechseln.

Bin ich eingeloggt kann ich den Shop wie gewohnt nutzen bis ich ausgeloggt bin.

Ich denke, dass muss auf “Klassen Ebene” und nicht in den Templates passieren, steige aber leider nicht ganz durch die Klassen durch.

Hat jmd. einen Tipp oder das gleiche schonmal umgesetzt?

Danke im Voraus

PS: OXID eShop CE 4.1.2_18998

Hallo!

Mit dem Smarty-Befehl [{ if $oxcmp_user }] lässt sich in den Templates einiges anstellen.

Gruß
Kai!

Hey, Danke für die Antwort:
das habe ich zu erst probiert - ABER - ich müsste das ja auf jeder möglichen Seite irgendwo einfügen und die Anzeige bzw. Weiterleitung auf die LoginSeite ist damit auch noch nicht gelöst.

Also meinr Meinung nach hilft das nur wenn man Teile auf einer Template-Seite zeigen/verbergen möchte aber nicht für das was ich vorhabe.

Das muss weiter vorher gesteuert werden…

Hallo, nochmal!

Mach doch in einem Template, das immer geladen wird (z.B. _header.tpl), die Überprüfung rein. Wenn die dann negativ verläuft, wird eine Weiterleitung zur Anmeldeseite aktiv. Das könnte funzen.

Gruß
Kai

okay klingt zwar nach workaround aber wenn es funktioniert :slight_smile:

nur wie mache ich eine Weiterleitung auf Smartyebene?
Weiterhin muss das Login Template “account_login.tpl” ja von der Weiterleitung ausgenommen werden sonst habe ich eine Endlosschleife. (Wie) Kann ich in Smarty abfragen in welchem Template ich bin?

Hey Kai, ich denke ich habs gefunden:

in der Datei: oxview.php muss man die render Funktion von

    public function render()
    {
        return $this->_sThisTemplate;
    }

abändern in

 public function render()
    {
        
		// is logged in ?
        $oUser = $this->getUser();
        if ( !$oUser || $oUser->oxuser__oxpassword->value == '' ) {
            return $this->_sThisTemplate = 'account_login.tpl';
        } 
			
		return $this->_sThisTemplate;
        	
		
    }

dies bewirkt, dass man immer die Login Seite bekommt solange man nicht eingeloggt ist…
Idealerweise muss man die account_login.tpl Datei anpassen da im header, links und rechts immer noch Infos durchkommen könnten die man uneingeloggt nicht sehen soll.

gruß uprocka

Hallo,

ich hatte auch mal was geschrieben, vielleicht kannst du das ja verwenden (damit kann er sich dann auch registrieren und sein vergessenes Passwort wiederbekommen):

oxshopcontrol => …

class ShopControl extends ShopControl_parent
{
	protected function _process( $sClass, $sFunction )
	{
		if($this->isAdmin())
		{
			return parent::_process( $sClass, $sFunction );
		}
			
		$myConfig = $this->getConfig();
		$oUser = $this->getUser();

		if(!$oUser && $sClass != 'account' && $sClass != 'forgotpwd' && $sClass != 'register' && $sClass != 'login')
		{
			oxUtilsView::getInstance()->addErrorToDisplay( oxLang::getInstance()->translateString('ACCOUNT_LOGIN_REQUIRE') );
			oxUtils::getInstance()->redirect( $myConfig->getShopHomeURL() .'cl=account' );
			return;
		}

		if(!($sClass != 'account' && $sClass != 'forgotpwd' && $sClass != 'register' && $sClass != 'login'))
		{
			return parent::_process( $sClass, $sFunction );	
		}	
	}

}

Gruß
Benny

EDIT: ma den B2B Ansatz rauseditiert
EDIT2: ACCOUNT_LOGIN_REQUIRE müsste noch in der language Datei hinterlegt werden

Hey ja genau das Problem hab ich nämlich jetzt das ich keine andere Seite aufrufen kann wenn ich nicht eingeloggt bin :slight_smile:

die Klasse class ShopControl extends ShopControl_parent
gibt es bei meiner Version nicht und die _process Funktion von oxshopcontrol.php sieht ziemlich anders aus

Ich verstehe genau was du da machst, aber ich blicke in den ganzen Oxid Klassen (noch) nicht durch.

Die Klasse oxView hat auch eine Methode $this->getClassName() - dait könnte ich deine Lösung nachbauen - $this->getClassName() ist aber immer leer - versteh ich nicht.

hm ich hab zwar noch eine ältere Version aber ich glaube du suchst an der falschen Stelle.

Das Geschriebene ist ein Modul, also wirst du das nirgends finden.
Du kopierst einfach das was ich da stehen habe in eine Datei (PHP-Tags nicht vergessen) und speicherst die in einem Unterordner im Module Verzeichnis ab (zB als shopcontrol.php).

Dann gehst du ins Admin Panel unter Stammdaten->Grundeinstellungen->System->Module und gibst da in eine neue Zeile
oxshopcontrol => deinunterordner/derfilename
zB: oxshopcontrol => require_login/shopcontrol
ein. Damit ist das Modul aktiviert und sollte funktionieren.

Aaah mit dem Thema Module hab ich mich noch nicht beschäftigt.
Okay das hilft mir bestimmt weiter. Klingt auch sauberer als am Core rumzudoktern.

Werde ich mal probieren.

Gruss uprocka

jo am Core rumdocktorn sollte man lieber nicht, vor allem weil oxid eine sehr geile und einfache plugin Schnittstelle zur Verfügung stellt.

Yes! Perfekt! Klappt. Danke!

man muss nur wissen wie es geht. :slight_smile:

Klappt fast perfekt:

wenn ich jetzt noch eine ContentSeite freigeben will sagen wir die Impressum-Seite…

dann habe ich ja als $sClass lediglich “content” was ja für alle Contentseiten gilt - wo/wie bekomme ich in meinem Modul die ContentId her um sie zu unterscheiden?

dann musst du das wie folgt ändern:

class ShopControl extends ShopControl_parent
{
    protected function _process( $sClass, $sFunction )
    {
        if($this->isAdmin())
        {
            return parent::_process( $sClass, $sFunction );
        }
            
        $myConfig = $this->getConfig();
        $oUser = $this->getUser();

$oContent   = oxNew( 'oxcontent' );
		$oContent->load( oxConfig::getParameter( 'tpl' ) );

        if(!$oUser && $sClass != 'account' && $sClass != 'forgotpwd' && $sClass != 'register' && $sClass != 'login' && $oContent->oxcontents__oxloadid->value != 'oximpressum')
        {
            oxUtilsView::getInstance()->addErrorToDisplay( oxLang::getInstance()->translateString('ACCOUNT_LOGIN_REQUIRE') );
            oxUtils::getInstance()->redirect( $myConfig->getShopHomeURL() .'cl=account' );
            return;
        }

        if(!($sClass != 'account' && $sClass != 'forgotpwd' && $sClass != 'register' && $sClass != 'login' && $oContent->oxcontents__oxloadid->value != 'oximpressum'))
        {
            return parent::_process( $sClass, $sFunction );    
        }    
    }

}  

Hmmm funktioniert so bei mir nicht…

Das $oContent Objekt wird erzeugt… aber danach scheint irgendwas nicht zu stimmen.
was genau müsste oxConfig::getParameter( ‘tpl’ ) zurückgeben? ist bei mir leer…?!
auch das ist leer: $oContent->load( oxConfig::getParameter( ‘tpl’ ) );

[oxcontents__oxloadid] =>
ist auch leer

Ps: ich bin neu bei oxid und weiss noch nicht wo welcher Wert herkommt :slight_smile:

ersetze das ‘tpl’ mal mit ‘oxcid’

so wird das wohl in der neueren version genannt

Hey Danke, genau das wars!

Sorry wenn ich es mir so von dir “servieren” lasse, aber ich Blick noch zu wenig durch die kryptischen Oxidbezeichnungen durch.

ja das passt schon so hat ja jeder mal angefangen…
und da ich das eh schon mal runtergeschrieben habe passt das ja.

Das klingt nicht nur sauberer, das ist auch sauberer, da dein Shop weiterhin updatefähig bleibt und du nicht jedes Mal deine Änderung nachziehen musst. :slight_smile:

Hallo allemal, wenn ich den Code in der neuesten Version einbaue, kann ich ins Impressum gehen, ansosnten erhalte ich nur weiße Seiten wenn ich eingeloogt bin.

Kann mir jemand helfen.

Dank an alle im voraus
tvtotal