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.
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.
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!
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.
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!