Salut, voici comment moi je fais généralement. J'ai une table configurations de la forme suivante :
id int(11)
key varchar(100)
value text
Puis ensuite je créer mon model :
<?php
class Configuration extends AppModel{
public function load() {
$settings = $this->find('all', array(
'fields' => array('key', 'value')
));
foreach ($settings as $variable) {
Configure::write ( 'Webapp.'.$variable'Configuration']'key'], $variable'Configuration']'value'] );
}
}
public function write($data){
foreach($data as $key => $value){
$this->updateAll(
array('Configuration.value' => is_numeric($value) ? $value : '\'' . $value . '\''),
array('Configuration.key LIKE ' => $key)
);
}
}
}
?>
Et enfin dans mon AppController :
$this->Configuration->load();
Ensuite c'est très simple, tu appel simplement les données depuis la Configuration :
echo $this->Html->meta('description', Configure::read('Webapp.meta_description'));
echo $this->Html->meta('keywords', Configure::read('Webapp.meta_keywords'));
Pour la sauvegarde des données, les champs que je créer, porte le même nom que la clé de la base de données. Par exemple supposons que j'ai dans la base :
id = 1
key = website_name
value = le nom de mon site web
J'aurai alors lorsque je veux modifier cette valeur, un champ comme ci-dessous (généralement j'ai un <form> que je regroupe par catégorie dans des tab et je valide l'ensemble d'un seul coup) :
<input type="text" name="website_name" id="website_name" />
Il suffira ensuite dans ton controller de faire comme ceci :
<?php
class ConfigurationsController extends AppController{
public function admin_index(){
if($this->request->is('post')){
$this->Configuration->write($this->request->data);
$this->Session->setFlash(__('La configuration du site à été mise à jour.'), 'admin/notif');
}
// Rechargement des données après sauvegarde
$this->Configuration->load();
}
}
Cette technique à l'avantage d'être très simple à mettre en place et marche très très bien. Après je suis sur que l'on peut faire mieux, mais pour ma part, sa correspond tout a fais à ce que je veux faire.