Un élément (elements) dans cakephp est utilisé comme peut l’être un include en php. Un élément permet d’afficher un morceau de la page qui est répété sur tout le site. Cela peut être un flux rss ou encore bien d’autres choses.
Pour créer un element dans cakephp, ceci est très simple. Il suffit de créer un fichier dans le dossier app/views/elements/le_nom_de_votre_element.ctp. Dans ce fichier, vous pouvez créer la même chose que dans un include. Par exemple : Ici est le haut de ma page
Aller ensuite dans le layout correspondant à votre site web : app/view/default.ctp
Pour afficher votre element utiliser le code suivant :
<? php echo $this->element ('le_nom_de_votre_element.ctp'); ?>
Ainsi votre élément s’affichera sur toutes vos pages. En effet, le layout est en quelques sortes le gabarit de votre site.
L’exemple que nous avons vu était un exemple statique. Pour un exemple dynamique, c’est à dire qui utilise des éléments provenant de la base de données, quelques lignes de codes supplémentaires sont nécessaires :
function index() {
$this-> set('rubriques', $this->Rubrique->find('all'));
if(isset($this->params['requested'])) { //s’il s’agit de l’appel pour l’élément
$rubriques = $this->Rubrique->find('all');
return $rubriques;
}}
Dans cet exemple, nous souhaitons afficher les différentes rubriques du site et qui sont stockées en base de données.
Comme précédemment nous allons créer un nouveau fichier dans le dossier “elements” que l’on nomme menu.ctp. Dans ce fichier, nous allons devoir indiquer que nous récupérons les données depuis le controller rubriques de cette manière :
<? php $rubriques = $this->requestAction ('rubriques/index');?>
Ensuite pour afficher les éléments, cela se fait comme sur une vue (view) normal :
<?php if ($rubriques) { foreach ($rubriques as $rubrique) {
$titre = $rubrique['Rubrique']['titre']; ?>
<? php echo $html->link($rubrique['Rubrique']['titre'],’view/’.$rubrique['Rubrique']['id']); ?>
<? Php } //fin foreach
} //fin if
?>
Pour l’affichage de l’element, il suffit d’utiliser : <? php echo $this->element(’menu’); ?>