Extrait de http://forum.phpwebgallery.net/viewtopi … 974#p59974
rub a écrit:
flipflip a écrit:
Les plugins n'ont normalement plus besoin d'utiliser le fichier config_local.inc.php, ils peuvent avoir leurs propres configuration. J'ai utilisé le système data.dat en exemple sur mon wiki : http://flipflip.ovh.org/wiki/doku.php?id=plugin . C'est facil à mettre en place et à comprendre. Pour les paramètres par défaut soit tu utilise un fichier data.dat préconfigurer alors tu le gère depuis l'appel du menu d'administration.
En fait, après réflexion et mise en place de plugin, je ne pense pas que le fichier data.dat soit une bonne solution car il y a 1 chance sur 2 que lors de la mise à jour d'une version e PWG le fichier soit supprimé (mais c'est vrai que c'est simple à implémenter).
Mieux vaut taper dans la table #conf, c'est simple en plus avec le install & desinstall.
Pour ne pas avoir trop de paramètre, on peut aussi avoir une seule ligne dans $conf avec les valeurs stockés dans un champs serialize!
Je pense aussi que pour la 1.8 on devrait offrir de base, des fonctions de lecture/écriture/suppression de paramètre pour les plugins et donc pas forcement dans #conf.
C'est un peu HS mais on peut ouvrir un topic sur ca si nécessaire ;-)
Eric a écrit:
rub a écrit:
Mieux vaut taper dans la table #conf, c'est simple en plus avec le install & desinstall.
Euh... Là, je suis un peu satellisé... Allo, Houston ? Je crois qu'on a un problème ;-)
Plus sérieusement, je ne connais pas cette méthode de "taper dans la table #conf. On peut expliquer, svp ? Cà m'aiderai surement pour le plugin.
Fait un tour sur le plugin RV Maps & Earth, il doit faire comme ca.
Des que j'ai le temps, je te donne un exemple plus parlant (mais pas trop le temps en ce moment)!
Hors ligne
oui oui je confirme deja avant avec le MOD google map on faisait ca aussi on stocker les valeurs de la config googlemap dans la table phpwebgallery_config
Hors ligne
Ok, compris.
Au lieu d'utiliser un fichier de config, on créé des valeurs supplémentaires dans la table phpwebgallery_config. En préfixant les champs, il suffit alors de faire un select sur cette table avec le préfix comme condition pour récupérer les valeurs et faire un update pour enregistrer les modifications.
Je vais voir mettre çà en place sur mes plugins.
Hors ligne
Eric a écrit:
Ok, compris.
Au lieu d'utiliser un fichier de config, on créé des valeurs supplémentaires dans la table phpwebgallery_config. En préfixant les champs, il suffit alors de faire un select sur cette table avec le préfix comme condition pour récupérer les valeurs et faire un update pour enregistrer les modifications.
Je vais voir mettre çà en place sur mes plugins.
C'est ca!
Mais le select n'est pas obligatoire car toutes les valeurs dans la table #_config sont lues.
Reste l'insert d'installation, le update de mise à jour et le delete de la déinstallation à faire!
Hors ligne
Mais si l'on souhaite que les valeurs soient modifiables par l'administrateur (comportement du plugin par exemple), il faudrait afficher ces valeur dans un formulaire.
Si la table #_config est lue en permanence, peut-on faire afficher les valeurs sans requète en BDD ?
Hors ligne
Eric a écrit:
Mais si l'on souhaite que les valeurs soient modifiables par l'administrateur (comportement du plugin par exemple), il faudrait afficher ces valeur dans un formulaire.
Oui!
Eric a écrit:
Si la table #_config est lue en permanence, peut-on faire afficher les valeurs sans requète en BDD ?
Oui, en fait la requête a été faite dans le moteur de PWG!
Hors ligne
Ok, merci rub pour ces infos.
Je tente le coup pour le plugin Register_PunBB.
Hors ligne
vas y Eric vas y Eric vas y !!!
comme ca je m en inspire pour mon pugin phpBB ;o)
Hors ligne
<?php function plugin_install() { $q = ' INSERT INTO '.CONFIG_TABLE.' (param,value,comment) VALUES ("gmaps_api_key","","Google Maps API key") ;'; pwg_query($q); } function plugin_uninstall() { $q = ' DELETE FROM '.CONFIG_TABLE.' WHERE param="gmaps_api_key" LIMIT 1'; pwg_query( $q ); } ?>
en reprenant le plugin de rvelices, le fichier maintain.inc.php pour l'installation et la désinstallation
Hors ligne
et pour la mise à jour du paramètre:
if ( isset($_POST['submit']) ) { $query = ' UPDATE '.CONFIG_TABLE.' SET value="'.$_POST['gmaps_api_key'].'" WHERE param="gmaps_api_key" LIMIT 1'; pwg_query($query); list($conf['gmaps_api_key']) = array_from_query('SELECT value FROM '.CONFIG_TABLE.' WHERE param="gmaps_api_key"', 'value'); }
admin_config.php
Le plugin de rvelices est cas d'école complet (paramètre, config, onglet, etc...) mais un peu compliqué car c'est un plugin bigmaousse!
Je dois finir le plugin PhpMyVisites qui lui ne fait rien (ou presque) et donc sera plus simple à comprendre!
Hors ligne
Pour l'installation / désinstallation du plugin, c'est bon.
Par contre, j'ai 12 paramètres dans la table #_config à éditer et modifier le cas échéant. J'ai vu que dans le plugin de rvelices, il récupérait les valeurs de la table dans un array. On édite les valeurs ainsi remontées dans le template puis on fait un update de la table par un submit.
Problème : Il me faut faire un SELECT pour chaque paramètre de la table #_config et sérialiser les données dans un tableau... Je repousse petit à petit les limites de mes compétences / connaissances en php.
Hors ligne
Eric a écrit:
Pour l'installation / désinstallation du plugin, c'est bon.
Par contre, j'ai 12 paramètres dans la table #_config à éditer et modifier le cas échéant. J'ai vu que dans le plugin de rvelices, il récupérait les valeurs de la table dans un array. On édite les valeurs ainsi remontées dans le template puis on fait un update de la table par un submit.
Problème : Il me faut faire un SELECT pour chaque paramètre de la table #_config et sérialiser les données dans un tableau... Je repousse petit à petit les limites de mes compétences / connaissances en php.
En reprenant ce qui a été fait dans la NBM:
// Reload conf with new values load_conf_from_db('param like \'nbm\\_%\'');
Tu recharges les paramètres avec cette fonction.
load_conf_from_db() recharge tout.
load_conf_from_db('param like \'nbm\\_%\'') recharge avec le where en paramètre par exemple ici tous les paramètres nbm_%
Hors ligne
Bout de code complet de la NBM:
if (isset($_POST['param_submit']) and !is_adviser()) { $updated_param_count = 0; // Update param $result = pwg_query('select param, value from '.CONFIG_TABLE.' where param like \'nbm\\_%\''); while ($nbm_user = mysql_fetch_array($result)) { if (isset($_POST[$nbm_user['param']])) { $value = $_POST[$nbm_user['param']]; $query = ' update '.CONFIG_TABLE.' set value = \''. str_replace("\'", "''", $value).'\' where param = \''.$nbm_user['param'].'\';'; pwg_query($query); $updated_param_count += 1; } } array_push($page['infos'], l10n_dec('nbm_updated_param_count', 'nbm_updated_params_count', $updated_param_count)); // Reload conf with new values load_conf_from_db('param like \'nbm\\_%\''); } } case 'subscribe' : { if (!is_adviser()) { if (isset($_POST['falsify']) and isset($_POST['cat_true'])) { $check_key_treated = unsubscribe_notification_by_mail(true, $_POST['cat_true']); do_timeout_treatment('cat_true', $check_key_treated); } else if (isset($_POST['trueify']) and isset($_POST['cat_false'])) { $check_key_treated = subscribe_notification_by_mail(true, $_POST['cat_false']); do_timeout_treatment('cat_false', $check_key_treated); } }
Hors ligne
Je suis vraiment pas doué :(
Mais je persiste ! Il y a quelque chose que je ne comprend pas dans le code de rvelices : A quoi sert ceci ?
list($conf['gmaps_api_key']) = array_from_query('SELECT value FROM '.CONFIG_TABLE.' WHERE param="gmaps_api_key"', 'value');
Hors ligne
Bingo !
Cette fois, c'est bon pour la gestion des paramètres. Les données sont bien récupérées de la table et mises à jour après modification. Une journée de boulot juste pour la partie admin du plugin... Pas super productif !
Pour le reste, je rebascule dans le topic d'origine sur le Plugin Register_PunBB sauf si je rencontre encore des soucis avec la gestion des paramètres. Au quel cas, je reposterai ici.
Milles mercis rub !
Hors ligne