Comment Kon Fait pour ?

Livrer une application en production
Recuperer une variable GET,POST
Recuperer l'ensemble des parametres
Gerer le cache
Passer une variable de l'action à la vue
Charger un module a un emplacement template
Executer un traitement pour l'ensemble d'un module
Ajouter un plugin
Appeler / Utiliser un plugin
Un export excel (csv pour etre exact)
Recuperer le nom du module
Recuperer le nom de l'action
Recuperer la variable de navigation
Faire un lien vers l'action liste du module article
Comment passer un parametre au layout
Comment utiliser l'authentificaiton


Livrer une application en production

Le builder genere les applications dans son repertoire data/genere/
Il suffit de copier la librairie (lib/framework) et le repertoire de votre application sur le serveur, pas besoin de "geler" ou autre, l'application est autonome.
Il faut ensuite lier l'application a la librairie (modifier main.php et conf/site.ini.php variable lib)


Recuperer une variable GET,POST

_root::getParam('mavariable')


Recuperer l'ensemble des parametres

_root::getParams()


Gerer le cache

Vous avez deux solutions:
1. Soit la totalité de la page est mise en cache,
ceci en indiquant enabled=1 dans conf/site.ini.php
Vous pouvez définir le temps de validité du cache avec lifetime= (0*3600)
note: dans le cas ou l'ensemble du site doit etre mis en cache sauf une ou deux pages
vous pouvez activer le cache et ajouter une methode before_lapagehorscache dans laquelle vous annulez le cache

CODE


 module_article extends abstract_module{

//cette methode est executée pour tout le module avant de verifier le cache
public function before(){
//il suffit donc de forcer la valeur a 0
_root::setConfigVar('cache.enabled',0);
}

//cette methode aussi est executée juste pour l'action pagehorscache avant de verifier le cache
public function before_pagehorscache(){
//il suffit donc de forcer la valeur a 0
_root::setConfigVar('cache.enabled',0);
}
public function 
_pagehorscache(){
(...)
//votre page hors cache
}

}
 




2. Soit une partie (un couple module/action)
Pour cela il faut utiliser _root::getCache(), instance unique de la class _cache
Le cache est géré par vue (_tpl) vous verifier qu'il existe un cache de cette vue,
si oui, vous verifier si il est recent (date de modif superieur a N minutes), vous utilisez le cache,
si non, vous faites votre traitement et n'oubliez pas d'enregistrer la vue dans le cache a la fin

CODE


 public function _list(){
//y a t il un cache actif de moins d 1 minute
if( _root::getCache()->isCached'article_list',1) == true ){
$oTpl=_root::getCache()->getCached'article_list');
}else{
$oModelArticle=new model_article;
$tArticle=$oModelArticle->findAll();

$oTpl=new _tpl('article::list');
$oTpl->tArticle=$tArticle;
$oTpl->tColumn=$oArticleModel->getListColumn();

_root::getCache()->setCache('article_list',$oTpl);
}

$this->oLayout->add('main',$oTpl);
}
 



note vous pouvez demander a toujours utiliser un cache, pour les parties statiques (exple: un menu)
pour cela ne renseignez pas de limite

CODE


 public function _list(){
//y a t il un cache
if( _root::getCache()->isCached'menu') == true ){
$oTpl=_root::getCache()->getCached'menu');
}else{

$tLink=array(
'Accueil' => 'pages::accueil',
'News' => 'pages::news',
'Présentation' => 'pages::presentation',
'Librairie' => 'pages::librairie',
'L ORM' => 'pages::orm',
'Tutoriaux' => 'pages::tutoriaux',
'CommentKonFait ?' => 'pages::faq',
'Builder' => 'pages::builder',
);

$oTpl=new _tpl('menu::index');
$oTpl->tLink=$tLink;

_root::getCache()->setCache('menu',$oTpl);
}
return 
$oTpl;
}
 


note: si vous modifier le menu, il vous suffit de supprimer le fichier data/cache/menu.cache pour qu'il regenere un cache

