Méthode eqLogic::save

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

Bonjour,
Sans voir le code je vois pas comment te repondre…

C’est pas faux :slight_smile:

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

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 :slight_smile:
verisure.txt (8,4 Ko)

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 !

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 ?

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

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 :slight_smile:

Merci pour ton aide,

Xav

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 :frowning:

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 »

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 !

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 :slight_smile: et à force de faire des essais…

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 ?