FoxMaSk – Le Grin de Sable

La passion de la liberté et le Free de la passion

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):

<?phpclass 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 :

<?phpclass 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');?>

Auteur : foxmask

WebDev since PHP3, Founder of PhpFr.Org to help developers in PHP, admin of the french community on PunBB.Fr. Actually core developer on Jelix PHP5 Framework, and author of HaveFnuBB and Huanui, projects made with Jelix

Commentaires Clos.