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