Bonjour,
Je partage avec vous, mon dernier blocage.
J’ai un script qui va chercher une liste pour un menu déroulant, dans un dossier.
Le code PHP est appuyé par le Javascript qui exécute Ajax pour accéder au fichier.
Mon problème est à chaque rechargement de la page, et donc sauvegarde. Le menu se réinitialise , et la valeur sélectionnée disparait.
ProJote.php
<...>
<div class="col-sm-6">
<select class="eqLogicAttr form-control" id="enfantList" data-l1key="configuration" data-l2key="enfant">
</select>
</div>
<...>
ProJote.js
<...>
//Je fais une liste pour enfantList
// Définir la fonction updateDropdown en dehors de toute autre fonction
function updateDropdown(data) {
var selectElement = document.getElementById('enfantList');
var currentValue = selectElement.value; // Récupérer la valeur actuelle du champ
console.log('Réponse de la requête pour la sélection AJAX :', data);
// Effacer les options existantes
selectElement.innerHTML = '';
// Ajouter les nouvelles options à la liste déroulante, sauf si elles sont vides
data.forEach(function (value) {
if (value.trim() !== '') {
var option = document.createElement('option');
option.value = value;
option.textContent = value;
selectElement.appendChild(option);
}
});
// Vérifier si la valeur actuelle est présente dans la liste
var optionExists = Array.from(selectElement.options).some(function (option) {
return option.value === currentValue;
});
// Si la valeur actuelle est présente, la rétablir
if (optionExists) {
selectElement.value = currentValue;
}
}
// Déclarer une variable globale pour stocker la valeur sélectionnée
var selectedValue = '';
// Action sur le drop down du menu list
document.getElementById('enfantList').addEventListener('mousedown', function () {
// Récupérer l'ID de l'équipement
var eqId = $('.eqLogicAttr[data-l1key=id]').val();
// Stocker la valeur sélectionnée avant la mise à jour du dropdown
selectedValue = $('#enfantList').val();
// Faire une requête Ajax pour récupérer les informations de l'équipement depuis le fichier
$.ajax({
type: "POST",
url: "plugins/ProJote/core/ajax/ProJote.ajax.php",
data: {
action: "GetEquipmentInfo",
id: eqId
},
dataType: 'json',
success: function (response) {
console.log('Réponse de la requête AJAX :', response);
// Vérifier si la propriété 'result' est définie et est un tableau
if (response.result && Array.isArray(response.result)) {
// Le traitement ici, par exemple :
response.result.forEach(item => {
console.log(item); // Afficher chaque élément du tableau
});
updateDropdown(response.result);
// Rétablir la valeur sélectionnée après la mise à jour du dropdown
$('#enfantList').val(selectedValue);
} else {
console.warn('La propriété \'result\' n\'est pas un tableau, affichage de la première ligne :');
console.log(response.result); // Afficher la première ligne
}
},
error: function (jqXHR, textStatus, errorThrown) {
console.error('Erreur lors de la récupération des informations de l\'équipement :', textStatus, errorThrown);
}
});
});
<...>
Et enfin , ProJote.ajax.php :
<...>
if ($action == "GetEquipmentInfo") {
log::add('ProJote', 'debug', 'Ajax::Je recherche le fichier avec la liste d\'enfant');
$eqId = init('id');
$eqLogic = ProJote::byId(init('id'));
$filePath = "/tmp/jeedom/ProJote/{$eqId}/listenfant.ProJote";
log::add('ProJote', 'debug', 'Ajax::Je recherche le fichier ' . $filePath);
if (file_exists($filePath) && filesize($filePath) > 0) {
$fileContent = file_get_contents($filePath);
// Convertir le contenu en un tableau en utilisant explode
$fileContentArray = explode("\n", $fileContent);
// Stocker le contenu dans une variable de session
$_SESSION['equipment_info'] = $fileContentArray;
ajax::success($fileContentArray);
} else {
ajax::error('Le fichier n\'existe pas ou est vide.');
}
}
<...>
Informations Jeedom
Core : 4.4.5 (V4-stable)
DNS Jeedom : non
Plugin : Plugin Pronote
Version : 2024-05-07 09:35:02 (stable)
Statut Démon : Démarré - (2024-05-11 23:16:42)