Choď na navigáciu
Nálepky: CakePHP php

Ako vytvoriť admin rozhranie?

Admin rozhraním disponuje v súčasnosti každá väčšia web aplikácia. Dnes si ukážeme, ako si môžeme takéto jednoduché admin rozhranie vytvoriť pomocou CakePHP.

V Cake máme v podstate dve možnosti, ktorými môžeme vytvoriť administračné rozhranie pre našu aplikáciu. Prvou je vytvoriť novú aplikáciu ktorú sa bude starať o administráciu a druhou je použiť predpripravené riešenie Cake.

Najprv si poďme predstaviť prvé riešenie, čiže si vytvoríme v rámci nášho projektu novú aplikáciu, ktorú môžeme nazvať napr. admin, tzn. že budeme mať v našej aplikácii nasledovnú štruktúru

/web
|_ admin
   |_ webroot
   |_ controllers
   |_ views
   |_ models
   |_ ...
|_ app
   |_ webroot
   |_ controllers
   |_ views
   |_ models
   |_ ...
|_ cake

Predstavme si, že adresár web je koreňový adresár našej web aplikácie, ktorú máme napríklad na adrese http://www.example.com a adresár admin je nová aplikácia v našom projekte s kompletnou stromovou štruktúrou Cake aplikácie. Potom budeme pristupovať k nášmu administračnému rozhraniu cez adresu http://www.example.com/admin a k rozhraniu stránky prístupné pre všetkých cez adresu http://www.example.com tak ako sme bežne zvyknutý. Tento spôsob tvorby administračného rozhrania by som však neodporúčal, pretože nedodržuje pravidlo DRY a veľa vecí budete musieť písať a upravovať na dvoch miestach, tak ako v klasickej aplikácii, tak i v admin aplikácii.

Druhým spôsobom oveľa jednoduchším a inteligentnejším je využiť priamo riešenie, ktoré nám ponúka Cake. Základom je nastaviť admin routovanie v súbore app/config/co­re.php odkomentovaním ri­adku

Configure::write('Routing.admin', 'admin');

Nič viac netreba nastavovať. Týmto sme dali Cake najavo, že za adresou http://www.example.com/admin/ sa bude skrývať naše administračné rozhranie. Od tejto chvíle, bude Cake automaticky rozpoznávať akcie v controllery a k nim príslušné view podľa predpony admin_.

Uveďme si príklad. Máme controller články, kde máme verejnú akciu view a admin akciu add. Náš controller uložený v súbore app/controller­s/articles_con­troller.php by vyzeral následovne

class ArticlesController extends AppController {
    var $name = 'Articles';

    function view($id) {}

    function admin_add(){}
}

Ešte je treba doplniť, že akcia view bude dostupná prostredníctvom adresy http://www.example.com/articles/view/1 a akcia admin_add bude dostupná prostredníctvom adresy http://www.example.com/…articles/add

Na záver treba uviesť, ako pomenovávať view súbory k daným akciám a uvedieme si výslednú adresárovú štruktúru

/web
|_ app
   |_ controllers
      |_ articles_controller.php
   |_ views
      |_ articles
         |_ view.ctp
         |_ admin_add.ctp
   |_ models
   |_ ...

Teraz nám je jasné, že keď vytvárame admin akciu, musíme k nej vytvoriť aj admin view s prefixom admin_. Týmto sme u konca a môžeme plnohodnotne využívať administračné rozhranie.

V článku som predstavil dva možné spôsoby, ako vytvoriť administračné rozhranie pre našu aplikáciu. Myslím si, že oveľa lepší a jednoduchší spôsob je ten druhý, kde využijeme predpripravené riešenie frameworku.

Rád uvítam vaše námety a pripomienky v diskusii k článku.

Povedz o článku aj ostatným - www.pridej.cz

Hodnotenie článku: 55%
Počet hodnotení: 56

zlýdobrý

Komentáre k článku

Nový komentár

  1. Titulok: Ine rozhrania
    Autor: Huco
    Vytvorený: 28. 02. 2008 09:21

    Admin akcie povolim

    Configure::write('Routing.admin', 'admin');

    Ale mozem nadefinovat aj viac takychto typov akcii, napr. ak mam viacero uzivatelskych typov skupin a kazda ma vystup rieseny inaksie. Napr. mam standardneho uzivatela, registrovaneho uzivatela, …

  2. Titulok: RE:Ine rozhrania
    Autor: Tibor
    Vytvorený: 28. 02. 2008 11:15

    No toto je podla mna vec access listu a auth komponenty

    Prava by som nenastavoval podla toho, v akom tvare je url adresa. Podla mna si nastav admin routing tak, ako je to opisane v clanku a podla access listu a auth komponenty spristupnuj jednotlive akcie uzivatelom, ktory budu mat na danu akciu prava.

    Taktiez si mozes podla jednotlivych prav lubovolne menit view, napr. ked je niekto prihlaseny, ked nie je atd.

    Este doplnim, ze urcite je vyhodne si pre admin rohzranie vytvorit iny layout, ako pre beznu stranku.

  3. Titulok: admin layout
    Autor: curo
    Vytvorený: 03. 05. 2008 23:23

    da sa nastavit nieco ako default admin layout, aby som ho nemusel vzdy nastavovat v metode controlleru?

  4. Titulok: RE: admin layout
    Autor: Tibor
    Vytvorený: 04. 05. 2008 15:49

    Napriklad umiestnenim nasledovneho kodu do suboru app/app_contro­ller.php ako metoda triedy AppController

    function beforeFilter() {
         if(@$this->params[Configure::read('Routing.admin')]) {
              $this->layout = 'admin';
         }
    }