RTFB!
4 Aug
Tokrat bom opisal eno preprosto uporabo pagerja v CakePHP aplikaciji. Primer bom navedel za novice. Recimo da hočemo na eni strani po 5 novic razvrščenih po datumu.
Na svežo si skopiramo nekam najnovejšo različico CakePHP frameworka. Jaz sem si dal zadevo v direktorij “cakephp”. Kam boste dali sami je vaša odločitev.
V app/config/core.php spremenimo vrednost konstante CAKE_SESSION_STRING v nek drug poljuben random string. To nam sistem tudi napiše. Imeti morate tudi pisljiv app/tmp direktorij.
Gremo k bistvu. Naredimo bazo. V bazi naredimo tabelo news z naslednjimi polji:
CREATE TABLE `news` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(35) NOT NULL, `flash` text NOT NULL, `content` text NOT NULL, `hidden` tinyint(1) NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), FULLTEXT KEY `content` (`content`), FULLTEXT KEY `flash` (`flash`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Lahko bi uporabil samo id, title, content, created polja vendar sem zaradi nadlanjih zapisov tabelo malce razširil da se nebo treba takrat matrati
Sedaj preimenujemo app/config/database.php.default v database.php. V database.php nastavite vse potrebne podatke za povezavo do vaše baze.
Primer:
class DATABASE_CONFIG { 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'username_za_dostop_do_vase_baze', 'password' => 'geslo', 'database' => 'ime_vase_baze', 'prefix' => '' ); }
F5 in sistem bi vam moral izpisati da se je uspešno povezal do vaše baze => “Your database configuration file is present.”. V primeru napake vam bo to sistem lepo povedal
Naredimo file app/app_controller.php. In dodamo vanj naslednje:
< ?php class AppController extends Controller { public $ext = '.tpl'; } ?>
Kaj nam app_controller.php omogoča ? Omogoča nam da v aplikaciji nastavimo neke nastavitve na neko vrednost ki jo hočemo da je veljavna povsod in ne samo v določenem kontrolerju. S spremenljivko $ext nastavimo končnico za template “.tpl”. Po defaultu uporablja sistem .ctp. Ta korak vam ni treba narediti vendar morate template ustvariti z .ctp končnico namesto .tpl.
Naredimo kontroler. app/controllers/news_controller.php
V news_controller.php file damo naslednje:
< ?php class NewsController extends AppController { public $name = 'News'; public function index() { } } ?>
Naredimo model models/news.php. Dodamo naslednje:
< ?php class News extends AppModel { public $name = 'News'; } ?>
Naredimo tepmlate za prvo stran pri novicah app/views/news/index.tpl. Sedaj gremo na http://vas.host.name/direktorij_kjer_je_cakephp/news/. Če je kaj pravice na svetu potem nebi smeli dobiti nobenega error-ja.
Dodajmo nekaj vnosov v tabelo news.
INSERT INTO `news` VALUES (1, 'Novica 1', 'Uvod za novico 1', 'Glavno besedilo za novico 1', 0, '2007-08-04 19:31:53'); INSERT INTO `news` VALUES (2, 'Novica 2', 'Uvod za novico 1', 'Glavno besedilo za novico 2', 0, '2007-08-04 19:31:53'); INSERT INTO `news` VALUES (3, 'Novica 3', 'Uvod za novico 3', 'Glavni opis za novico 3', 0, '2007-08-04 19:32:52'); INSERT INTO `news` VALUES (4, 'Novica 4', 'Uvod za novico 4', 'Glavni opis za novico 4', 0, '2007-08-01 19:32:52'); INSERT INTO `news` VALUES (5, 'Novica 5', 'Uvod za novico 5', 'Glavni opis za novico 5', 0, '2007-08-01 19:33:53'); INSERT INTO `news` VALUES (6, 'Novica 6', 'Uvod za novico 6', 'Glavni opis za novico 6', 0, '2007-08-04 19:33:53'); INSERT INTO `news` VALUES (7, 'Novica 7', 'Uvod za novico 7', 'Glavno besedilo za novico 7', 0, '2007-07-04 19:31:53'); INSERT INTO `news` VALUES (8, 'Novica 8', 'Uvod za novico 8', 'Glavno besedilo za novico 8', 0, '2007-08-04 19:31:53'); INSERT INTO `news` VALUES (9, 'Novica 9', 'Uvod za novico 9', 'Glavni opis za novico 9', 0, '2007-08-04 19:32:52'); INSERT INTO `news` VALUES (10, 'Novica 10', 'Uvod za novico 10', 'Glavni opis za novico 10', 0, '2007-06-04 19:32:52'); INSERT INTO `news` VALUES (11, 'Novica 11', 'Uvod za novico 11', 'Glavni opis za novico 11', 0, '2007-08-02 19:33:53'); INSERT INTO `news` VALUES (12, 'Novica 12', 'Uvod za novico 12', 'Glavni opis za novico 12', 0, '2007-08-03 19:33:53');
V kontrolerju pridobimo podatke in vključimo pager in nato prikažimo zapise v index.tpl.
V news_controller.php dodajmo:
V index() funkcijo dodajmo naslednje:
$this->set('News', $this->paginate('News'));
V prvi vrstici povemo pager-ju da naj rezultate sortira po polju created v padajočem načinu. V drugi vrstici pridobimo podatke iz baze in jih podamo v template index.tpl. V index.tpl bodo novice v $News spremenljivki.
Sedaj bi moral news_controller.php izgledati nekako takole:
< ?php class NewsController extends AppController { public $name = 'News'; public function index() { $this->set('News', $this->paginate('News')); } } ?>
Prikažimo podatke in pager v index.tpl.
V index.tpl:
<table cellpadding="0" cellspacing="0" width="50%"> <tr style="font-weight: bold;"> <td>Naslov</td> <td>Uvod</td> <td>Dodano</td> </tr> < ?php foreach ($News as $Item) { ?> <tr> </tr> < ?php }} ?> </table> <div style="text-align: center;"> </div>
Evo, to je cela umetnost
Mislim da vsi štekate kaj sem nareidl v index.tpl ? I hope so
Naslednjič bomo o dodajanju in urejanju novic, zato zadevo le shranite da nebo treba še enkrat delat
Zadevo si lahko ogledate na http://www.linux-si.org/cakephp/news/
Uporabil:
PHP 5.2.3
MySQL 5
CakePHP cake_1.2.0.5427alpha
http://www.linux-si.org/cakephp/news/
P.S. Ne me jebat za kake morebitne slovnične napake
iNobl: 29% [?]
Tagi:
One Response for "CakePHP: Uporaba pager-ja"
Zanimivo in ko ti delaš enostavno. Bom danes probal začeti in poročam, kako je šlo. ps Stran ne dela več
Leave a reply