Mi piace quello che ha menzionato Phil Sturgeon. Sebbene sia considerato molto complicato, mi è piaciuta molto la struttura dei template di Magento.
Ispirato con questo modo di strutturare ho fatto la mia logica, (che non è affatto grande ma è semplice come può essere, e forse forse potrei sovrascrivere -> visualizzare il caricatore e renderlo accetta un qualche tipo di oggetto come un nome di modello e di caricare la struttura come richiesto)
primo: Questo approccio deve essere utilizzato in modo molto responsabile (si mus preparare i dati nel controllore/metodo che i modelli richiedono
secondo:! bisogni dei modelli essere preparato e strutturato correttamente
Questo è quello che faccio:
in ogni controller ho attributo di tipo Array, qualcosa di simile:
class Main extends CI_Controller {
public $view = Array(
'theend' => 'frontend',
'layout' => '1column',
'mainbar' => array('content','next template file loaded under'),
'sidebar' => array('generic','next template file loaded under'),
'content' => '',
);
In ogni metodo per il quale voglio usare la struttura precedente e se voglio cambiare un po 'scrivo in questo modo:
public function index()
{
$data['view'] = $this->view; // i take/load global class's attribute
$data['view']['mainbar'] = Array('archive','related_posts'); // i change mainbar part of it
// i add/load data that i need in all those templates that are needed $data['view'] also my using same Array $data['my_required_data_that_i_use_in_template_files'] = 1;
$this->load->view('main',$data); //
}
terza cartella A/application/vista ho struttura come
/view/main.php <-- which basically just determines which side's wrapper of web to load (frontend or backend or some other)
/view/frontend/wrapper.php
/view/backend/wrapper.php
/view/mobile/wrapper.php <-- this wrappers are again another level of structuring for ex:
/view/backend/layouts/ <-- inside i have templates different layouts like 1column.php 2columns-left (have left side is narrow one),2columns-right,3columns... etc...
/view/backend/mainbar/ <-- inside i have templates for mainbar in pages
/view/backend/mainbar/.../ <-- in the same way it's possible to add folders for easily grouping templates for example for posts so you add for example
/view/backend/mainbar/posts/ <-- all templates for creating, editing etc posts...
/view/backend/sidebar/ <-- inside i have templates for sidebar in pages
/view/backend/...other special cases.... like dashboard.php
indietro file in /app/view/main.php sembra qualcosa di simile:
if ($view['theend'] == "frontend")
{
$this->load->view('/frontend/wrapper');
} elseif ($view['theend'] == "backend")
{
$this->load->view('/backend/wrapper');
}
quinto wrapper è semplice php in HTML strutturato dove hai la testa (caricamento di intestazioni HTML, titolo ecc ...) intestazioni/intestazioni (caricamento delle intestazioni se ci sono dati in $ passati ['vista'] ['intestazioni'] variabile/matrice) Layout (carica nel file di layout che ha semplicemente un nuovo file strutturato html con il prossimo livello di caricamento file) piè di pagina/piè di pagina (caricamento in corso a piè di pagina se ci sono in passati $ dati [ 'vista'] [ 'piè di pagina'] variabile) script (inscripts carico come analytics/script facebook poco prima tag)
sesto Allo stesso modo, il layout verrebbe caricato anche nel contenuto della barra principale/sidebar specificato in pubblico $ view = Array (....)
Se ho bisogno di un metodo, ho semplicemente sostituito una parte di public $ view = Array (...) attributo, e sovrascrivo solo una parte diversa.
si fa qualcosa di simile:
public function index()
{
$data['view'] = $this->view; // i take/load global class's attribute
$data['view']['mainbar'] = Array('archive','related_posts'); // i change mainbar part of it
// i add/load data that i need in all those templates that are needed $data['view'] also my using same Array $data['my_required_data_that_i_use_in_template_files'] = 1;
$this->load->view('main',$data); //
}
FINALMENTE carico va in questo modo:
$ this-> load-> view ('main', $ dati); < - Carica /app/view/main.php e passa $ dati $ data ha nodo 'view' ($ data ['view']) e in esso ha sub-nodi che determinano altre cose importanti come: qual è il fine, ciò che il layout, che cosa le intestazioni, piè di pagina che cosa ecc ...
utilizzando i dati definiti nei dati $ [ 'vista'] [ 'theend'] carica corretta involucro
- Anche in questo caso utilizzando i dati nei dati $ [ 'view'] ['layout'] ulteriormente nel wrapper carica altre strutture più profonde come il layout ...
- layout, utilizza lo stesso $ data ['view'] ['mainbar'], $ data ['view'] ['barra laterale'] e cattura altre parti importanti da caricare come i modelli della barra principale, i modelli della barra laterale ...
Che è su di esso ...
P.S. Sono così dispiaciuto per non aver usato i numeri, ma il sistema di stackoverflow è così strano che invece di mostrare 3. mi mostra 1 .. come vedi ho avuto alcune liste annidate ...
Questa sembra una buona opzione, ma io Non sono propenso all'idea di "viste che incorporano altre visualizzazioni" - come fanno le altre visualizzazioni a ottenere i dati? Presumo che ciò funzionerebbe bene solo quando le viste incluse hanno contenuto statico. –
Le viste sono solo incluse, quindi condividono lo stesso controller ('$ this') e le variabili come modello di base. Guarda come uso '$ this-> title' nella vista 'meta', che è inclusa nel modello base. Potrei anche aver usato '$ content' lì. – slikts
Ho aggiunto un esempio di una vista specifica del controller al controller Home. – slikts