Učimo vas kako izraditi web stranicu i programirati
 



Phalcon - PHP Framework

View

View je prezentacija podataka odnosno ono što korisnik vidi u svom browseru. Dakle, to je HTML dokument sa ubačenim PHP varijablama.
Phalcon korristi PHP Template Engine i VOLT Template Engine. Ako koristi PHP kao template onda fajl mora imati .phtml extenziju. U drugom slučaju to je .volt.

Dvije klase su odgovorne za view. To su Phalcon\Mvc\View i Phalcon\Mvc\View\Simple.



Hijerarhijsko renderiranje

Phalcon\Mvc\View podržava hijerarhijsko renderiranje view-a. To znači da će se sjediniti fajlovi:
MAIN: /views/index.phtml - zajednički za cijelu aplikaciju
CONTROLLER: /views/layouts/posts.phtml - zajednički za sve akcije u PostsControler-u
ACTION: app/views/posts/show.phtml - view samo za postsAction() akciju

Dakle url bi trebao izgledati http://.../phalcon/posts/show gdje je
phalcon - direktorij u koji je smješten app i public directorij
posts - se odnosi na PostsController
show - se odnosi na showAction

Na ovaj način se stvara hijerarhija view fajlova.
Da bi se hijerarhijski viši fajl uključio u sebe sadržaj hijerarhijski nižeg fajla potrebno je napisati:

 <?php echo $this->getContent() ?>
Phalcon View Hierarchy

Primjer hijerarhijskog učitavanja view fajlova:

/.../a050viewhierarchy : pokreni primjer
/.../a050viewhierarchy/ispis : pokreni primjer

SOURCES:
/controllers/A050ViewHierarchyController.php -controller
/views/index.phtml -main layout
/views/layouts/a050viewhierarchy.phtml -controller layout
/views/a050viewhierarchy/ispis.phtml -action view



Templates

Templates-i su view fajlovi koji su zajednički svim kontrolerima. Budući da ih dijele svi kontroleri onda se stavljaju u /views/layouts/ direktorij.

Phalcon Template and Controller layout

Unutar controller klase najčešće ga stavljamo u initialize() metodu te ga pozivamo sa setTemplateAfter().

    public function initialize()
    {
        $this->view->setTemplateAfter('menu');
    }

Primjer učitavanja templatesa initialize() metodom:

/.../a051viewtemplates : pokreni primjer
/.../a051viewtemplates/ispis : pokreni primjer
/.../a051viewtemplates/setafter : pokreni primjer
/.../a051viewtemplates/setbefore : pokreni primjer
/.../a051viewtemplates/setlayout : pokreni primjer

SOURCES:
/controllers/A051ViewTemplatesController.php -controller
/views/index.phtml -main layout
/views/layouts/a051viewtemplates.phtml -controller layout
/views/layouts/template_menu.phtml -template
/views/a051viewtemplates/ispis.phtml -action view

Metode Phalcon\Mvc\View klase koje se koriste za templates:
1. setTemplateAfter('menu'); - controller layout tj /layouts/ctrl.phtml se učita nakon /layouts/menu.phtml
2. setTemplateBefore('menu'); - controller layout tj /layouts/ctrl.phtml se učita prije /layouts/menu.phtml
3. setLayout('menu'); - umjesto /layouts/ctrl.phtml ide /layouts/template.phtml

Phalcon setTemplateAfter setTemplateBefore

Kontroliranje Render levela

Kao što smo vidjeli u Phalconu postoji hijerarhija view fajlova. Prvo se automatski prikazuje main layout (/views/index.phtml), koji zatim poziva controller layout (/views/layouts/crtl.phtml), a koji opet poziva action view (/views/ctrl/action.phtml).
Također kao međufaze možemo ubaciti template pomoću setTemplateBefore() i setTemplateAfter().
Unutar kontroler-a ili pak bootstrap fajla možemo kontrolirati od kojeg nivoa će se početi izvršavati hijerarhija view fajlova. To postižemo sa setRenderLevel() metodom.

    public function initialize()
    {
        $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
    }

