Bonjour @Loic , bonjour à tous,
J’ai une petite question concernant le dev de mon plugin.
Lorsque je crée un équipement, j’ajoute divers <input> sur l’onglet « Equipement » ainsi qu’une <table> vide et un bouton <Synchroniser>. Ce bouton appelle une fonction js qui in fine remplit ma table avec d’autres <input>.
Jusqu’ici tout se passe bien, et l’affichage après synchronisation est correct.
Par contre lorsque je clique sur le bouton <Sauvegarde> ma table disparaît.
Comment faire pour que celle-ci soit sauvegarder automatiquement avec la méthode Save?
Merci d’avance,
Xav
Loic
Avril 5, 2020, 3:01
2
Bonjour,
Sans voir le code je vois pas comment te repondre…
C’est pas faux
fichier maclasse.php
<div class="form-group">
<label class="col-sm-3 control-label">{{Mon installation}}</label>
<div class="col-sm-6">
<a class="btn btn-success btn-sm cmdAction" id="bt_SynchronizeMyInstallation"><i class="fas fa-sync"></i> {{Synchroniser}}</a><br/><br/>
<span id="nbsp" type="text" class="eqLogicAttr" data-l1key="configuration" data-l2key="nb_smartplug" style="display : none;"></span>
<table id="table_smartplug" class="table table-bordered table-condensed">
<thead>
<tr>
<th style="width: 20px;">{{ID}}</th>
<th style="width: 100px;">{{Nom}}</th>
<th style="width: 200px;">{{Type}}</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
fichier maclasse.js
$.ajax({ // fonction permettant de faire de l'ajax
type: "POST", // methode de transmission des données au fichier php
url: "plugins/verisure/core/ajax/verisure.ajax.php", // url du fichier php
data: {
action: "SynchronizeMyInstallation",
numinstall: $('.eqLogicAttr[data-l2key=numinstall]').value(),
username: $('.eqLogicAttr[data-l2key=username]').value(),
pwd: $('.eqLogicAttr[data-l2key=password]').value(),
country: $('.eqLogicAttr[data-l2key=country]').value()
},
dataType: 'json',
error: function (request, status, error) {
handleAjaxError(request, status, error);
},
success: function (data) {
if (data.state != 'ok') {
$('#div_alert').showAlert({message: '{{Erreur lors de la synchronisation}}', level: 'danger'});
return;
}
else {
var nbsp = data.result['Devices'].length;
$('#nbsp').append(nbsp);
for(j = 0; j < nbsp ; j++) {
var tr = '<tr>';
tr += '<td>';
tr += '<input class="eqLogicAttr form-control input-sm" value="'+data.result['Devices'][j]['idDev']+'" readonly="true" data-l1key="configuration" data-l2key="smartplugID'+data.result['Devices'][j]['idDev']+'">';
tr += '</td>';
tr += '<td>';
tr += '<input class="eqLogicAttr form-control input-sm" value="'+data.result['Devices'][j]['alias']+'" readonly="true" data-l1key="configuration" data-l2key="smartplugName'+data.result['Devices'][j]['idDev']+'">';
tr += '</td>';
tr += '<td>';
tr += '<input class="eqLogicAttr form-control input-sm" value="'+data.result['Devices'][j]['aliasType']+'" readonly="true" data-l1key="configuration" data-l2key="smartplugModel'+data.result['Devices'][j]['idDev']+'">';
tr += '</td>';
$('#table_smartplug tbody').append(tr);
tr += '</tr>';
}
var tr = $('#table_smartplug tbody tr:last');
}
$('#div_alert').showAlert({message: '{{Synchronisation terminée avec succès}}', level: 'success'});
}
Merci d’avance
Loic
Avril 5, 2020, 3:32
4
Si tu es bien dans la partie .eqLogic ca devrait marcher ce que tu as fait ou est le soucis ?
oui je suis bien dans la partie .eqLogic.
Pourtant dès que je clique sur save, les champs du tableau disparaissent.
Voici le fichier php complet. Si tu vois qqchose qui cloche, tu me sauves la vie
verisure.txt (8,4 Ko)
Loic
Avril 5, 2020, 4:03
6
Disparaissent ca oui j’ai pas l’impression que tu es fait le load donc ca me choque pas mais surtout ce qui est important c’est dans la bdd tes champs sont bien la ?
ah oui pardon, je me suis mal exprimé !
Ce sont les affichages qui disparaissent, pas mes données !
Loic
Avril 5, 2020, 4:08
8
A ben oui ca c’est logique il faudrait que tu regarde le plugin alarme ou j’ai fait un truc comme ca dans la fonction js printEqLogic je crois
OK, j’ai donc commencé avec la bonne méthode. J’ai créé dans mon fichier .js la fonction printEqLogic.
Et cela amène donc ma 2nde question :
Voici le code :
function printEqLogic(_mem) {
$('#table_smartplug tbody').empty();
if ($('.eqLogicAttr[data-l2key=nb_smartplug]').value() != "") {
for(j = 1; j <= $('.eqLogicAttr[data-l2key=nb_smartplug]').value() ; j++) {
var tr = '<tr>';
tr += '<td>';
tr += '<input class="eqLogicAttr form-control input-sm" value="'+$('.eqLogicAttr[data-l2key=smartplugID'+j']').value()+'" readonly="true">';
tr += '</td>';
tr += '<td>';
tr += '<input class="eqLogicAttr form-control input-sm" value="'+$('.eqLogicAttr[data-l2key=smartplugName'+j']').value()+'" readonly="true">';
tr += '</td>';
tr += '<td>';
tr += '<input class="eqLogicAttr form-control input-sm" value="'+$('.eqLogicAttr[data-l2key=smartplugModel'+j']').value()+'" readonly="true">';
tr += '</td>';
$('#table_smartplug tbody').append(tr);
tr += '</tr>';
}
var tr = $('#table_smartplug tbody tr:last');
}
}
et la mon pb c’est d’incrémenter mon data-l2key=…
Pour le moment ça ne fonctionne pas ! Et je ne sais pas comment faire.
Une idée ?
Loic
Avril 5, 2020, 4:17
10
Non mais après faut lui dire avec le _mem de mettre les données dans le tableau que tu as crée de tete la methode est $(’.eqLogic’).setValue(’.eqLogicAttr’,_mem)
ok ! je vais regarder ça de plus près !
merci pour ton aide
Xav-74
Avril 6, 2020, 12:35
12
Hello @Loic ,
J’ai essayé de m’inspirer du plugin alarme. Mais je coince pour le moment.
Sur ma fonction ‹ Synchronise ›, je remplit ma table comme ceci : (j’ai modifié un tout petit peu par rapport à hier avec des data-l3key et des id pour chaque input)
var nbsp = data.result['Devices'].length;
$('#nbsp').append(nbsp);
for(j = 0; j < nbsp ; j++) {
var tr = '<tr>';
tr += '<td>';
tr += '<input id="spID"'+j+'" class="eqLogicAttr form-control input-sm" value="'+data.result['Devices'][j]['idDev']+'" readonly="true" data-l1key="configuration" data-l2key="devices" data-l3key="smartplugID'+j+'">';
tr += '</td>';
tr += '<td>';
tr += '<input id="spName"'+j+'" class="eqLogicAttr form-control input-sm" value="'+data.result['Devices'][j]['alias']+'" readonly="true" data-l1key="configuration" data-l2key="devices" data-l3key="smartplugName'+j+'">';
tr += '</td>';
tr += '<td>';
tr += '<input id="spModel"'+j+'" class="eqLogicAttr form-control input-sm" value="'+data.result['Devices'][j]['aliasType']+'" readonly="true" data-l1key="configuration" data-l2key="devices" data-l3key="smartplugModel'+j+'">';
tr += '</td>';
$('#table_smartplug tbody').append(tr);
tr += '</tr>';
}
var tr = $('#table_smartplug tbody tr:last');
}
Puis j’ai créé ma fonction ‹ printeqLogic ›
function printEqLogic(_mem) {
$('#table_smartplug tbody').empty();
if ($('.eqLogicAttr[data-l2key=nb_smartplug]').value() != "") {
for(j = 0; j < $('.eqLogicAttr[data-l2key=nb_smartplug]').value() ; j++) {
var attr = "$('.eqLogicAttr[data-l3key=smartplugID"+j+"]";
$('#div_alert').showAlert({message: attr, level : 'warning'});
var tr = '<tr>';
tr += '<td>';
tr += '<input id="spID"'+j+' class="eqLogicAttr form-control input-sm" readonly="true">';
$('#spID'+j).setValues(attr, _mem);
tr += '</td>';
$('#table_smartplug tbody').append(tr);
tr += '</tr>';
}
var tr = $('#table_smartplug tbody tr:last');
}
}
Mais mon tableau reste désespérément vide.
Je touche un peu mes limites
Merci pour ton aide,
Xav
Loic
Avril 6, 2020, 12:45
13
Tu fais un setValue avant de mettre l’éelement sur la page (le append) donc forcement il ne trouve rien a remplir sur la page et ne fait rien.
Merci ! En effet erreur de débutant !
Je corrige donc mais cela ne change rien
function printEqLogic(_mem) {
$('#table_smartplug tbody').empty();
if ($('.eqLogicAttr[data-l2key=nb_smartplug]').value() != "") {
for(j = 0; j < $('.eqLogicAttr[data-l2key=nb_smartplug]').value() ; j++) {
$('#spID'+j).empty();
var attr = "$('.eqLogicAttr[data-l3key=smartplugID"+j+"])";
var tr = '<tr>';
tr += '<td>';
tr += '<input id="spID"'+j+' class="eqLogicAttr form-control input-sm" readonly="true">';
tr += '</td>';
$('#table_smartplug tbody').append(tr);
$('#spID'+j).setValues(attr, _mem);
tr += '</tr>';
}
var tr = $('#table_smartplug tbody tr:last');
}
}
1 « J'aime »
Loic
Avril 6, 2020, 1:16
15
Mais la tu insert ton tr dans meme l’avoir fermé…
Exact, copié collé trop rapide.
Mais résultat idem en passant le tr += '</tr>'; avant le append.
J’ai l’impression que mon setValue ne fait rien.
J’ai essayé aussi avec $('#spID'+j).setValues(attr, '.eqLogicAttr');
Mais idem !
Loic
Avril 6, 2020, 1:29
17
La tr += ‹ <input id=« spID » ›+j+’ class=« eqLogicAttr form-control input-sm » readonly=« true »>’; tu as pas de l1key l2key et l3key donc il peut pas remplir…
je ne pensais pas être obligé de les remettre.
C’est fait mais pas mieux niveau résultat.
Je dois pas être loin mais je tourne en rond et à force de faire des essais…
Loic
Avril 6, 2020, 1:44
19
Regarde dans _mem si tu as bien les données dont tu as besoin
je pense que je viens de comprendre mon erreur :
<input id="spID"'+j+ class...
ne fonctionne pas. Il me donne au final un
<input id="spID" 1 class...
il existe une méthode pour concaténer cet attribut id ?
PS : en aparté, quelle méthode utilises-tu pour regarder le contenu de _mem ?