Impostare il codice del controller comune in OpenCart

Se hai incontrato lo sviluppo dei moduli in OpenCart, potresti aver affrontato la situazione in cui hai dichiarato un paio di elementi comuni in ogni controller. Non pensi che sarebbe bello se tu potessi dichiarare il codice comune da qualche parte e venga raccolto come necessario! Quindi, in questo articolo, discuteremo come impostare il codice del controller comune e utilizzarlo attraverso i moduli.

Per coloro che hanno familiarità con lo sviluppo dei moduli in OpenCart, è una routine impostare gli elementi comuni come le colonne di intestazione, piè di pagina e barra laterale nel metodo index della classe controller. Anche se ci sono diversi modi per centralizzare il codice comune, vedremo a OpenCart per realizzare questo!

Presumo che tu stia utilizzando l'ultima versione di OpenCart e conosca il processo di sviluppo del modulo, poiché ci concentreremo di più sul concetto piuttosto che discutere il codice di base.

Impostare il codice del controller comune

Vai avanti e crea il Catalogo / regolatore / preactiondemo directory. Crea un file common.php sotto quella directory con il seguente contenuto.

load-> controllore ( 'common / intestazione'); $ data ['footer'] = $ this-> load-> controller ('common / footer'); $ data ['preaction_text'] = "Sono stato impostato dal metodo 'setup' dal file del controller 'comune'."; $ args ['controller'] -> $ args ['metodo'] ($ data, FALSE); 

Abbastanza facile e diretto da capire! Inizializza solo un paio di variabili nel $ data array, tranne l'ultima riga del impostare metodo. Ci torneremo più tardi, poiché rivelerà il segreto del $ args schieramento.

Comprendere il processo di spedizione

Prima di creare qualsiasi altro codice, ti darò una rapida spiegazione di come funziona il dispatching in OpenCart.

Ogni volta che l'utente accede a qualsiasi URL in OpenCart, il corrispondente azione l'oggetto è istanziato in base al itinerario query string variable. Ecco il frammento di index.php.

// Router if (isset ($ request-> get ['route'])) $ action = new Action ($ request-> get ['route']);  else $ action = new Action ('common / home'); 

E in seguito, il spedizione il metodo è chiamato.

$ controller-> dispatch ($ action, new Action ('error / not_found'));

Chiamerà il spedizione metodo definito nel file situato in Sistema / motore / Front.php. In questo metodo, troverai uno snippet che esegue il ciclo while fino a quando non ottiene il $ azione valore impostato su falso.

while ($ action) $ action = $ this-> execute ($ action); 

Come puoi vedere, chiamerà il metodo execute definito nello stesso file fino a $ azione valuta come falso. Ciò significa che se il metodo del controller restituisce un oggetto azione, OpenCart eseguirà tale azione prima di procedere ulteriormente. Potremmo approfittarne e chiamare l'altra azione dall'interno dell'azione stessa. Vediamo come realizzarlo!

Chiama il controller comune e visualizza l'installazione

Ora, creiamo un preaction_demo.php file sotto il preactiondemo directory con i seguenti contenuti.

 $ this, 'method' => 'index'));  if (file_exists (DIR_TEMPLATE. $ this-> config-> get ('config_template'). '/template/preactiondemo/preaction_demo.tpl')) $ this-> response-> setOutput ($ this-> load-> view ($ this-> config-> get ('config_template'). '/template/preactiondemo/preaction_demo.tpl', $ data));  else $ this-> response-> setOutput ($ this-> load-> view ('default / template / preactiondemo / preaction_demo.tpl', $ data)); 

Se $ bandierina è vero, restituiremo l'istanza della classe action e, come abbiamo appena visto, se il processo di invio riceve un oggetto azione, continuerà con quell'azione. Quindi in questo caso, chiamerà il impostare metodo del Comune controller. Ricorda il common.php file che abbiamo creato nella sezione precedente.

La cosa importante da notare è che stiamo passando array ('controller' => $ this, 'method' => 'index') come argomento, che alla fine sarà passato al primo argomento del impostare metodo nel Comune controller. Ci aiuterà a tornare al indice metodo del preaction_demo controller dopo l'inizializzazione delle variabili.

Inoltre, nel impostare metodo abbiamo definito alcune variabili comuni come header, footer, ecc. Infine, stiamo trasferendo il controllo al controller originale da dove impostare il metodo è stato chiamato usando la seguente dichiarazione.

$ args ['controller'] -> $ args ['metodo'] ($ data, FALSE);

Ovviamente, dobbiamo passare le variabili inizializzate nel impostare metodo via $ data al controller originale in modo che possa essere utilizzato lì, che è lo scopo principale di questo articolo. Viene passato come primo argomento della suddetta chiamata di metodo. Il secondo argomento è molto importante in quanto verrà inizializzato su $ bandierina variabile. Lo stiamo deliberatamente facendo per evitare il loop infinito.

Infine, andiamo avanti e impostiamo il nostro file di visualizzazione su Catalogo / view / theme / default / template / preactiondemo / preaction_demo.tpl con il seguente codice.

 

Ora che abbiamo finito con l'installazione, vai avanti e apri l'URL http: //youropencartstoreurl/index.php? Route = preactiondemo / preaction_demo nel tuo browser. Dovresti vedere il messaggio "Sono stato impostato dal metodo" setup "dal file del controller" comune "." in quella pagina!

In questo modo, è possibile impostare il codice comune in un unico punto e chiamare tale azione dagli altri controller. Certo, eviterà la duplicazione del codice ed è più facile cambiare il codice che è comune tra i moduli.

Conclusione

Oggi hai imparato un bel trucco in OpenCart: come chiamare un'azione dall'interno dell'azione! Certo, ci sono altri modi per farlo, ma è qualcosa che ho in mente ultimamente e ho pensato di condividerlo con te e ottenere il tuo feedback!