Definiranje od kojeg nivoa počinje izvršavanje hijerarhije view fajlova:
1. LEVEL_MAIN_LAYOUT -počinje od Main Layouta tj. index.phtml.
2. LEVEL_AFTER_TEMPLATE -počinje od After Template-a tj. od /layouts/templateAfter.phtml
3. LEVEL_LAYOUT -počinje od Controller Layouta tj. od /layouts/ctrl.phtml
4. LEVEL_BEFORE_TEMPLATE -počinje od Before Template-a tj. od /layouts/templateBefore.phtml
5. LEVEL_ACTION_VIEW -počinje od Action View-a tj. od /ctrl/action.phtml
6. LEVEL_NO_RENDER -ne šalje niti jedan view fajl iz hijerarhije

Phalcon View render Levels

U ovom primjeru se automatski učitavaju main layout, after template, controller layout, before template te na kraju action view. U URLu ćemo sa parametrima od 0 do 5 definirati koji render level ćemo upotrijebiti:

/.../a055renderlevel/ispis/0 : pokreni primjer - LEVEL_NO_RENDER
/.../a055renderlevel/ispis/1 : pokreni primjer - LEVEL_ACTION_VIEW
/.../a055renderlevel/ispis/2 : pokreni primjer - LEVEL_BEFORE_TEMPLATE
/.../a055renderlevel/ispis/3 : pokreni primjer - LEVEL_LAYOUT
/.../a055renderlevel/ispis/4 : pokreni primjer - LEVEL_AFTER_TEMPLATE
/.../a055renderlevel/ispis/5 : pokreni primjer - LEVEL_MAIN_LAYOUT


SOURCES:
/controllers/A055RenderLevelsController.php -controller
/views/index.phtml -main layout
/views/layouts/a055renderlevels.phtml -controller layout
/views/layouts/template_after.phtml -template after
/views/layouts/template_before.phtml -template before
/views/a051viewtemplates/ispis.phtml -action view



Isključivanje render levela

Za isključivanje render levela koristi se metoda
    //isključivanje jednog levela
    $this->view->disableLevel(View::LEVEL_MAIN_LAYOUT);
    
    ili
    
    //isključivanje više levela
    $view->disableLevel(array(
        View::LEVEL_LAYOUT => true,
        View::LEVEL_MAIN_LAYOUT => true
    ));

U ovom primjeru se pomoću disableLevel() isključuju MAIN LAYOUT i CONTROLLER LAYOUT te ostaju samo TEMPLATE AFTER i TEMPLATE BEFORE. Primjer nema Action View.

/.../a056disablelevel: pokreni primjer - prikazuje sve
/.../a056disablelevel/dis : pokreni primjer - ne prikazuje main i controller layout


SOURCES:
/controllers/A056disableLevelsController.php -controller
/views/index.phtml -main layout
/views/layouts/a056disablelevels.phtml -controller layout
/views/layouts/template_after.phtml -template after
/views/layouts/template_before.phtml -template before



Picking Views

Osim automatskog učitavanja view fajlova može se pomoću metode pick() i uzimati pojedini view fajlovi. U tom slučaju se umjesto automatskog učitavanja Controller Layouta učitava view uzet sa pick(). Ostali layouti (template after, template before i action view) se učitavaju normalno.

Primjer učitava fajl /views/layouts/template_menu.phtml .

/.../a058Pick: pokreni primjer
/.../a058Pick/arr: pokreni primjer


SOURCES:
/controllers/A058PickController.php -controller
/views/index.phtml -main layout
/views/layouts/a058pick.phtml -controller layout
/views/layouts/template_menu.phtml -nekakav menu



Blokiranje prikaza

Ukoliko ne želimo prikaz sadržaja (izlaz) u browser upotrijebit ćemo disable() metodu.

Primjer pokazuje kako blokirati prikaz u browser .

/.../a059disableview: pokreni primjer -ne prikazuje se ništa, nema HTML coda


SOURCES:
/controllers/A058PickController.php -controller



Simple Rendering

Za simple rendering se umjesto Phalcon\Mvc\View koristi Phalcon\Mvc\View\Simple namespace. U njemu je izostavljeno hijerarhijsko učitavanje view fajlove te više sliči na CodeIgniter. Da bi sve radilo mora se prvo registrirati Simple View servis u bootstrap fajlu.
 $di->set('view', function() {
    $view = new Phalcon\Mvc\View\Simple();
    $view->setViewsDir('../app/views/');
    return $view;
  }, true);
