Bonjour,
J'ai créer une table pour enregistré les parametres de mon application web

Il n'y a qu'une ligne, dans ma table, donc qu'un id, soit le 1

il y a un champs 'sitename'

J'aimerais extraire la valeur de 'sitename' (ou d'un autre) très rapidement.

J'ai essayé ceci: (Configs est ma table)

<title><?php echo $this->Config[1]->findByName('sitename'); ?></title>

Es-ce qu'il y a une solution qui fonction sans taper 3 lignes de codes?

11 réponses


En fait, j'ai créer un table ou je stock les paramètres de mon site.
A divers endroit, je souhaiterais recupérer ces parametres, comme les parametres SMTP, site online, page d'erreur, page pour site non disponible, site name, etc.
Voyez-vous?

tu dis qu'il y a q'une table avec une seule ligne c'est ça? (1 seul id).
A ce moment la si ces options ne change pas pourquoi ne pas les mettre dans un fichier genre config.php que tu appelle quand tu en as besoin ?

Ben oui, mais j'aimerais que l'utilisateur puisse changer les données

Par exemple, par defaut le champs 'sitename' est "Mon site".
J'ai fait un formulaire pour qu'on puisse changer de nom et tuiliser ceci dans la balise <title>, par exemple

oui d'accord je comprend et du coup c'est plus compliqué forcément ^^
tu fais quoi comme requête pour récupérer les donnée?

Ben je pourrais faire un truc du genre

$d = $this->Config->find('all',array(
            'conditions'=> array(
                'id' => 1
                )
            ));
echo d'online'];

donc un find() mais c'est "compliqué"

Bon a la limite je peux faire une fonction, avec le code ci-dessus, mais je me demandais s'il y avait un truc plus simple, que je pourrais mettre dans mon layout ou dans mes vues, comme

$this->Config->fieldByName('online');

Evidemmenet, ce code ne macrhe pas

Pour revenir à ce que je t'ai dit au début le cout du fichier externe tu pourrait la jouer comme sur wordpress !
Si tu ne sais pas comment il procède c'est simple lors de l'installation du cms, il crée un fichier wp_config.php.
Ce que tu peux faire c'est une fois que le client a entré sa config, tu créer le fichier config.php avec ces infos.
Le seul soucis c'est au niveau des modifs éventuelles. Genre si le client décide de changer de titre ou de nom de base ou je ne sais quoi il faudrait qu'il le fasse aussi côté config.php.

Sans faire de requête tu ne peux pas récupérer les infos de la table de toute façon donc à toi de voir ce que tu veux faire ici ^^

Bonjour, tu peux faire comme ceci : Fichier bootstrap.php :

Configure::write('Site.name', 'Mon site');

Dans l'action qui permet de modifier la valeur du champs, tu rajoutes une fois la modification effectuée dans la base de données par exemple :

Configure::write('Site.name', $data'Config']'sitename']);

Puis dans ton layout ou la vue :

<?= Configure::read('Site.name'); ?>

Tant que la modification de la valeur en base de données ne sera pas faite, ce sera toujours le dernier Configure::write() qui sera utilisé, donc pas de requête faite, seul le fichier bootstrap sera utilisé pour retourner la valeur.
Je n'ai pas trop utilisé le Configure::write() en dehors du fichier bootstrap.php , il te faudra peut-être faire un :

Configure::delete('Site.name');

avant le Configure::write() dans l'action de modification de ton controller, à toi de vérifier.
Je ne sais pas trop si le Configure::write() depuis le controller suffit pour écraser la valeur de celui de bootstrap.php.
Voilà.
Au passage, si le champs que tu veux récupérer se nomme "sitename", tu ne peux pas l'appeler avec un findByName, si tu n'as qu'un seul enregistrement, fais plutôt :

$data = $this->Config->find('first', array('fields' => array('Config.sitename'));

Mais de la manière que je t'ai expliqué, tu n'as pa&s besoin de faire de find, il te suffit de faire la modification en base de données et de récupérer la valeur depuis le Request du formulaire, par exemple avant la sauvegarde :

$name = $this->request->data'Config']'sitename'];
$this->Config->saveField('sitename', $name);
Configure::write('Site.name', $name);

Mais bon, dans ce cas là autant ne pas faire appel à la base de données pour une modification alors que la classe Configure fais la modification et la lecture sur le fichier bootstrap.php.

C'est super intéressant, je vais essayé ca tout de suite.
Donc si j'ai bien compris il faut faire ca dams le AppController, dans la fonction beforeFilter()?
J'ai deja une autre question

Configure::write(Site.name, $data[Config][sitename]);

Comment il sait a quel row il doit faire ca. Pour ma part j'ai qu'un enregistrement et cette enregistrement à le champs id 1. Mais il devait en avoir plusieurs, même si c'est mon cas actuel, que se passe-t-il?
Merci, j'essaye?

Non, tu le fais depuis ta fonction qui te permet de modifier la valeur (edit dans le controller Configs, je suppose ou un truc du genre).
Il y aura plusieurs noms du site ?

Non le site aura qu'un nom. Mias il y aura plusieurs paramètre, comme la version, online, page d'erreur, page pour site indisponible, parametres smtp etc..

Aussi, pourquoi il y a un point entre Sitename. Y-a-t-il une raison particulière?

Configure::write(Site.name, $data[Config][sitename]);

on peut pas faire ainsi

Configure::write(Sitename, $data[Config][sitename]);

C'est pour te permettre de rajouter d'autres paramètres par la suite par exemple :

Configure::write('Site' => array('name' => 'Mon site', 'online' => 1, 'description' => 'Ma superbe description'));

Tu n'auras quand même qu'un seul enregistrement, c'est pour cela que j'ai précisé dans le find, le champs 'sitename', pour qu'il ne retourne que la valeur de ce champs là.