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
Moteur de template, comment faire un foreach
Moteur de template, comment faire un for
Moteur de template, comment faire un if
Moteur de template, comment afficher une variable
Moteur de template, comment utiliser du php sans generer de balise
Moteur de template, comment utiliser une source dynamique (img)
Moteur de template, comment utiliser les attributs dynamiques
Moteur de template, comment inserer du code php
JQuery, faire un lien innerHtml
JQuery, modifier un element html


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

CODE


 <?php echo $this->oTplCalendrier->show();?>
 



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;?>
 


[en utilisant le moteur de template]
Dans la vue module/article/tpl/liste_article_csv.php.xhtml

CODE


 ID;TITRE
<code mkf:foreach="$articleTab as $article">
{{
$article->id}};{{$article->titre}}
</
code>
 




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;



[en utilisant le moteur de template]
Dans la vue module/mon_module/tpl/ma_vue.php.xhtml

CODE


 //avec parametre (par exemple edition id 2)
<a mkf:href="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)


Moteur de template, comment utiliser faire un foreach

Un moteur de template fait son apparition il y a quelques mois, et vous souhaitez l'utiliser :)

(dans module/votre_module/tpl/lapage.php.xhtml )

CODE


 <li mkf:foreach="$tArticle as $oArticle">
{{
$oArticle->titre}}
</
li>
 



Code Genere

CODE


 <?php foreach($tArticle as $oArticle):?><li>
<?php echo $oArticle->titre?>
</li><?php endforeach;?>
 



Moteur de template, comment utiliser faire un for

Un moteur de template fait son apparition il y a quelques mois, et vous souhaitez l'utiliser :)

(dans module/votre_module/tpl/lapage.php.xhtml )

CODE


 <li mkf:for="$i=0;$i<30;$i++">
{{
$i}}
</
li>
 



Code Genere

CODE


 <?php for($i=0;$i<30;$i++):?><li>
<?php echo $i?>
</li><?php endfor;?>
 



Moteur de template, comment utiliser faire un if

Un if simple

Un moteur de template fait son apparition il y a quelques mois, et vous souhaitez l'utiliser :)

(dans module/votre_module/tpl/lapage.php.xhtml )

CODE


 <div mkf:if="$condition==true">
Texte a afficher
</div>
 



Code Genere

CODE


 <?php if($condition==true):?><div>
Texte a afficher
</div><?php endif;?>
 


Un enchainement de condition

Pour enchainer if et elseif, il faut ajouter un _ (underscore) à la fin pour ne pas ajouter le endif :)

CODE


 <div mkf:if_="$animal=='cat'">
C'est un chat
</div>
<div mkf:elseif_="$animal=='
dog'">
C'
est un chien
</div>
<
div mkf:else="">
Animal inconnu
</div>
 



Code Genere

CODE


 <?php if($animal=='cat'):?><div>
C'est un chat
</div><?php elseif($animal=='dog'):?><div>
C'est un chien
</div><?php else:?><div>
Animal inconnu
</div><?php endif;?>
 




Moteur de template, comment afficher une variable

Un moteur de template fait son apparition il y a quelques mois, et vous souhaitez l'utiliser :)

(dans module/votre_module/tpl/lapage.php.xhtml )

CODE


 {{$mavariable}}
 



Code Genere

CODE


 <?php echo $mavariable?>
 



Moteur de template, comment utiliser du php sans generer de balise

Un moteur de template fait son apparition il y a quelques mois, et vous souhaitez l'utiliser :)

(dans module/votre_module/tpl/lapage.php.xhtml )

CODE


 <code mkf:foreach="$tArticle as $oArticle">
{{
$oArticle->titre}}
</
code>
 



Code Genere

CODE


 <?php foreach($tArticle as $oArticle):?>
<?php 
echo $oArticle->titre?>
<?php 
endforeach;?>
 



Moteur de template, comment utiliser une source dynamique (img)

Un moteur de template fait son apparition il y a quelques mois, et vous souhaitez l'utiliser :)

