FoxMaSk'Z h0m3 - Dev-Gamer World


jeudi, janvier 3 2008

CakePHP (1.2.0.6311) sorti tout chaud du four

En cette période d'épiphany, CakePHP tire (non pas les rois) une version beta 1.2.0.6311 de son zoli :D framework MVC .

Au menu plein d'améliorations et corrections de bugs ( dont voici la liste complète ) dont une amélioration qui me fait plaisir concernant la gestions des plugins et des controllers ;-)

Pour ceux qui douterait de l'utilité/fiabilité de ce framework, sachez que celui ci est "juste" utilisé par le petit site Mozilla Addons ;)

mercredi, décembre 26 2007

CakePHP - PunBB - statistique du forum

Quelques conceptes de bases.

Pour pouvoir afficher des info réutilisables dans ses Views CakePHP fourni des "Helpers" et des Elements Le Helper étend les possibilités des Vues et les Elements sont des petits bouts de code php/html qui peuvent étre affichés plusieurs fois dans la même page.

Ainsi donc le "bloc de stats" pourrait très bien être affiché dans plusieurs pages pour chacun des plugins news/articles/lexique etc..

Donc nous allons faire un element "app/views/elements/stats.ctp" comme suit :

<?php
$bloc->startBloc(__('Forums statistics',true), 'stats');				
				
$pt_total_users = $this->requestAction('users/nbUsers');
$pt_last_user 	= $this->requestAction('users/lastUser');	
$pt_total_posts = $this->requestAction('forum/stats');
?>
<ul>
<li><?php echo __('Total numbers of members:',true).' '.$pt_total_users['0']['0']['total_user']?></li>
<li><?php echo __('Newest resgistered user:',true).' <a href="'.pt_forum_url.'profile.php?id='.$pt_last_user['0']['User']['id'].'">'.$pt_last_user['0']['User']['username']?></a></li>
<li><?php echo __('Total numbers of topics:',true).' '.$pt_total_posts['0']['0']['total_topics']?></li>
<li><?php echo __('Total numbers of posts:',true).' '.$pt_total_posts['0']['0']['total_posts']?></li>
</ul>
<?php
$bloc->endBloc();
?>

comment tout cela fonctionne :

dans le script app/app_controller.php de notre applications nous faisons ceci :

class AppController extends Controller {
public $helpers = array ('Bloc','Html');
...
}

et le helper bloc contient ceci (app/views/helpers/bloc.php):

<?php
class BlocHelper extends Helper {
 	 	
 	function startBloc($title='',$id='') {	
		static $i;	
		$id = $id != '' ? $id : $i;		
		$res = '';
		$res .= "\t".'<div class="block" id="'.$id.'">'."\n";		
		if ($title!='')
			$res .= "\t".'<h2><span>'.$title.'</span></h2>'."\n";		
		$res .= 
		"\t\t".'<div class="box" id="box_'.$id.'">'."\n";
		
		if (PT_DEFAULT_THEME == 'punbb') 
			$res .= "\t\t\t".'<div class="inbox">'."\n";
		
		echo $res;
		$i++;
	}
	function endBloc() {
 		if (PT_DEFAULT_THEME == 'punbb') {		
			echo 
			"\t\t\t".'</div>'."\n".
			"\t\t".'</div>'."\n".
			"\t".'</div>';
 		} 
 		else {
 			echo 
			"\t\t".'</div>'."\n".
			"\t".'</div>'; 			
 		}
	} 
 	
}
?>

Ainsi paré : le controlleur principal dispose d'un helper bloc
donc la vue peut utiliser $bloc->endBloc et ->startBloc

ceci est une premiere etape :
suit ensuite dans notre element les 3 lignes :


$pt_total_users = $this->requestAction('users/nbUsers');
$pt_last_user 	= $this->requestAction('users/lastUser');	
$pt_total_posts = $this->requestAction('forum/stats');

