CodeIgniter – Primer jednostavne aplikacije

Ovo je treći tekst u serijalu o CodeIgniter-u. U ovom tekstu nadovezaćemo se na predhodni koji se bavi podešavanjima i dati primer jednostavne aplikacije napravljene u CodeIgniter-u koja prikazuje informacije iz baze. Budući da se CodeIgniter bazira na MVC arhitekturi, ako niste upoznati sa njom pročitajte ovaj tekst da bi ste lakše razumeli primer.

Kontrole

Prvo što je potrebno uraditi je napraviti kontroler. Imena kontrolera, view fajlova, modela su skoro potpuno proizvoljna, a budući da ću u ovom primeru izvaditi i prikazati listu boja iz baze i njihove heksidecimalne kodove, imena koja budem davao će biti bazirana na toj temi. Kako su programski jezici na engleskom, volim da i imena promenljivih, funkcija, klasa i fajlova budu na engleskom.

Dakle, prvo treba da napravimo fajl sa imenom colors.php u /applications/controllers/ 

class Colors extends CI_Controller 
{	 
	function color_list()
	{
		//učitavanje modela
		$this->load->model("colors_model");

		//pozivanje funkcije iz modela
		$data['color_list'] = $this->colors_model->get_list();

		//prikazivanje informacije
		$this->load->view("color_list_view", $data);	
	}
}

Zatim, napravimo klasu Colors koja sadrži jednu funkciju. Deo extends CI_Controller nakon naziva klase je neophodan da bi u klasi mogle da se koriste nasleđene funkcije CodeIgniter kontrolera. Ime klase, u ovom slučaju Colors mora da odgovara nazivu fajla i da početno slovo bude veliko. Ako bi se fajl u /controllers/ zvao na primer blog.php klasa bi morala onda da se zove Blog.

Dakle ovo nije ispravno:

class blog extends CI_Controller { }

Ovo bi bilo ispravno:

class Blog extends CI_Controller { }

U klasi imamo i funckiju color_list() u kojoj se učitava model radi komunikacije sa bazom, zatim se poziva funkcija iz modela koja vraća listu iz baze i stavlja se dobijena vrednost u promenljivu. Funkcija iz modela se poziva sa $this->naziv_modela->naziv_funkcije()  nakon sto se ucita model sa $this->load->model(“naziv_modela”) .

Nakon toga pozivamo view fajl i prosleđujemo informacije dobijene iz modela. Vrednost koja se prosleđuje view fajlu treba da bude tipa array. Ako želite više stavki da prosledite jednostavno dodate još neki deo array-u koga prosleđujete npr.

$data[‘vrednost_1’] = $vrednost_za_prosledjivanje_1;
$data[‘vrednost_2’] = $vrednost_za_prosledjivanje_2;
$data[‘vrednost_3’] = $vrednost_za_prosledjivanje_3;
$data[‘vrednost_4’] = $vrednost_za_prosledjivanje_4;

Model

Modeli su PHP klase koje su dizajnirane da se rade sa informacijama iz baze. U našem primeru postoji tabela colors koja sadrži ime boje i njenu heksidecimalnu vrednost.

CREATE TABLE IF NOT EXISTS `colors` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`color_name` varchar(128) NOT NULL,
`color_hex_value` varchar(6) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

INSERT INTO `colors` (`ID`, `color_name`, `color_hex_value`) VALUES
(1, 'Plava', '0000ff'),
(2, 'Tamno braon', '5c4033'),
(3, 'Zlatna', 'cd7f32'),
(4, 'Narandžasta', 'ff7f00'),
(5, 'Crvena', 'ff0000'),
(6, 'Siva', 'c0c0c0'),
(7, 'Tamno zelena', '2f4f2f');

Treba nam model colors_model.php, koji se nalazi se u /applications/model/ folderu, koji će da sadrži funkciju za dobijanje potrebnih informacija:

