lunedì , dicembre 11 2017
Ultime Notizie
Home / Programmazione / Opencart forzare login utenti

Opencart forzare login utenti

Ciao Ragazzi,

poco tempo fa mi è capitato di dover realizzare un sito di E-Commerce dove era necessario che gli utenti effettuassero la Login prima ancora di vedere le pagine dei prodotti.

In giro per la rete si trovano diverse soluzioni, ma creano problemi con le versioni 2.x di Opencart.

Vediamo come prenderlo in giro e far fare quello che vogliamo noi.

Opencart utilizza il framework MVC (Model-View-Controller) quindi per prima cosa andremo a realizzare un Controller che crei le condizioni che ci servono.

Dentro la cartella catalog/controller/common/ creiamo un file chiamato login.php

Dentro questo file:

Class ControllerCommonLogin extends Controller {
 
    public function index() {
        if($this->config->get('config_store_id') == 0) { // if desired store, continue checking
            $skip = array(
                'product/category',
            	'product/search',
            	'product/manufacturer/info',
                'common/home',
            );
 
            $route = empty($this->request->get['route']) ? 'common/home' : $this->request->get['route'];
 
            if(!$this->customer->isLogged()) { // Check user isn't logged in
            	if(in_array($route, $skip)) { // Redirect if route isn't account/login
                    $this->load->language('account/register');
                    $this->response->redirect($this->url->link('account/login','','SSL'));
                }
            }
        }
    }
 
}

Spieghiamo un po’ questo codice. Per prima cosa creiamo una classe ControllerCommonLogin che estende Controller.

Il metodo principale che ridefinisce è il metodo index().

$this->config->get('config_store_id') == 0

Con questo codice controlliamo per quale Store vogliamo implementare il controllo (di default lo store_id è 0)

Creiamo un array con le pagine che NON vogliamo siano accessibili.

Se l’utente non è loggato e sta cercando di accedere ad una delle pagine proibite

in_array($route, $skip)

Il sistema effettua la redirect verso la pagina di Login utente.

Per rendere effettivo il nostro hack, dobbiamo inserire il Controller appena creato nella index.php del sito subito dopo la voce:

$controller->addPreAction(new Action('common/maintenance'));

Ecco come risulterà la nostra index.php dopo la modifica:

// Maintenance Mode
$controller->addPreAction(new Action('common/maintenance'));
 
// Login needed pre-action
$controller->addPreAction(new Action('common/login'));

Enjoy!

Info Paolo Daniele

Ingegnere delle Telecomunicazioni, appassionato di informatica fin da piccolo ho trasformato la passione in lavoro. Con il PHP faccio tutto (o quasi…) ma non disprezzo altri linguaggi all’occorrenza. Se vi piace il mio sito, o vi è utile, o vi sto simpatico, offritemi una birra!

Ti potrebbe interessare

Windows Server: Risolvere Errore “Licensing mode for the Remote Desktop Session Host is not configured”

Ciao Ragazzi, Oggi ho litigato con Microsoft. Ho acquistato 5 licenze Terminal Server per collegamento …

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *