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
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;
}
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();
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 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;?>
[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::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;
[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 _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)
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
<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>
CODE
<?php foreach($tArticle as $oArticle):?>
<a href="#" onclick="showArticle(<?php echo $oArticle->id?>)"><?php echo $oArticle->titre?></a>
<?php endforeach;?>
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 jQueryCODE
<?php
$oFunctionShow=new plugin_jquery('afficher');
$oFunctionShow->addModifyElement('rendu','show');
echo $oFunctionShow->getJs();
?>
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>