Codeigniter mvc
Codeigniterben, használhatjuk az mvc modellt. A következő példában egy vendégkönyvön keresztül kerül bemutatásra az mvc modell. |
|
A codeigniterben az applicaton/models mappába helyezhetjük a fájlainkat. A vendégkönyvhöz adunk majd hozzá rekordokat vagy törlünk és listázzuk őket. Kezdésnek van pár függvény is segítség képpen definiálva, bár nem használjuk jelen példában mindet, de bennehagytam, sose lehet tudni mikor lesz hasznos :) A lényegi rész a szagatott vonal alatt kezdődik. Nagyon nincs mit cifrázni a dolgokon, egyszerűen csak a codeigniter függvényeit használjuk az sql parancsok "elkészítéshez" és "futtatásához", az "active record"-okat. Az adatbázisban a tábla így néz ki: vendegkonyv ( id (int, primary_key), nev (varchar(100) ), uzenet (text), date (date) ) application/models/vendegkonyv_model.php <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Vendegkonyv_model extends CI_Model { /* * Vendegkonyv modell (vendegkonyv) * A vendegkonyv tábla listázás * Vendegkonyv tábla üzenet hozzáadása * Vendegkonyv tábla üzenet törlése */ //kötelező mezők ellenőrzése function _required($required,$data){ foreach($required as $field){ if(!isset($data[$field])) return false; // ha van üres mező } return true; //ha minden mező rendben van } //default vagy egyéb fix adatok beállítása function _default($defaults,$options){ return array_merge($defaults,$options); } /* megkeressük az adatot * $options = table(string), field(string), data(string) * table = tábla neve, field = mezőnév, data = keresett érték * return: ha megtaláltuk 1, ha nem 0 */ function _search($options = array()){ if(!$this->_required( array('table','field','data'), $options) ) return false; if(isset($options['field'])&&isset($options['data'])) $this->db->where($options['field'],$options['data']); $query = $this->db->get($options['table']); return ($query->num_rows())?1:0; } /*--------------------------------------------------------------------------------------------- */ /* vendegkonyv tábla listázás */ function getVendegkonyv($options = array()){ $this->db->order_by("date", "desc"); //limit / offset if(isset($options['limit']) && isset($options['offset'])) $this->db->limit($options['limit'],$options['offset']); else if(isset($options['limit'])) $this->db->limit($options['limit']); //sort if(isset($options['sortBy']) && isset($options['sortDirection'])) $this->db->limit($options['sortBy'],$options['sortDirection']); //qualification $query=$this->db->get("vendegkonyv"); return $query->result(); } /* vendegkonyv tábla üzenet hozzáadása * $options = nev(string),uzenet(string) */ function addVendegkonyv($options = array()){ if(!$this->_required( array('nev','uzenet'), $options) ) return false; //<- ha üresek a kötelező mezők megszakítja $options['date']=date("Y-m-d"); if(isset($options['nev'])) // ellenőrizzük, hogy létezik-e már ilyen című hír $this->db->where('nev',$options['nev']); if(isset($options['uzenet'])) $this->db->where('uzenet',$options['uzenet']); $this->db->insert('vendegkonyv',$options); return $this->db->insert_id(); } /* Vendegkonyv tábla üzenet törlése * $options = vendegkonyvid(int) */ function deleteVendegkonyv($options = array()){ if(isset($options['vendegkonyvid'])){ $this->db->where('id',$options['vendegkonyvid']); $this->db->delete('vendegkonyv'); } } } /* End of file vendegkonyv_model.php */ /* Location: ./application/model/vendegkonyv_model.php */ A controllerek az application/controllers mappában találhatóak. A konstruktorban meghívjuk még a calendar library-t, és két helpert, látogatókat számlálót és ékezetes szövegeket átalakító helpert. Ezeket most nem részletezzük, csak a példa kedvéért hagytam benne, amúgy törölhetőek vagy aki gondolja implementálja le. A jogosultság ellenőrzéseket is kiszedtem most a példából, hogy emészthetőbb legyen a példa, de utólag pótoljuk majd őket az éles rendszerben! application/controllers/vendegkonyv.php <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Vendegkonyv extends CI_Controller { /** * Vendegkönyv oldal index() vendegkonyv oldal üzenetek megjelenítése * vendegkonyv_add() vendegkonyv hozzáadás * vendegkonyv_delete($hir_id) vendegkonyv törlés(int) */ public function __construct() { parent::__construct(); //$this->load->helper('accent'); $this->load->library('calendar'); //$this->load->helper('napok_latogatok'); } // vendegkonyv oldal, linkek megjelenítése public function index(){ $this->load->library('parser'); $this->load->library('pagination'); $this->load->helper('text'); $this->load->model('vendegkonyv_model'); $this->data_header['header']=array('hatralevo_napok'=>hatralevo_napok(),'latogatok'=>latogatok()); $this->load->view('header_view',$this->data_header); $this->load->view('rightbar_view'); $this->load->view('sidebar_view'); // lekérdezzük a vendégkönyv listát $this->data['vendegkonyv'] = $this->vendegkonyv_model->getVendegkonyv(); $this->parser->parse('vendegkonyv/vendegkonyv_view',$this->data); $this->load->view('footer_view'); } // vendégkönyv eseménye hozzáadás public function vendegkonyv_add(){ $this->load->library('form_validation'); $this->load->model('vendegkonyv_model'); $this->form_validation->set_rules('nev','nev','trim|required'); $this->form_validation->set_rules('uzenet','uzenet','trim|required'); if($this->form_validation->run()){ unset($_POST['ok']); $vendegkonyvid=$this->vendegkonyv_model->addVendegkonyv($_POST); // hír hozzáadása if($vendegkonyvid){ $this->session->set_flashdata('flashConfirm',' Az üzenet hozzáadása sikerült!'); redirect('vendegkonyv'); } else{ $this->session->set_flashdata('flashError',' Az üzenet hozzáadása nem sikerült!'); redirect('vendegkonyv'); } } } // vendégkönyv eseménye törlés public function vendegkonyv_delete($vendegkonyvid){ $this->load->model('vendegkonyv_model'); $this->vendegkonyv_model->deleteVendegkonyv(array('vendegkonyvid'=>$vendegkonyvid)); $this->session->set_flashdata('flashConfirm',' Az üzenet törlése sikerült!'); redirect('vendegkonyv'); } } /* End of file vendegkonyv.php */ /* Location: ./application/controllers/vendegkonyv.php */ Végül nézzük meg a view-st is. Az application/views mappában találhatóak a fájlok, használjuk a template-eket is. application/views/vendegkonyv_view.php: <div id="hirek_div"> <div id="hirek_cim"> <form name="" method="post" action="<?php echo site_url('vendegkonyv/vendegkonyv_add'); ?>" target="" > <table cellpadding="0" cellspacing="0"> <tr> <td>Név: </td> <td><input type="text" value="" name="nev" /></td> </tr> <tr> <td>Üzenet: </td> <td> <textarea name="uzenet" rows="8" cols="35" class="post"> </textarea> </td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" name="ok" value="Új üzenet" /> </td> </tr> </table> </form> </div> <div id="hirek_cim">Vendégkönyv</div> {vendegkonyv} <div id="hirek_tartalom_sor" > {nev} <a href="<?php echo base_url();?>vendegkonyv/vendegkonyv_delete/{id}">törlés</a> {date} </div> <div id="hirek_tartalom"> {uzenet} </div> {/vendegkonyv} </div> Jó tanács a vendégkönyvhöz: készítsünk valami egyszerű captha-t, különben elöntenek minket a spam-ek :) A paraméterek, kapcsolók, osztályok, függvények részletes magyarázata itt: http://www.codeigniter.com/user_guide/database/active_record.html http://www.codeigniter.com/user_guide/general/models.html http://www.codeigniter.com/user_guide/general/controllers.html http://www.codeigniter.com/user_guide/general/views.html http://www.codeigniter.com/user_guide/libraries/parser.html |
2014.03.03. |
Figyelem! Az itt olvasható leírások, nem teljesek és nem biztos, hogy pontosak. Nem
frissülnek folyamatosan, ezért nem mindegyik használható az aktuális verziójú rendszerekben. Mindenki saját
felelősségére használja az itt található ötleteket. Az esetleges károkért nem vállalunk felelősséget.