ces 3 lignes effectuent des "requestAction" lequelles permettent d'accèder aux methodes nbUser et lastUser de la class UsersController et à la methode stats de la class ForumControllers, en voici le détail :


<?php
class UsersController extends AppController {
	public $name 	= 'Users';
[...]
	public function lastUser () {		
		$strQuery =  'SELECT id, username FROM '.DB_PREFIX.'users as User' .
						' ORDER BY registered DESC LIMIT 1';
		$resultset = $this->User->query($strQuery);
		return $resultset; 									
	}	
	public function nbUsers () {
		
		$strQuery = 'SELECT COUNT(id)-1 AS total_user FROM '.DB_PREFIX.'users AS User ';		  
		$resultset = $this->User->query($strQuery);
		return $resultset; 	
     }
[...]
}

ceci nous permet donc d'avoir facilement les information de stats de notre forum de manière utlra simplissime dans un bloc qui s'affichera ou bon vous semble comme suit :

<?php  echo $this->renderElement('stats');?>

lundi, décembre 24 2007

CakePHP - PunBB - architecture generale

Voici l'architecture générale avec la liste des répertoires de son application

- app
--- config contient les fichiers de config de son application tel database.php, bootstrap.php etc..

--- controllers contient les controllers de votre application

--- locales contient les traductions

--- models contient les models

--- plugins contient des applications nommé plugins (détail plus bas)

--- vendors contient des librairies externes à CakePHP et nécéssaire à son application

--- views contient les views de votre application

--- webroot contient la partie "web" de votre application --- webroot/forum/ l'endroit où est installé punBB !

le répertoire plugins reprend l'integralité de l'arborscence MVC ce qui donne :

  1. plugins
  2. - news
  3. - news/news_app_controller.php class du controller du plugins news
  4. - news/news_app_model.php class du mdel du module du plugin news
  5. - news/controllers/news_controller.php le controlleur du plugin news
  6. - news/models/news.php le model du plugin news
  7. - news/views/themed/punbb/news/index.ctp la vue principale du module news

La configuration apache devra donc définir un VirtualHost sur le répertoire app/webroot/ comme DOCUMENT_ROOT.

samedi, décembre 22 2007

CakePHP - débuter son projet avec "Bake"

CakePHP permet de générer son application en quelques petites minutes grâce à "bake" !

Pour ce faire on ouvre une console (windows ou linux c'est kifkif) et on se fait :

cake bake foxmask

pour créer l'arboresence du projet "foxmask"

ensuite on créé le répertoire config dans le répertoire "foxmask" on défini les paramètre de connexion à sa/ses base(s) de données et on peut se lancer dans la création des Models Views Controller comme suit :

cake bake -app foxmask

Il vous suffira donc de suivre les choix des menus dans la console et en quelques instants vous aurez achevé votre projet ;)

Il restera alors à fignoler des détails mais vous pouvez dores et déjà accéder à votre application via http://localhost/foxmask/

Plus de détails sur le Tuto de creation de blog en vidéo

Poursuivre avec CakePHP intégrant PunBB

jeudi, décembre 6 2007

CakePHP et PunBB : introduction

Après l'édpisode des comparatifs de framework PHP, voici une astuce pour vous permettre de franchir le pas vers CakePHP (un bon framework PHP utilisant MVC) tout en utilisant PunBB comme outil de forum.

L'idée de base est la suivante : je veux créer un portail basé sur le framework CakePHP mais en utilisant une seul et unique session entre mon portail et mon forum.

Donc pour y parvenir, dans le script dispatcher.php de CakePHP je fais le classique include du script common.php de punbb comme suit :

