Cum se creează un Manager Layout cu CodeIgniter

Acest articol video Premium și însoțitor vă va învăța cum să creați o bibliotecă simplă, dar puternică, pentru a gestiona layout-urile din Cadrul general de codare. Biblioteca pe care o creați vă va permite să vă maximizați eficiența, să economisiți timp și să vă codificați, să modulați vizualizările și chiar fișierele Javascript și CSS.


Pasul 1 Descărcați fișierele necesare

Pentru acest tutorial, tot ce veți avea nevoie este CodeIgniter 1.7.2 framework. Puteți să o descărcați de pe site-ul lor la codeigniter.com/downloads/


Pasul 2 Cum vom face asta

Funcționalitatea de bază a acestei biblioteci va fi foarte simplă. Vom lua conținutul unei vizualizări, le vom face cu datele corespunzătoare, apoi vom lua conținutul randat și îl vom atribui unei variabile. Acum, vom reda aspectul propriu-zis și vom înlocui o parte a aspectului cu conținutul acestei variabile. Este destul de simplă, dar suficient de puternică.

Ideea este de a imita apelurile către $ This-> a sarcinii> vizualizare (). Când numim această metodă, vom transmite numele (și locația) vederii noastre și apoi o serie de date care vor fi accesibile din vizualizare. Iată un exemplu:

 ($ url_param) $ this-> load-> view ('controller_views / method_view', array ('url_param' => $ url_param)); 

Codul de mai sus va lua fișierul Sistem / aplicație / opinii / controller_views / method_view.php, treceți-l cu variabila url_param și apoi trimiteți-l browserului. Iată de unde intrăm. Nu vom trimite încă conținutul în browser. În schimb, îl vom trimite la aspect, apoi la browser. Dar cum facem asta??

vedere() metoda pe care tocmai am numit-o poate fi trecut un al treilea (boolean) parametru, care, dacă este adevărat, va întoarcere vizualizarea redată în loc să o trimită browserului. Putem salva acest conținut, efectuăm un al doilea apel la aceeași metodă, dar de data aceasta sunăm un fișier de aspect care va tipări acest conținut (înconjurat cu toate anteturile, barele laterale și subsolurile).


Full Screencast



Pasul 3 Creați o nouă bibliotecă

Vom crea această bibliotecă pas cu pas, pornind de la cele mai de bază. În primul rând, vom crea o nouă bibliotecă în cadrul nostru sistem / aplicatie / biblioteci și apelați-l aspecte.

Dacă nu ați creat niciodată o bibliotecă CodeIgniter, acestea sunt pur și simplu clase, care sunt încărcate de un apel către $ This-> a sarcinii> bibliotecă ().

Deci, să mergem direct în cod:

  

Să trecem prin fiecare secțiune a codului:

  1. Prima linie este o convenție de codificare a CodeIgniter, aceasta asigură, în esență, că utilizatorii nu pot accesa direct fișierul din browserele lor, deoarece CodeIgniter stabilește BASEPATH constantă în ei index.php fişier.
  2. Clasa va fi doar PHP 5. Acest lucru ne va permite să adăugăm înlănțuirea metodei la clasă, care va fi utilă mai târziu atunci când vom lucra cu JS și CSS include.
  3. Constructorul de clasă nu are nimic pentru moment. Acesta este doar scheletul bibliotecii noastre.

Deci, ce se întâmplă dacă vom include acest lucru de la a controlor? Ei bine, nimic. Clasa nu are absolut nimic pentru moment (nici măcar constructorul), deci nimic nu se va întâmpla.


Pasul 4 Creați un aspect

Vom crea un aspect foarte simplu pentru a explica modul în care funcționează toate.

    Primul nostru aspect!     

După cum puteți vedea, acest lucru este extrem de fundamental; este doar un titlu și un corp. Acum, partea importantă se află în codul PHP acolo. Suntem ecoul a $ content_for_layout variabil. Ideea este de a atribui conținutul randat acestei variabile. În acest fel, se va imprima acolo, înconjurat de restul corpului, capului etc..


Pasul 5 Scrieți un cod!

Să scriem un cod care să se ocupe de acest aspect:

 CI = & get_instance ();  vizualizare functie publica ($ view_content = $ this-> CI-> load-> view ($) $ view_content = $ this-> CI-> load-> view nume_name, $ params, TRUE); // Acum încărcați layout-ul și treceți vizualizarea pe care tocmai am redat $ this-> CI-> load-> view ('laytous'. $ Layout, array ('content_for_layout' => $ view_content)); 

Să explicăm cum arată noul cod:

  1. Am adăugat un nou atribut privat bibliotecii noastre: $ CI. Din bibliotecile noastre, nu putem accesa direct instanța CodeIgniter. Singura modalitate este să faceți o referire la ea și să o accesați de acolo. Deci, în constructorul nostru (care se numește atunci când biblioteca este încărcată), obținem instanța CI și o atribuim colectivului nostru privat $ CI atribut, astfel încât să putem numi mai târziu. Avem nevoie să sunăm a sarcinii> vizualizare () metodă.
  2. Acum, am adăugat o metodă de vizualizare. Sintaxa este practic identică cu a sarcinii> vizualizare () metodă. Obținem un nume de vizualizare, o serie de parametri (variabilele care vor fi vizibile din vizualizare) și un nume de aspect, care în mod implicit va fi (duh) "implicit". Aceasta din urmă ne permite să avem mai multe layout-uri în aplicația noastră (poate una pentru caseta de autentificare fără meniuri și alte lucruri).
  3. Acum, așa cum am vorbit mai devreme, numim a sarcinii> vizualizare () , vom trece numele de vizualizare, parametrii și un al treilea parametru cu valoarea lui ADEVĂRAT. Acest lucru asigură că nu vom trimite ieșirea în browser. În schimb, acesta va fi returnat la noi și alocat variabilei $ view_content.
  4. În cele din urmă, vom încărca fișierul de aspect (pe care îl vom păstra în sistem / aplicație / vizualizări / aspecte ) și să treacă conținutul afișării încărcate doar ca parametru. Când aspectul este încărcat, $ content_for_layout variabila va fi înlocuită cu conținutul încărcat și va fi trimis către browser (notați parametrul final lipsă, nu vom trece ADEVĂRAT de data asta).

Pasul 6 Schimbați titlul paginii

Biblioteca de bază este realizată tehnic. Dar există câteva lucruri pe care le putem adăuga pentru ao face chiar mai bine.

Ca atare, titlul layout-ului este întotdeauna același. Acest lucru nu este practic. Trebuie să putem schimba cu ușurință de la controlorii noștri, fără a fi nevoie să creați o sumă infinită de layout-uri cu titluri diferite (acest lucru ar învinge scopul acestui tutorial). Deci, cum facem asta? Vom presupune că site-ul are un titlu permanent, spuneți "Biblioteca de planuri". După aceea, am plasat secțiunea site-ului pe care îl vizităm. De exemplu, pentru pagina de conectare, titlul va citi "Biblioteca de planuri | Login".

În primul rând, să rescriem aspectul puțin.

    Biblioteca de layout-uri<?php echo $title_for_layout ?>     

Tocmai am adăugat un alt PHP ecou. De data aceasta imprimați $ title_for_layout variabilă, pe care o vom schimba în biblioteca noastră. Iată biblioteca rescrisă:

 CI = & get_instance ();  funcția publică set_title ($ title) $ this-> title_for_layout = $ title;  vizualizare funcție publică ($ view_name, $ params = array (), $ layout = 'implicit') // Manipulați titlul site-ului. Dacă NULL, nu adăugați nimic. Dacă nu, adăugați un // separator și adăugați titlul. dacă ($ this-> title_for_layout! == NULL) $ separate_title_for_layout = $ this-> titlu_separator. $ This-> title_for_layout;  // Încărcați conținutul vizualizării, paramurile trecând $ view_content = $ this-> CI-> load-> view ($ nume_name, $ params, TRUE); // Acum încărcați layout-ul și treceți vizualizarea pe care tocmai am redat $ this-> CI-> load-> view ('laytous /'. $ Layout, array ('content_for_layout' => $ view_content, 'title_for_layout' => $ separate_title_for_layout)); 

Ce am făcut aici?

  1. Am adăugat două noi atribute bibliotecii noastre: $ title_for_layout și $ title_separator. Primul va ține titlul nostru, iar cel de-al doilea va defini șirul care va separa titlul aspectului de setul de titlu de către SET_TITLE () metodă.
  2. Din moment ce $ title_for_layout a fost setat la privat, adăugăm o metodă de setare de la controlorii noștri. Prin urmare, SET_TITLE () va seta valoarea $ title_for_layout la ceea ce îi spunem, de exemplu. 'Logare'.
  3. În vedere() , am adăugat o bucată de cod pentru a gestiona noul atribut. Dacă utilizatorul nu stabilește niciodată un titlu pentru pagină, dorim să fim capabili să "se degradeze cu grație", adică. nu atașați separatorul pentru nimic. Astfel, verificăm mai întâi valoarea lui $ title_for_layout atribut. Dacă nu NUL, apoi adăugăm separatorul configurat și titlul setat de SET_TITLE () metodă.
  4. La randarea layout-ului, ne asigurăm că vom trece noul atribut (chiar dacă NULL), astfel încât să putem echivala în titlu.

Pasul 7 Adăugarea de module CSS și JS modulare