Attention dans le cas de ce menu, si on laisse ainsi, l'onglet accueil sera toujours selectionné: mis en cache la premiere fois
Lors qu'on va appeler la page news, il affichera le cache du menu (onglet accueil selectionné) :(
Pour eviter cela, il faut ajouter un id permettant de creer un cache pour toutes les variantes du menu (une par onglet)
En faisant ainsi par exemple

CODE


 public function _index(){
$sMenuId='menu_'._root::getModule().'_'._root::getAction();
//y a t il un cache
if( _root::getCache()->isCached$sMenuId ) == true ){
$oTpl=_root::getCache()->getCached$sMenuId );
}else{

$tLink=array(
'Accueil' => 'pages::accueil',
'News' => 'pages::news',
'Présentation' => 'pages::presentation',
'Librairie' => 'pages::librairie',
'L ORM' => 'pages::orm',
'Tutoriaux' => 'pages::tutoriaux',
'CommentKonFait ?' => 'pages::faq',
'Builder' => 'pages::builder',
);

$oTpl=new _tpl('menu::index');
$oTpl->tLink=$tLink;

_root::getCache()->setCache$sMenuId ,$oTpl);
}
return 
$oTpl;
}
 




Passer une variable de l'action à la vue

Par exemple, passer l'objet article de l'action à la vue show
module/article/main.php

CODE


 $oTpl=new _tpl('article::show');
//on "assigne" la variable $article au template sous le nom "monArticle"
$oTpl->monArticle=$article;
 



Coté vue
module/article/tpl/show.php

CODE


 echo $this->monArticle->id;
echo 
$this->monArticle->titre;
 




Gérer la pagination de son site

Dans votre fichier module/article/action.php

CODE


 /*Pagination-------------*/
$total=getInstance('Article')->count();

$pagination=new PAGINATION();
$pagination->setRoot('article::list'); //definit l'adresse racine des liens de pagination root&page=N
$pagination->setLimite(3); //limite d'enregistrement par page
$pagination->setTotal$total );
$pagination->setVar('nb'); //variable GET utilisé pour gerer la pagination
//mis dans la vue $pagination->setLibelle('Page'); //libelle utilise pour les liens de pagination, exple: Page 1, Page 2...

$articleTab=getInstance('Article')->findLimitnull,$pagination->getLimit() );

$tpl=getInstanceTpl();
$tpl->assign('pagination',$pagination); //on envoi a la vue l'objet pagination, pour afficher les liens de pagination
/*-------------Pagination*/

(...)
 



Dans votre fichier vue module/article/tpl/list.php

CODE


 (...)

/*Pagination---------------------------------------*/
$pagination->setLibelle('Page'); //libelle utilise pour les liens, exple: page 1, page 2...
echo $pagination->getList('pagination','selected');
/*---------------------------------------Pagination*/
 




Charger un module a un emplacement template

Vous pouvez avoir besoin de charger un module a un endroit donnée
Pour cela vous devez inclure ce module, par exemple le calendrier a "emplacement" par exemple "calendrier"

CODE


 $oTpl=new _tpl('module::action');
$tpl->oTplCalendrier=module_calendrier::getInstance()->getShow();
 


et a partir de la, dans module/tpl/action.php
$codeLibre:$
<?php echo $this->oTplCalendrier->show();?>
$:codeLibre$


Executer un traitement pour l'ensemble d'un module

Pour cela, la methode before() a fait son apparition, cette methode est toujours executée a chaque appel d'action (via l'url) d'un module
On l'utilise lors de la generation de crud pour initier en permanence le menu

CODE


 function before(){
$this->oLayout=new _layout('template1');

$this->oLayout->addModule('menu','menu::index');

//de cette facon, dans template1 on affiche le menu avec un echo $this->load('menu')
}
 




Ajouter un plugin

Rien de plus simple, creer un fichier plugin_votrePlugin.php dans le repertoire plugin/
qui contiendra

CODE


 Class plugin_votrePlugin{
//le contenu de votre plugin
}
 





Un export excel (csv pour etre exact)