j'edite le script cake/dispatcher.php et au dessus de

 class Dispatcher extends Object {

j'ajoute :

 define('PUN_ROOT',WWW_ROOT. 'forums/');
 require PUN_ROOT.'include/common.php';

de là, partout dans CakePHP nous avons la "main" sur les variables punBB et la gestion de la session.

Donc dans mon controlleur gérant l'utilisateur contiendra ni plus ni moins qu'un copier/coller du code de gestion de la fonction login (avec l'action = in et out selon le cas)

  class UsersController extends AppController {
      public function login ()
    {
    	global $pun, $db, $pun_config, $db_type, $lang_login;
        $this->set('error', false);
       #soumission du formulaire de login
        if (!empty($this->data))
        {
      #analyse du login/pass ; recherche dans la base et creation du cookie
       }
     }
   }

évidement on n'oubliera pas d'ajouter un global $pun_user par exemple, dans la fonction login, pour manipuler les données que cette variable contient.

Dans un prochain billet, j'aborderai les vues (le V de MVC ;) et comment produire un menu et recuperer dans un bloc de son portail les 'n' derniers sujets recents du forum.

dimanche, novembre 11 2007

Framework PHP5 - Comparatif

A la recherche d'un Framwork PHP5 utilisant l'architecture bien connu qu'est le "Modèle - Vue - Controleur" ou MVC pour coder un logiciel libre "dernière génération" :) , j'ai croisé sur mon chemin nombre de ceux cités sur wikipedia

Pour ceux ne connaissant pas le MVC, le principe est le suivant : le Modèle gère la logique métier et les accès aux bases de données, la Vue gère l'affichage de ce que voit l'utilisateur avec l'écran, le Controleur gère les evenements déclenchés par l'utilsateur. La force de cette architecture est sa modularité.

  • Jelix écrit en PHP5 - projet jeune et dynamique.
  1. Avantage : pour ceux codant déjà en POO ; tout y est ; DAO, CRUD et tout le toutim.
  2. Inconvénient : un peu "jeune" et pas si facile que cela à apréhender à prime abord mais en prennant bien son temps on fini par arriver à faire ce qu'on veut.
  3. Cible : Tout developpeur, webmaster, pas de restriction pour projet de logiciel libre
  • CakePHP écrit en PHP (tout court) et supportant PHP5 parfaitement - on peut donc coder en PHP5 en utilisant celui ci.
  1. Avantage : très complet ; communauté active ; projet dynamique.
  2. Inconvénient : pas préhemptif (à mon goût), manque cruellement de doc ... version beta ...
  3. Cible : Tout developpeur, webmaster, pas de restriction pour projet de logiciel libre
  1. Avantage : très facile de mise en oeuvre - tuto videos de 9et 20mn bleuffant !
  2. Inconvénient : ... pas encore trouvé ...
  3. Cible : les developpeurs de site web ne publiant pas de soft sous GPL ....
  • Symfony écrit en PHP5 - le mastodonte
  1. Avantage : complet et adapté pour un milieu pro ou pour un hébergement permettant de toucher à la config PHP. Dispose de scripts permettant de generer les class modèle via des scripts de CRUD (Create Request Update Delete).
  2. Inconvénient : on ne peut pas coder un logiciel libre "portable" d'hebergeur à hébergeur pour la raison évoquer ci dessus ... on doit pouvoir toucher au include_path dans le php.ini. Même si certains directive apache le permette ; tous les hébergeurs ne l'autorisent pas.
  3. Cible : les developpeurs en entreprise
  1. Avantage : la référence ? :D
  2. Incovénient : je réitèrerai l'inconvénient pour Symfony. Si vous pouvez toucher au include_path de php.ini alors le coeur balance entre ZF ou Symfony.
  3. Cible : les developpeurs en entreprise

Addendum  : après avoir approfondi l'histoire de licence pour CodeIgniter, il apparait que CI permette de releaser son soft sous GPL tant qu'on ne touche pas au core ou bien qu'on en averti son auteur.

Conclusion :

mon choix se porterait sur :

  1. CakePHP pour les avantages évoqués ;)
  2. CodeIgniter (puisque utilisable à souhait !)