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