Dans votre fichier action par exemple module/article/main.php

CODE


 (...)

$articleTab=model_article::getInstance()->findAll();

$oTpl=new _tpl('article::liste_article_csv');
$oTpl->articleTab=$articleTab;
//$this->oLayout ayant ete initialisée dans la methode before
$this->oLayout->add('main',$oTpl);
$this->oLayout->setLayout('download');
$this->oLayout->file='fichier_article_list.csv';

 



Dans la vue module/article/tpl/liste_article_csv.php

CODE


 ID;TITRE
<?php foreach($articleTab as $article):?>
<?php 
echo $article->id ?>;<?php echo $article->titre ?>
<?php 
endforeach;?>
 



Recuperer le nom du module

Ce framework utilise une variable contenant le couple module::action
Pour recuperer juste le nom du module

CODE


 echo _root::getModule();
 




Recuperer le nom de l'action

Ce framework utilise une variable contenant le couple module::action
Pour recuperer juste le nom de l'action

CODE


 echo _root::getAction();
 




Recuperer la variable de navigation

Ce framework utilise une variable contenant le couple module::action
Pour recuperer la variable de navigation (article::list)

CODE


 echo _root::getParamNav();
 




Faire un lien vers l'action liste du module article

Pour creer un lien vers un couple module / action
Ecrivez un

CODE


 //sans parametre
<a href="<?php echo _root::getLink('article::liste');?>">libelle</a>

//avec parametre (par exemple edition id 2)
<a href="<?php echo _root::getLink('article::edit',array('id'=>2));?>">edition de l'article 2</a>
&nbp;



[UPDATE 27nov09]
Ajout possiblité de generer un lien avec un tableau

CODE


 //avec parametre (par exemple edition id 2)
<a href="<?php echo _root::getLink(array('article::edit','id'=>2));?>">edition de l'article 2</a>
&nbp;





Comment passer un parametre au layout

Aussi simplement qu'avec le _tpl

CODE


 class module_article extends abstract_module{

public function 
before(){
$this->oLayout=new _layout('template1');
(...)
}

public function 
_show(){
$this->oLayout->title="Titre de l'article";
}

}
 


Et dans le layout, comme dans une vue
site/layout/template1.php

CODE


 <html>
<
head>
<
title><?php echo $this->title ?></title>
</head>
(...)
</html> 



Comment utiliser l'authentificaiton

Il existe plusieurs solutions pour gerer l'authentification
Vous pouvez mettre:
1. Tout privé
2. Tout privé sauf certaines parties
3. Tout public sauf certains zones privées

Vous pouvez gérer l'authenfification globale avec le parametre
dans conf/site.ini.php

CODE


 [auth]
;
note : >= php5.2 dans le php.ini
;session.cookie_httponly=1
;session.use_cookies 1
;session.use_only_cookies 1
enabled
=0
&nbp;



Vous pouvez gerer l'authenfication ciblée soit par module

CODE


 class module_exemple extends abstract_module{

public function 
before(){
//ici on force l'authentification sur l'ensemble du module
_root::setConfigVar('auth.enabled',1);
}

}
 



ou par couple module/action

CODE


 class module_exemple extends abstract_module{

(...)

public function 
before_list(){
//ici on force l'authentification sur le couple exemple::list
_root::setConfigVar('auth.enabled',1);
}
public function 
_list(){
//page privee
}
 



note: lorsqu'on utilise l'authentification du mkframework il faut egalement parametrer la partie [auth]
dans conf/site.ini.php

CODE


 [auth]
;
note : >= php5.2 dans le php.ini
;session.cookie_httponly=1
;session.use_cookies 1
;session.use_only_cookies 1
enabled
=0
class=plugin_auth
module
=auth::login
session
.timeout.enabled=1
session
.timeout.lifetime=(60*1)
 



Comme vous pouvez le voir ici est defini le couple a appeler pour l'authentification, ici auth::login (variable module)
La classe a utiliser pour verifier l'authentification (variable class)
Le framework appelera la methode isConnected() de la classe (par defaut plugin_auth)