(dans module/votre_module/tpl/lapage.php.xhtml )

CODE


 <img mkf:src="$image/>
 



Code Genere

CODE


 <img src="<?php echo $image ?>" />
 



ou

(dans module/votre_module/tpl/lapage.php.xhtml )

CODE


 <img mkf:src="'data/img/'.$image/>
 



Code Genere

CODE


 <img src="<?php echo 'data/img/'.$image ?>" />
 




Moteur de template, comment utiliser les attributs dynamiques

Un moteur de template fait son apparition il y a quelques mois, et vous souhaitez l'utiliser :)

Cette fonction permet d'utiliser du php dans n'importe quel balise, il suffit de l'indiquer, suivi de ":" ;)
(dans module/votre_module/tpl/lapage.php.xhtml )

CODE


 <img mkf:attributes="src:'data/img/'.$image/>
 



Code Genere

CODE


 <img src="<?php echo 'data/img/'.$image ?>" />
 



Autre exemple
(dans module/votre_module/tpl/lapage.php.xhtml )

CODE


 <div mkf:attributes="class:$className></div>
 



Code Genere

CODE


 <div class="<?php echo $className ?>" ></div>
 




Moteur de template, comment inserer du code php

Un moteur de template fait son apparition il y a quelques mois, et vous souhaitez l'utiliser :)

Quelque fois il est nécessaire coté vue de mettre un peu de php
Dans ce cas la il faut utiliser l'attribut mkf:language

CODE


 <code mkf:language="php" >
$i 1;
</
code>
 



Code genere

CODE


 <?php $i 1?>
 




JQuery, faire un lien innerHtml

Vous voulez mettre a jour un element html avec le rendu d'une page.
Avec le plugin plugin_jquery vous pouvez creer des fonctions utilisant jquery
Par exemple on peut avoir une liste d'article dont on veut afficher le detail
D'abord on créé la fonction ici showArticle qui prendra un argument

CODE


 <?php
$oFunctionShow
=new plugin_jquery('showArticle',array('param_id'));
$oFunctionShow->addLinkUpdateElement$this->getLink('article::showajax',array('id'=> '$param_id')) ,'rendu') ;
$oFunctionShow->addModifyElement('rendu','show');
echo 
$oFunctionShow->getJs();
?>
 

Code genere

CODE


 <script language="Javascript">function showArticle(param_id){
$.
ajax({
url'index.php?:nav=article::showajax&id='+param_id+'',
success: function(response) {
// update status element
$('#rendu').html(response);
}
});
$(
'#rendu').show();}</script>
 

Ensuite on peut l'appeler facilement dans la liste d'article

CODE


 <?php foreach($tArticle as $oArticle):?>
<a href="#" onclick="showArticle(<?php echo $oArticle->id?>)"><?php echo $oArticle->titre?></a>
<?php endforeach;?>
 

Sans oublier l'element html qui sera mis à jour

CODE


 <div id="rendu"></div>
 



note: pour utiliser la librairie jQuery il vous faut inclure celle-ci dans votre layout
en ajoutant (en adaptant le numero de version)
Librairie a recuperer sur le site de jQuery http://docs.jquery.com/Downloading_jQuery#Current_Release

CODE


 <script src="site/js/jquery-1.4.4.min.js" type="text/javascript"></script>
 



JQuery, modifier un element html

Vous voulez modifier un element html via la librairie jQuery

CODE


 <?php
$oFunctionShow
=new plugin_jquery('afficher');
$oFunctionShow->addModifyElement('rendu','show');
echo 
$oFunctionShow->getJs();
?>
 

Code généré

CODE


 <script language="Javascript">function affiche(){
$(
'#rendu').show();}</script>
 


note: pour utiliser la librairie jQuery il vous faut inclure celle-ci dans votre layout
en ajoutant (en adaptant le numero de version)
Librairie a recuperer sur le site de jQuery http://docs.jquery.com/Downloading_jQuery#Current_Release

CODE


 <script src="site/js/jquery-1.4.4.min.js" type="text/javascript"></script>