News
2008/10/22 V3_28_0_94 reglage d'un petit bug sur la generation crud
Sur un environnement gerant le case sensitive (linux...) le resultat de la generation CRUD ne fonctionnait pas sur l'action new
En effet alors que les autres actions utilisaient le nom de la table avec une majuscule, l'action new utilisait une version minuscule
Ceci est desormais corrigé
Le code incriminé
dans module/table/action.php
Code
<?php
function _new(){
$table=new table;
//(...)
?>
remplacée par
Code
<?php
function _new(){
$table=new Table;
//(...)
?>
2008/10/14 V3_28_0 amelioration sgbd xml + verification urlrewriting lors d'une creation d'application
Le sgbd xml maison gere desormais un id max, permettant d'ameliorer la gestion des enregistrements
Si vous avez des enregistrements 1,2,3,4, desormais si vous supprimez le 2, le prochain créé sera le 5
Pour l'url rewriting, lors du formulaire de creation d'une application, on indique en rouge en dessous si l'url rewriting est géré
si il ne l'est pas, le .htaccess ne sera pas créé lors de la generation du nouvel environnement
2008/10/09 V3_27_0 gestion des magic quotes si active + nouveau plugin en cours
Par defaut je preconise de desactiver les magic quotes, mais desormais le cas est géré si on a pas la main (hebergement mutualise par exemple)
De plus un nouveau plugin commence a etre developpé : le plugin ftp
2008/08/07 V3_26_0 amelioration petit a petit de la documentation
Petit a petit je commente les methodes public du framework (inc/ plugin/)
(permettant notamment d'utiliser phpdoc and co :)
2008/07/31 V3_26_0 petite optimisation du framework + homogeneisation sgbd/xml
Une petite optimisation a été réalisée sur l'orm limitant les acces a certains fichiers
De plus desormais le passage d'un stockage xml (mini base xml) a une base de donnée vient d'etre simplifiée
Les deux utilise desormais la classe ORM, seul le parametrage (conf/connexion.php) indique le type de stockage comme pour les autres sgbd
Avant :
Code
<?php
Class article extends ORMXML{
//Configuration-------------------------------------------
protected $idTab=array('id');
protected $tableName='article';
protected $connexion='xml';
protected $className=__CLASS__;
//-------------------------------------------Configuration
}
?>
Maintenant
Code
<?php
Class article extends ORM{
//Configuration-------------------------------------------
protected $idTab=array('id');
protected $tableName='article';
protected $connexion='xml';
protected $className=__CLASS__;
//-------------------------------------------Configuration
}
?>
fichier connexion.php
Code
<?php
$tabConnexion=array(
(...)
'xml' => array(
'pdo' => false,
'dsn' => '',
'sgbd' => 'xml',
'host' => '',
'bdd' => 'data/xml/base/',
'user' => '',
'pass' => '',
'formatDate' => '$Y-$m-$d',
'formatDateTime' => '$Y-$m-$d $h:$i:$s',
),
(...)
?>
2008/07/30 V3_25_0 amelioration Base Xml
Une amelioration du mini sgbd xml
On peut desormais utiliser quelques criteres: = != >= <= > <
Par contre on ne peut utiliser soit AND soit OR pas les deux en meme temps
Ces criteres sont bien sur cumulable avec la clause ORDER BY
On peut donc faire getInstance('Contenu')->find('cat_id=2 OR cat_id=3 ORDER BY titre DESC')
2008/07/08 V3_24_0 ajout Base Xml, amelioration url rewriting, allegement
Au menu de cette mise a jour plusieurs choses
1. La possibilité désormais d'utiliser une "base de donnée xml" locale, toujours via le builder, un nouveau lien permet de creer une base de donnée
elle se compose simplement d'un repertoire, contenant au minimum un fichier xml 'structure.xml' utilisé plus tard par le builder pour generer le crud :)
note: c'est une base de donnée simplifié on peut lister, trier via un seul champ(order by champ), faire des limites mais ca s'arrete la, pas recherche ou autre requete complexe
note2: on peut neanmoins utiliser les joitures de l'orm qui fonctionne naturellement
2. Amelioration de l'url rewriting:
Un nouveau fichier de configuration fait son apparition 'conf/urlrewriting.php' il permet de mettre en place des liens plus sympas
sa structure est la suivante : 'articles' => 'article::show'
ou pour l'utilisation de variable: 'articleDetail_:id:' => 'article::show' (pas besoin de preciser id, sa valeur sera transmise au tableau $_GET)
3. Un allegement assez consequent a été réalisé sur le framework
2008/06/17 V3_23_0 securisation xss,xsrf
Ajout d'une securistion xss sur la fonction getVar
Ainsi que la creation d'un plugin xss qui est ici utilisé pour corrigé les failles xsrf via l'utilisation de jeton
note: le crud du nouveau builder est généré avec l'utilisation de ce nouveau plugin ;)
Un nouveau fichier de configuration conf/securite.php permet d'activer/desactiver ces deux nouveaux parametres.
Plus d'infos sur XSS
Plus d'infos sur XSRF
2008/06/12 V3_22_0_56 ajout autre systeme de jointure via les hasOne/Many et recupClasseEtrangere
On a desormais un autre moyen de faire des jointures sur le framework
Prenons pour exemple deux tables: client et commande
On veut que sur nos enregistrements commande on puisse avoir les informations de notre client
Dans la classe Commande.php dans la methode init()
Code
<?php
Class Commande extends ORM{
//(..)
//Jointure------------------------------------------------
public function init(){
//une commande a un client dont id est egal a client_id
$this->hasOne('Client')->dont('id')->egal('client_id');
}
//------------------------------------------------Jointure
?>
Dans notre vue, on fera ainsi pour afficher le nom du client:
Code
<?php
foreach($commandeTab as $commande){
echo $commande->recupClient()->nom;
}
?>
On veut egalement que d'un client on ai la liste de ses commandes
Dans la classe Client.php dans la methode init()
Code
<?php
Class Client extends ORM{
//(..)
//Jointure------------------------------------------------
public function init(){
//un client a plusieurs commande dont client_id est egal a id
$this->hasMany('Commande')->dont('client_id')->egal('id');
}
//------------------------------------------------Jointure
?>
Dans notre vue, on fera ainsi pour afficher la liste de ses commandes:
Code
<?php
//on a recupere au prealable client par exemple $client=getInstance('Client')->findOne(1);
foreach($client->recupCommande() as $commande){
echo $commande->id;
}
?>
2008/06/10 v3_21_0 mise a jour orm + builder, ajout pdo
On peut desormais utiliser le driver pdo pour se connecter, ceci a permis de developper de nouveaux drivers pour se connecter a d'autres sgbd.
Oracle, Sql server (microsoft) sont desormais disponible comme sgbd via l'ORM maison en Beta :)
L'ergonomie de generation du CRUD a été également améliorée.
2008/05/29 v3_20_4 mise a jour builder
Le builder a été mis a jour, il permet de générer plus facilement le CRUD, on peut désormais parametrer le libellé des champs ainsi que le type de champ de formulaire à utiliser.
Il est également plus simple de générer un CRUD pour des tables liées.
Par exemple on a une table article liée à une table auteur via la relation article.auteur_id=auteur.id.
On genere la couche modèle, ensuite on genere la methode getSelect (via le buider), on insere les lignes de codes générées dans le fichier de la classe auteur (bdd/auteur.php)
Au moment de generer le CRUD, en face du champ auteur_id, il faut selectionner "select table auteur" à la place de input
Le builder va generer un select qui s'appuiera sur le tableau renvoyé par la methode getSelect de la table auteur
Et voila, dans notre crud on aura en face du champ auteur_id un menu deroulant listant les auteurs ;)
2008/05/27 v3_20_3 mise a jour projet vierge : mise a jour plugin_rss
En testant le flux rss dans firefox je me suis rendu compte qu'il était corrompu, apres debugage via le feed validator du w3c j'ai corrigé le plugin
La date passé au plugin rss doit etre au format Y-m-d
Le projet vierge a également été mis a jour.
2008/05/27 v3_20_2 changement style + correction bugs sur projet vierge + ajout langue par defaut
J'ai revu le style graphique du projet vierge (sera bientot mis à jour dans les screenshots).
Corrigé quelques bugs sur les pages d'exemples.
Ajouté un fichier de conf conf/langue.php qui permet de configurer la langue par defaut :le calendrier, mkdate... s'appuyant sur i18n il leur fallait bien une langue par defaut pour savoir quel package de langue utiliser.
2008/05/23 v3_20 ajout de trois plugins sur les sources
J'ai ajouté sur les sources 3 plugins sur les sources avec comme d'habitude une page d'exemple pour chaque
Premier plugin: plugin_gestionuser
Il permet de gérer les droits, vous ajoutez une methode coté modele (dans votre fichier bdd/user.php par exemple)
Dans cette methode vous créé une instance de ce plugin, vous assignez les droits et vous retournez l'objet
Comme cela de n'importe ou, avec l'instance de votre user vous pouvez demander cet objet pour savoir si le user est authorisé à...
Les deux autres plugins font partie d'une nouvelle fonctionnalité: gérer un webservice à la sauce mkframework
Trouvant que l'installation d'un webservice "officiel" était trop lourd (fichier wsdl, parametrage en dur des fonctions disponibles...)
J'ai décidé de créer un autre systeme qui peut etre securisé par mot de passe et/ou ip
Ce "webservice maison" je l'ai testé en l'appelant en web (du mkframework) mais aussi via un script perl et ca fonctionne tres bien
Il suffit de faire un appel http POST a la page qui fait office de serveur, lui envoyant une variable post (n'importe laquelle) contenant l'appel en xml tres simple.
Un exemple est present dans les nouvelles sources ;)
2008/05/20 v3_19 ajout classe MKPANIER + integration exemple dans projet vierge
Une nouvelle classe pour gerer son panier le plus simplement possible.
On créé une instance recuperant si existant ce qu'il y a en session, elle se sauvegarde a chaque modification en session.
On manipule ainsi son panier comme un objet, en lui ajoutant / supprimant des lignes , modifiant les quantités...
On a plus qu'a boucler dessus pour afficher son contenu
Note: un exemple d'utilisation est intégré au projet vierge
2008/05/19 v3_18 amelioration objet CHECK (validateur) + maj Sources avec exemple CHECK
Amelioration de l'objet CHECK qui permet de verifier un ensemble d'element (utilise pour verifier les formulaires)
Ainsi que l'ajout d'un exemple dans le projet vierge
2008/05/19 v3_17 correction bug + projet vierge
Correction d'un bug lié a la verification is_writable() dans la librairie file du builder et des sources
Mise a jour du projet vierge (mise a jour de la partie backoffice generable sur demande)
2008/05/19 v3_16 correction bug + builder + projet vierge + fichier de conf
La migration precedente incluait un changement lors de l'appel, mais aussi un renommage de la classe TPL en MKTPL, il y avait encore des appels a TPL dans les sources
Ils ont desormais tous été corrigé.
Dans le builder, le generateur de code a été un peu amélioré
Le projet vierge généré lors de la creation d'un nouveau site a été mis a jour.
Un nouveau fichier de configuration a été créé: conf/encodage.php qui permet d'indiquer l'encodage des fichiers de scripts (ISO-88-59-1 par defaut)
utilisé par défaut pour HTML::encode()
2008/05/16 v3_15 Changement important getInstance('TPL') > getInstanceTpl()
TPL, etait la seule librairie necessitant d'etre en singleton, c'est a dire d'avoir qu'une seule instance de l'objet dans l'application
Et utilisant egalement getInstance() pour l'ORM, on pouvait confondre getInstance('TPL') en lisant entre une table ou une librairie
Desormais on utilise getInstanceTpl() pour le template general et getInstance() pour les tables orm, voir les modules et plugin qui utilisent la convention plugin_ et module_
Avant
Code
<?php
$tab=getInstance('article')->find();
$tpl=getInstance('TPL');
$tpl->assign('articleTab',$tab);
$tpl->display('list');
$tpl->send('template1');
?>
Après
Code
<?php
$tab=getInstance('article')->find();
$tpl=getInstanceTpl();
$tpl->assign('articleTab',$tab);
$tpl->display('list');
$tpl->send('template1');
?>
2008/05/16 v3_14 Amelioration: support du rss
Un nouveau plugin le plugin_rss fait son aparition, il est inclue dans les projets vierge généré un exemple de son implementation
Documentation de plugin_rss
2008/05/16 v3_12 Mise a jour, amelioration du builder + amelioration variable de navigation
Pour le builder, la generation de jointure est plus flexible elle permet de generer des recuperations d'objet ou de tableau d'objet
Pour la variable de navigation: si vous appelez un module sans son action, par defaut il appelera sa methode_index()
2008/05/15 v3_11 Mise a jour, correction du builder + evolution ORM: cache variable
Je viens de corrigé une erreur dans le builder provoqué par la mise a jour precedente (pour doctrine)
Plus j'ai ajouté un cache temporaire a l'orm permettant dans le cas ou vous faites deux fois une jointure sur un meme enregistrement de ne faire qu'une seule requete
Pour info le cache est stockée dans l'objet ORM de la table
Par exemple vous recuperez le tableau des articles
Code
<?php
$tab=getInstance('article')->find();
?>
Le cache est stocké dans "article", getInstance() retournant un singleton de la classe article
D'ou l'ajout de getNewInstance() qui retoune un nouvel objet tout propre tout vide (sans cache)
Car si vous faites
Code
<?php
$article=getInstance('article')->findOne(1);
$article->titre='titreModifie';
$article->save();
//ici si vous faites un getInstance('article')->findOne(1) vous recupérez l'article du cache
//article du cache
$article=getInstance('article')->findOne(1);
//article modifié (pas celui du cache)
$article=getNewInstance('article')->findOne(1);
?>
C'est le seul cas ou vous devriez avoir besoin d'utiliser getNewInstance() avec l'ORM
2008/05/14 v3_10 Mise a jour, correction du builder pour utilisation de la derniere version de phpDoctrine
J'ai mis a jour la version de doctrine presente dans le framework et mis a jour le builder pour sa compatibilité
Pour info, utilisation de phpDoctrine 0.11.0-RC2
2008/05/13 v3_9 Mise a jour, correction de quelques bugs + ajout du D du CRUD (Delete)
Il etait temps, j'avais un peu oublié d'ajouter l'action supprimer sur le generateur de crud, c'est fait :)
Il y avait également un bug sur le builder pour modifier la couche modèle.
2008/05/07 v3_5 Mise a jour, correction de quelques bugs
Je travaille actuellement avec sur une application,
et en profite pour bien tester le framework et le mettre a jour quand il le faut.
Par exemple j'ai ajouté la classe MKDATE, qui permet de gerer facilement ses dates
Code
<?php
$date=new MKDATE(date('2008-12-25');
$date->addJour(1);
echo $date->getFormat('$d $m $y');
?>
affichera 26 dec 08
Documentation de MKDATE
2008/04/01 Nouvelle version, nouveau site
Nouveau site mkFramework pour la version 3 du framework.
Un framework encore plus objet qu'auparavant, plus souple qu'avant.
Une documentation refaite de A à Z
Présentation
1.Un framework, kesako ?
C'est tout un environnement de travail :
Il comprend :
- une librairie bien fournie pour vous économiser du code et du temps
- une structure de développement déjà établie
- une construction flexible, évolutive et réutilisable (modules,plugins)
2.Un framework pourquoi faire ?
La première réponse est : pour vous faciliter la vie bien sûr :)
- en mettant à votre disposition une librairie pour améliorer votre confort de programmation
- en améliorant votre rapidité de développement : (vous ne codez plus de zéro, économie de code grâce aux librairies)
- en cadrant et homogénéisant votre travail (structure oblige)
- en organisant votre application: chaque fichier a sa place
3.Le menu siYouPlait ^_^
Inclut dans le coffret :
- architecture MVC séparation Modèle, Vue Controller
- gestion intégrée du cache
- gestion intégrée de la sécurisation des pages via un accès protégé par login/mot de passe (module secure)
- structure évolutive avec deux types : modules et plugin
- des objets vous évitant de coder l'HTML : HTML, FORM et TABLEAU
- des librairies vous facilitant: le traitement de fichier, l'envoi de mail, la pagination, l'ajax...
- gratos : un Module menu administrable via le MkframeworkBuilder
- gratos : un second Module Calendrier (non administrable celui-ci en web) (faisant appel a un plugin)
- gratos : un template download permettant de forcer le téléchargement de ladite page (export excel...)
- gratos : un module secure permettant de sécuriser une page via un accès restreint derrière login/pass
- gratos : un plugin gérant le rss déjà intégré lors de la création de votre première application ;)
4.Des objets/librairies bien pratiques ;)
- HTML : vous retourne le code HTML du lien au paragraphe en passant par l'image
- FORM : idem qu'HTML mais pour les composants de formulaires
- TABLEAU : idem qu'HTML pour construire des tableaux HTML en quelques lignes
- MKDATE : ou comment manipuler, calculer ou récupérer une date facilement
- MAIL : un envoi de mail simplifié
- CSV : pour exporter vers excel, se base sur une structure très proche de TABLEAU
- XML : pour exporter, ou permettre la communication (webservice...)
- FILE : pour lister des répertoires, lire, écrire facilement dans des fichiers
- PANIER : pour gérer son panier facilement (ajout/suppression de ligne, récupération/suppression du panier...)
- I18N : gestion de la localisation de l'interface via des fichiers situés dans data/i18n/fr.php, en.php...
- AJAX : permet de faire des appels simples en ajax (innerHtml et récupération d'xml)
- VUE : pour vous simplifier l'écriture de vos pages vues (alternance de couleur, affichage conditionnel...)
5.C'est bien beau et la prise en main ?
Pour utiliser d'autres frameworks, j'ai voulu viser la facilité de prise en main
Pour cela :
- Une doc vous présentant l'ensemble des objets et leurs fonctions
- Des tutoriaux pour vous faciliter l'apprentissage
- Des exemples pour expliquer de façon concrète
- Une rubrique commentKonFait pour répondre aux questions que vous vous poser
- Une application vierge créée contient deja un lot de pages d'exemple facilitant l'apprentissage (on ne part pas de zéro)
6.C'est tout ?
Mais non ce n'est pas tout, pour vous faciliter l'adoption de ce framework :
Je vous ai développé un chti builder, le MkFrameworkBuilder (clin d'oeil au commandeEnLigneOphobe)
Il vous permettra :
- De créer un environnement vierge (avec quelque pages d'exemple)
- De gérer certains points de configuration (accès à la base de données, politique de cache, ajout de modules)
- De générer la couche modèle de votre application
- De générer le CRUD pour vos tables
Et tout ca en deux trois clic, pas de ligne de commande à saisir ;)