Nakon toga mora se upotrijebiti render() metoda na jedan od načina:
//Render 'views-dir/index.phtml'
    echo $this->view->render('index');

//Render 'views-dir/posts/show.phtml'
    echo $this->view->render('posts/show');

//Render 'views-dir/index.phtml' passing variables
    echo $this->view->render('index', array('posts' => Posts::find()));

//Render 'views-dir/posts/show.phtml' passing variables
    echo $this->view->render('posts/show', array('posts' => Posts::find()));

Primjer pokazuje na koji način aktivirati Simple View unutar controllera bez definiranja servisa u bootstrap fajlu.

/.../a060simple: pokreni primjer


SOURCES:
/controllers/A060simpleController.php -controller



Partial Templates

Pomoću metode partial() mogu se ubacivati pojedini fragmenti HTML coda unutar View fajla.
<?php $this->partial('shared/ad_banner'); ?>

Primjer pokazuje na koji način se unutar view fajla može ubaciti neki drugi partial view fajl.

/.../a062partial: pokreni primjer


SOURCES:
/controllers/A062partialController.php -controller
/views/layouts/a062partial.phtml -controller layout
/views/partials/angularjs.phtml -partial template

Primjer pokazuje na koji način se unutar view fajla može ubaciti neki drugi partial view fajl. Unutar fajla /views/partials/angularjs2.phtml definirati $ng koja će se proslijediti u partial fajl /views/partials/.

/.../a063partialvar: pokreni primjer


SOURCES:
/controllers/A063partialvarController.php -controller
/views/layouts/a063partialvar.phtml -controller layout koji šalje $ng
/views/partials/angularjs2.phtml -partial template koji prima $ng



Transfer varijabli iz controlera u view

Da bi se definirala jedna varijabla koju će primiti view koristi se setVar().
    $this->view->setVar('var','Nekakav string koji je došao iz kontrolera!');
Da bi se nizom transferiralo više varijabli potrebna je metoda setVars().
    $this->view->setVars(
        array(
            'main'=>'String iz kontrolera za main layout.',
            'var'=>'String iz kontrolera za controller layout'
        )
    );

Primjer pokazuje proslijeđivanje jedne varijable i niza varijabli u view. U actionu arr() upotrijebljen je niz varijabli. Jednu varijablu niza koristi main layout dok drugu koristi controller layout.

/.../a065transfervar: pokreni primjer -jedna varijabla
/.../a065transfervar/arr: pokreni primjer -niz varijabli


SOURCES:
/controllers/A065transferVarController.php -controller šalje varijable
/views/layouts/a065transfervar.phtml -controller layout koji prima varijable

Naredni primjer pokazuje upotrebu foreach() funkcije ukoliko view uzima niz iz kontrolera. Kako bi primjer bio složeniji za niz smo umjesto niza varijabli definirali niz objekata.

/.../a066transferniz: pokreni primjer -niz objekata


SOURCES:
/controllers/A066transferNizController.php -controller
/views/layouts/a066transferniz.phtml -controller layout



Caching View

U Phalconu postoji keširanje cijelog view-a ili samo pojedinog dijela. Keširanje može biti postavljeno u controlleru ili globalno u bootstrap fajlu. Metode za keširanje su smještene unutar Phalcon/Cache klase.
Postoji nekoliko adaptera za cache: File, Memcached, APC, Mongo i XCache.
bootstarp /public/index.php - Keširanje u file pomoću $di service injecting.
    //Setup File Caching
    $di->set('cache', function(){

        $frontCache = new Phalcon\Cache\Frontend\Data(array(
            'lifetime' => 1000
        ));

        $cache = new Phalcon\Cache\Backend\File($frontCache, array(
            'cacheDir' => '../app/cache/'
        ));
        
        return $cache;
    });

Keširanje web stranice pomoću fajla. Umjesto service injection upotrijebljena initialize() metoda. Cache traje 10 sekundi.

/.../a070cache: pokreni primjer -keširanje podataka iz niza $podaci
/.../a070cache/get: pokreni primjer -prikaz keširanih podataka


SOURCES:
/controllers/A070cacheController.php -controller
/views/layouts/a070cache.phtml -controller layout




| Uvjeti Korištenja | Zaštita Privatnosti | Kontakt |