Još jedna aplikacija koja ima za cilj da demonstrira moj skromni trud.
Na prvi pogled deluje jednostavna ali poseduje funkcionalnosti koje je još više pojednostavljuju, a ujedno i komplikuju.Za razliku od telefonskog imenika, prilikom učitavanja strana poziva se tzv. multiple view u svakoj f-ji u controller-u. Veoma velika pogodnost.
Drugo, koristi html helper. Napravio sam funkciju menu() pomoću koje se kreiraju stavke menija, a sve to kroz asocijativni niz. Da pojednostavim... Kroz menu_view.php pišem ime stavke u meniju, npr. о_meni, o_blogu, kontakt itd. a dobijam kao izlaz O MENI, O BLOGU, KONTAKT... Dakle vrši se konverzija iz malih u velika slova kao i zamena znaka "_" sa razmakom.Kroz routes.php je iskazana putanja svake stavke menija, odnosno putanja do odgovarajuće f-je u controller-u, čime je postignuta automatizacija u radu i manje opterećenje servera.
Jedino ulogovan korisnik može kreirati postove, dok ih ostali korisnici mogu samo čitati.
Parametri za login: Username: admin Password: admin --->>> dakle razrađene su sesije...
Koristi i pagination.php library u kome su neka osnovna podešavanja u prikazu postova.
Pored toga, od biblioteka još koristi form_validation, email i session.
Instalacija
Da bi ste instalirali CodeIgniter, neophodno je preuzeti poslednju verziju sa zvaničnog sajta i raspakovati je (ukoliko koristite xampp onda je to folder htdocs).
Na početku naravno baza
Pristup bazi
Fajl application/config/database.php apdejtovati u sledeće:
$db['default']['hostname'] = 'localhost'; $db['default']['username'] = 'root'; $db['default']['password'] = ''; $db['default']['database'] = 'myblog';
routes.php izgleda ovako:
$route['default_controller'] = "blog_controller"; $route['404_override'] = ''; $route['naslovna']= 'blog_controller/naslovna/'; $route['napravi_post']= 'blog_controller/napravi_post/'; $route['o_meni']= 'blog_controller/o_meni/'; $route['o_blogu'] = 'blog_controller/o_blogu'; $route['kontakt']= 'blog_controller/kontakt/'; $route['posts/(:any)'] = 'blog_controller/pregled_posta';
pagination.php izgleda ovako:
<?php $this->CI = &get_instance(); // Public property preuzet po referenci $config['base_url'] = base_url().'blog_controller/index'; $config['total_rows'] = $this->CI->db->get('posts')->num_rows(); // Public property komunicira sa bazom preko CI jezgra $config['per_page'] = 8; $config['num_links'] = 3; $config['full_tag_open'] = ''; $config['full_tag_close'] = ''; $config['next_link'] = 'Sledeća>>'; $config['prev_link'] = 'Prethodna<<'; ?>
autoload.php izgleda ovako:
$autoload['libraries'] = array('database', 'session', 'form_validation', 'pagination'); $autoload['helper'] = array('html', 'url', 'text', 'form');
encriptyon key po kome se sesije kriptuju u config.php:
$config['encryption_key'] = 'date_of_birth';
html_helper.php i funkcija menu():
if ( ! function_exists('menu')) { function menu($menu = '') { $id = $menu['id']; $item = $menu['menus']; $nav_menu = ''; foreach ($item as $li_menu) { /* * Vrsi se zamena znaka "_" sa razmakom * Vrsi se konverzija iz malih u velika slova */ $li_a_nav[] = '<a href='.base_url().$li_menu.'>'.strtoupper(str_replace('_', ' ',$li_menu)).'</a>'; //promenljiva (niz) $li_a_nav[] predstavlja stavke u menijima } $nav_menu .= ul($li_a_nav).'</div> '; return $nav_menu; }
Code aplikacije "blog"
blog_model.php
<?php class blog_model extends CI_Model { function get_posts($per_page, $row) { $this->db->limit($per_page, $row); $this->db->order_by('date', 'desc'); $query = $this->db->get('posts'); if ($query) { return $result = $query->result_array(); return TRUE; } else return FALSE; } function save_post() { $data = array( 'title' => $this->input->post('title'), 'body' => $this->input->post('body') ); $query = $this->db->insert('posts', $data); if ($query) { return TRUE; } else return FALSE; } function prikazi_post($id) { $this->db->where('id', $id); $query = $this->db->get('posts'); if ($query->num_rows > 0) { return $query->result_array(); return TRUE; } else return FALSE; } function provera_lozinke($user, $pass) { $this->db->where('username', $user); $this->db->where('password', md5($pass)); $query = $this->db->get('users'); if ($query->num_rows() == 1) { return $query->result(); return TRUE; } else return FALSE; } } ?>
Controllers/blog_controller.php izgleda ovako:
<?php
class blog_controller extends CI_Controller
{
public function __construct() {
parent::__construct();
$this->config->load('pagination', TRUE);
$this->load->model('blog_model');
}
function index()
{
$this->naslovna();
}
function naslovna()
{
$per_page = $this->config->item('per_page', 'pagination');
$row = $this->uri->segment(3);
$data['posts'] = $this->blog_model->get_posts($per_page, $row);
$this->load->view('header_view');
$this->load->view('menu_view');
$this->load->view('headerbg_view');
$this->load->view('content_view', $data);
$this->load->view('footer_view');
}
function napravi_post()
{
if ($this->session->userdata('logged_in')){
$this->form_validation->set_rules('title', 'Ime posta', 'trim|required|xss_clean|is_unique[posts.title]');
$this->form_validation->set_rules('body', 'Post', 'trim|required|xss_clean');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('header_view');
$this->load->view('menu_view');
$this->load->view('headerbg_view');
$this->load->view('create_post_view');
$this->load->view('footer_view');
}
elseif ($this->blog_model->save_post() == TRUE) {
redirect(base_url()); }
else {
echo 'error';
}
}
else {
$this->load->view('header_view');
$this->load->view('menu_view');
$this->load->view('headerbg_view');
$this->load->view('restricted');
$this->load->view('footer_view');
}
}
function pregled_posta()
{
$post_num = $this->uri->segment(2);
$pos_string = strrpos($post_num, '_'); //Pronalazi poslednje _ u stringu
$id = substr($post_num, $pos_string+1); // Poziciju poslednjeg _ u stringu uvecava za 1 i dobija id iz baze
if ($data['posts'] = $this->blog_model->prikazi_post($id))
{
$this->load->view('header_view');
$this->load->view('menu_view');
$this->load->view('headerbg_view');
$this->load->view('post_view', $data);
$this->load->view('footer_view');
}
else {
redirect(base_url());
}
}
function o_meni()
{
$this->load->view('header_view');
$this->load->view('menu_view');
$this->load->view('headerbg_view');
$this->load->view('about_me');
$this->load->view('footer_view');
}
function o_blogu()
{
$this->load->view('header_view');
$this->load->view('menu_view');
$this->load->view('headerbg_view');
$this->load->view('about_blog');
$this->load->view('footer_view');
}
function uloguj_se()
{
$this->load->view('header_view');
$this->load->view('menu_view');
$this->load->view('headerbg_view');
$this->load->view('login');
$this->load->view('footer_view');
}
function verify()
{
$this->form_validation->set_rules('username', 'Korisničko ime', 'trim|required|xss_clean');
$this->form_validation->set_rules('password', 'Šifra', 'trim|required|xss_clean|callback_proveri_lozinku');
if ($this->form_validation->run())
{
redirect('logged_controller', 'refresh');
}
else {
$this->load->view('header_view');
$this->load->view('menu_view');
$this->load->view('headerbg_view');
$this->load->view('login');
$this->load->view('footer_view');
}
}
function proveri_lozinku($user, $pass)
{
$user = $this->input->post('username');
$pass = $this->input->post('password');
if ($result = $this->blog_model->provera_lozinke($user, $pass))
{
$sess_array = array();
foreach ($result as $rec) {
$sess_array = array(
'username' => $rec->username,
);
}
$this->session->set_userdata('logged_in', $sess_array);
return TRUE;
}
$this->form_validation->set_message('proveri_lozinku', 'GREŠKA. Uneto je pogrešno korisničko ime ili lozinka. Molimo pokušajte ponovo.');
return FALSE;
}
function izloguj_se()
{
$this->session->unset_userdata('logged_in');
redirect ('blog_controller', 'refresh');
}
function kontakt()
{
$this->load->view('header_view');
$this->load->view('menu_view');
$this->load->view('headerbg_view');
$this->load->view('contact');
$this->load->view('footer_view');
}
function verify_email()
{
$this->form_validation->set_rules('ime', 'Ime', 'trim|required|xss_clean');
$this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean|valid_email');
$this->form_validation->set_rules('poruka', 'Poruka', 'trim|required|xss_clean');
if ($this->form_validation->run())
{
$this->load->helper('email');
$this->load->library('email');
$this->email->from(set_value("email"), set_value("ime"));
$this->email->to("vl.radovanovic@gmail.com");
$this->email->subject('Pitanje u vezi aplikacije blog');
$this->email->message(set_value("poruka"));
$mail = $this->email->send();
if ($mail)
{
$this->load->view('header_view');
$this->load->view('menu_view');
$this->load->view('headerbg_view');
$this->load->view('success');
$this->load->view('footer_view');
}
else show_404();
}
else {
$this->load->view('header_view');
$this->load->view('menu_view');
$this->load->view('headerbg_view');
$this->load->view('contact');
$this->load->view('footer_view');
}
}
}
?>
Views/header_view.php izgleda ovako:
<html>Vladimir Radovanović blog <?php $link = array( 'href' => base_url().'css/style.css', 'type' => 'text/css', 'rel' => 'stylesheet' ); echo link_tag($link); ?>" Blog
" "by Vladimir Radovanović
Views/menu_view.php izgleda ovako:
<?php if ($this->session->userdata('logged_in')) { $data = array( 'id' => 'menu', 'menus' => array( 'menu1' => 'naslovna', 'menu2' => 'napravi_post', 'menu3' => 'o_meni', 'menu4' => 'o_blogu', 'menu5' => 'kontakt' ) ); echo menu($data); } else { $data = array( 'id' => 'menu', 'menus' => array( 'menu1' => 'naslovna', 'menu2' => 'o_meni', 'menu3' => 'o_blogu', 'menu4' => 'kontakt' ) ); echo menu($data); } ?>?
Views/headerbg_view.php izgleda ovako:
</div> <?php if (!$this->session->userdata('logged_in')) { ?>
Views/content_view.php izgleda ovako:
<div id="page"> <?php echo $this->pagination->create_links(); foreach ($posts as $post){ echo ''.ucfirst($post['title']).'
'; echo ''.character_limiter($post['body'],255).'Opširnije
'.br().' '; echo '
'; echo ''; } echo $this->pagination->create_links(); ?> </div>
Controllers/logged_controller.php izgleda ovako:
<?php class logged_controller extends CI_Controller { public function __construct() { parent::__construct(); $this->config->load('pagination', TRUE); $this->load->model('blog_model'); } function index() { $per_page = $this->config->item('per_page', 'pagination'); $row = $this->uri->segment(3); $data['posts'] = $this->blog_model->get_posts($per_page, $row); if ($this->session->userdata('logged_in')) { $this->load->view('header_view'); $this->load->view('menu_view'); $this->load->view('headerbg_view'); $this->load->view('content_view', $data); $this->load->view('footer_view'); } else { $this->load->view('header_view'); $this->load->view('menu_view'); $this->load->view('headerbg_view'); $this->load->view('restricted'); $this->load->view('footer_view'); } } } ?>
Views/login.php izgleda ovako:
<div id="page"> <?php echo validation_errors(); ?> <?php echo form_open('blog_controller/verify'); ?> Korisničko ime: Lozinka: <?php echo form_close(); ?> </div>
Views/post_view.php izgleda ovako:
<div id="page"><?php foreach ($posts as $post) { echo "
".ucfirst($post['title'])."
"; echo '
'.nl2br($post['body']).'
'; echo '
Objavljeno: '.$post['date'].'
' ; } ?> </div> </div>
Views/restricted.php izgleda ovako:
<div id="page">Morate biti ulogovani da bi ste pristupili ovoj stranici.
ULOGUJ SE
</div>
Views/about_me.php izgleda ovako:
<div id="page"> Zovem se Vladimir Radovanović. Rođen sam u Kragujevcu 08.04.1984. godine. Završio sam specijalističke strukovne studije na Visokoj Tehničkoj školi strukovnih studija u Kragujevcu i dobio zvanje "strukovni informatičar". Na studijama nisam imao puno prilike da kroz realne probleme učim programiranje tako da sam morao lično da pronađem najbolji način da se posvetim praksi. Web programiranjem se nikada nisam bavio profesionalno, ali me je oduvek interesovalo tako da mi i učenje nije padalo teško. Od tehnologija preferiram PHP i CodeIgniter kao framework. Zašto? 1. Laka instalacija i konfiguracija 2. Čista i elegantna MVC implementacija 3. Nudi i Active Record za upravljanje bazom podataka 4. Dobre performanse 5. Veliki broj biblioteka i helpera koje olakšavaju rad 6. Velika CI zajednica 7. Jednostavno mi pasuje Od tehnologija za upravljanje sadržajem najviše sam koristio Joomla-u od 1.5 do 2.5 verzije. Jednostavno volim hijerarhijsku strukturu preko sekcija, kategorija do članaka, kojim Joomla upravlja. Kao akrivan član na forum.joomla.org stekao sam mnogo znanja pri rešavanju konkretnih problema. Ranije objavljeni projekti: hranaizdravlje.com, prostorinzenjering.com, kao i mnostvo ne objavljenih projekata. Podrazumevana znanja ----->>>> HTML, CSS, JavaScript, JQuery... ----->>>> Active record, PHP Data Object (PDO) interfejs za pristup bazi podataka, kroz MySQL... </div>
Views/about_blog.php izgleda ovako:
<div id="page"> Još jedna aplikacija koja ima za cilj da demonstrira moj skromni trud. Na prvi pogled deluje jednostavna ali poseduje funkcionalnosti koje je još više pojednostavljuju, a ujedno i komplikuju. Za razliku od telefonskog imenika, prilikom učitavanja strana poziva se tzv. multiple view u svakoj f-ji u controller-u. Veoma velika pogodnost. Drugo, koristi html helper. Napravio sam funkciju menu() pomoću koje se kreiraju stavke menija, a sve to kroz jednostavan niz.Da pojednostavim... Kroz menu_view.php pišem ime stavke u meniju, npr. о_meni, o_blogu, kontakt itd. a dobijam kao izlaz O MENI, O BLOGU, KONTAKT... Dakle vrši se konverzija iz malih u velika slova kao i zamena znaka "_" sa razmakom. Kroz routes.php je iskazana putanja svake stavke menija, odnosno putanja do odgovarajuće f-je u controller-u, čime je postignuta automatizacija u radu i manje opterećenje servera. Jedino ulogovan korisnik može kreirati postove, dok ih ostali korisnici mogu samo čitati. Parametri za login: Username: admin Password: admin --->>> dakle razrađene su sesije... Koristi i pagination.php library u kome su neka osnovna podešavanja u prikazu postova. BTW, pagination.php koristi tzv. public property CI koji koristi sve biblioteke koje su mu dostupne, a sve to bez extendovanja. Zašto? Zato što je napravljen objekat koji instancira sve klase iz CI jezgra, a pozvan je po referenci. Pored toga, od biblioteka još koristi form_validation, email, session... </div>
Views/contact.php izgleda ovako:
<div id="page"> <?php echo validation_errors(); ?> <?php echo form_open('blog_controller/verify_email'); ?> Vaše ime: Vaš email: Poruka: Za: vl.radovanovic [et] gmail.com <?php echo form_close(); ?> </div>
Views/success.php izgleda ovako:
<div id="page">Uspešno ste poslali pitanje. Odgovoriću Vam u najkraćem mogućem roku
NASLOVNA
</div>
Views/creat_post_view.php izgleda ovako:
<div id="page"> <?php echo validation_errors(); ?> <?php echo form_open(); ?> Ime posta: Post: <?php echo form_close(); ?>
Ceo projekat možete preuzeti ovde.
Srdačan pozdrav.
Vladimir
github.com/vlradovanovic
codexist.blogspot.com
Нема коментара:
Постави коментар