Acum, pentru ultimul moment, dorim să adăugăm în mod modular fișierele CSS și Javascript. Ce inseamna asta? Spuneți că doriți să utilizați un plugin jQuery, dar doriți doar să îl utilizați într-o singură parte a site-ului (poate un plugin de validare a formularului). Puteți să o includeți doar pe vizualizarea însăși, dar asta nu arată prea bine în codul final. Este întotdeauna preferabil să includeți în Javascript toate (și CSS) antet. Vom crea o metodă (bine, două de fapt) care ne va permite să facem acest lucru.

Continuați și adăugați aceste două metode în bibliotecă:

 funcția publică add_include ($ path, $ prepend_base_url = TRUE) if ($ prepend_base_url) $ this-> CI-> load-> helper ('url'); // Încărcați acest lucru doar pentru a vă asigura că $ this-> file_includes [] = base_url (). calea de $;  altceva $ this-> file_includes [] = calea $;  returnați $ this; // Aceasta permite metodele lanțului funcția publică print_includes () // Inițializează un șir care va conține toate include $ final_includes = "; foreach ($ this-> include ca $ include) // Verificați dacă este un JS sau un Fișier CSS dacă (preg_match ('/ js $ /', $ include)) // Este un fișier JS $ final_includes. = '„;  elseif (preg_match ('/ css $ /', $ include)) // Este un fișier CSS $ final_includes. = '„;  return $ fin_includes; 

Asigurați-vă că adăugați, de asemenea, acest nou atribut la clasa dvs., chiar deasupra constructor:

 privat $ include = array ();

și asta la aspectul dvs., imediat după titlu

 layouts-> print_includes ()?>

O mică explicație:

  1. add_include () ne permite să adăugăm mai multe fișiere JS sau CSS de la noi controlor. Permite chiar și înlănțuirea metodei, ceea ce înseamnă că putem face ceva asemănător $ This-> layouts-> add_include ( 'js / jquery.js') -> add_include ( 'js / jquery.plugin.js') -> add_include ( 'css / jquery.plugin.css'); care pot fi foarte confortabile atunci când se încarcă mai multe lucruri. Această caracteristică de înlănțuire a metodei este motivul pentru care avem nevoie de PHP 5, deoarece PHP 4 nu o acceptă.
  2. $ prepend_base_url parametru pe add_include () , va implica în mod prestabilit adresa de bază a instalării CodeIgniter. Apelând această metodă cu $ prepend_base_url setat la FALS, putem include fișiere la distanță (de exemplu, jQuery lib din CDN-ul Google).
  3. print_includes () metoda este explicabilă. Se iterează prin toate celelalte adăugate cu add_include () , verifică dacă fișierul este un fișier Javascript sau un fișier CSS (nu sunt acceptate alte fișiere) și adaugă includerea unui șir care va fi în cele din urmă reprodus în aspect.

Concluzie

Am creat o bibliotecă completă și foarte practică de manager de layout pentru CodeIgniter de la zero! Acest lucru vă va permite să economisiți timp, să evitați apelurile inutile pentru a include header-urile, conținutul și subsolul tot timpul și să vă modulați fișierele Javascript și CSS.

Acesta este codul final pentru aspect și bibliotecă:

    Biblioteca de layout-uri<?php echo $title_for_layout ?> layouts-> print_includes (); ?>     
 CI = & get_instance ();  funcția publică set_title ($ title) $ this-> title_for_layout = $ title;  vizualizare funcție publică ($ view_name, $ params = array (), $ layout = 'implicit') // Manipulați titlul site-ului. Dacă NULL, nu adăugați nimic. Dacă nu, adăugați un // separator și adăugați titlul. dacă ($ this-> title_for_layout! == NULL) $ separate_title_for_layout = $ this-> titlu_separator. $ This-> title_for_layout;  // Încărcați conținutul vizualizării, paramurile trecând $ view_content = $ this-> CI-> load-> view ($ nume_name, $ params, TRUE); // Acum încărcați layout-ul și treceți vizualizarea pe care tocmai am redat $ this-> CI-> load-> view ('laytous /'. $ Layout, array ('content_for_layout' => $ view_content, 'title_for_layout' => $ separate_title_for_layout));  funcția publică add_include ($ path, $ prepend_base_url = TRUE) if ($ prepend_base_url) $ this-> CI-> load-> helper ('url'); // Încărcați acest lucru doar pentru a vă asigura că $ this-> file_includes [] = base_url (). calea de $;  altceva $ this-> file_includes [] = calea $;  returnați $ this; // Aceasta permite metodele lanțului funcția publică print_includes () // Inițializează un șir care va conține toate include $ final_includes = "; foreach ($ this-> include ca $ include) // Verificați dacă este un JS sau un Fișier CSS dacă (preg_match ('/ js $ /', $ include)) // Este un fișier JS $ final_includes. = '„;  elseif (preg_match ('/ css $ /', $ include)) // Este un fișier CSS $ final_includes. = '„;  return $ fin_includes; 

Asigurați-vă că vizionați ecranul pentru o prezentare completă și comentariu!

Cod