Comment Kon Fait pour ?
Livrer une application en productionRecuperer 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;
}
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 showmodule/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.phpCODE
/*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')->findLimit( null,$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éePour 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();
$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 moduleOn 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.phpCODE
(...)
$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::actionPour 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::actionPour 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::actionPour 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 / actionEcrivez 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 _tplCODE
class module_article extends abstract_module{
public function before(){
$this->oLayout=new _layout('template1');
(...)
}
public function _show(){
$this->oLayout->title="Titre de l'article";
}
}
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'authentificationVous 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)