class Colors_model extends CI_Model 
{		 		
	function get_list()
	{
		//Generisati query string za vađenje informacija iz tabele
		$query_string = "SELECT color_name, color_hex_value FROM colors";

		//Pozivanje CodeIgniter funkcije za izvršenje query-ja
		$result =  $this->db->query($query_string);

		//Ako je query uspeo i ima selektovanih redova u sebi vratiti rezultat
		if($result && $result->num_rows() > 0)
		{
			return $result->result_array();
		}

		//Ako query nije uspeo vratiti false
		return false;
	}	

}

Da bi mogli da koristimo CodeIgniter database funkcije mora da se učita odgovarajuća biblioteka. Kako database funkcije koristimo često preporučljivo je da se u fajlu autoload.php u /applications/config/autoload.php red
$autoload[‘libraries’] = array();

promeni u

$autoload[‘libraries’] = array(“database”);.

tj da se u promenjivoj $autoload[‘libraries’] dodeli array koji sadrži neophodnu biblioteku ili biblioteke.

Isto kao i kod kontrolera i modeli moraju imati prvo slovo klase veliko, kao i da se naziv klase poklapa sa nazivom fajla. I neophodno je da ekstenduju CI_Model da bi nasledili mogućnost korišćenja određenih funkcija.

Funkcija num_rows() vraća broj redova selektovanih u query-ju, a result_array() vraća rezultat u obliku array-a. Naravno pored toga postoji još veliki broj drugih funkcija, ali o tome drugom prilikom.

View

Nakon što se u kontroleru pozove model i uzmu informacije, njih treba negde prikazati. Tu stupaju na scenu view fajlovi. Oni se nalaze u /applications/view/ folderu i mogu da sadrže html, css, js kao i php. Ako se prosleđuju neke vrednosti iz kontrolera, one se mogu u view fajlovima koristiti preko key vrednosti array-a koji je prosleđen. Budući da je prosleđen $data[‘color_list’] može da se koristi promenljiva $color_list.

Da je prosleđeno

$data[‘neki_string’] = “Neki nasumicni string”;
$this->load->view(“neki_view”, $data);

onda bi u neki_view.php sa

dobili ispisano “Neki nasumicni string”.

Body fajla color_list_view.php koji se nalazi u /applications/view/ treba da izgleda:

<html>
<head>
</head>
<body>
<table>
<?php
//Samo u slučaju da je model vratio rezultat tipa array treba prikazati informacije
if(is_array($color_list))
{
	foreach($color_list as $row)
	{
	?>

			<tr>
				<td><?php echo $row['color_name']; ?></td>
				<td><?php echo $row['color_hex_value']; ?> </td>
			</tr>

	<?php
	}
}
?>

</table>
</body>
</html>

Pozivanje kontrolera i njihovih funkcija

Dakle u foreach petlji imamo jednostavno iteriranje kroz promenljivu i prikazivanje rezultata. Da bi ovaj prikaz bio lepši neophodno je napisati ili inkludovati css u head deo. Isto moze i javascriptom ili bilo čime sto se koristi u standardnom html ili php fajlu. Ako postoji veći broj view fajlova ovakav sistem može stvoriti nepregledan kod, a o tome kako to izbeći u jednoj od narednih tema.

Kada je sve napravljeno, treba i u browser-u da vidimo rezultat rada. To se može učiniti sa odlaskom na adresu http://www.example.com/index.php/colors/color_list/ . Prvi deo www.example.com je domen na kome se nalazi aplikacija. Index.php može da se izbaci koristeći routs.php ili .htaccess, ali o tome u tekstu „Kako održati čist URI”. Colors je ime kontrolera i color_list je ime funkcije. Dakle, struktura URI-ja je http://domen/index.php/naziv_kontrolera/ime_funkcije_u_kontroleru.

Šta dalje?

Nakon što prođete ovaj primer trebalo bi pored tabele sa informacijama o bojama, da dobijete pre svega bolje razumevanje kako funkcionise CodeIgniter. Dalje širenje aplikacije i davanje novih mogućnosti se najlakše dobija korišćenjem CodeIgniter-ovih bilblioteka i helpera tako da će naredni tekst u serijalu da prikaže najbitnije.