|
|
|
|
Bonjour bonjour.
Je travaille actuellement sur une GED en PHP avec l'un de mes collègues qui lui aussi est programmeur junior. (Je dirais même plus qu'on est encore étudiants, 'fin bref). Dans un souci d'optimisation, nous souhaitons minimiser le plus possible les rechargements de page. (Avouez qu'il n'est pas très sérieux de recharger la page à chaque fois que l'on clique sur un dossier de l'arborescence.)
Pour ceci, nous avons décidé d'utiliser deux iframes. Celle de gauche qui affiche le treeview, celle de droite qui est sensé afficher les fichiers contenus dans les dossiers. La méthode utilisée pour cela est d'envoyer dans l'url de la frame une variable "Path", qui sera récupérée dans l'autre frame, via un $_GET['Path'].
Nous avons décidé de coder cet envoie en javascript de la façon suivante :
echo indentation($niveau) . "<img src=\"directory.png\" onclick=\"plidepli('".str_replace($replace,"",$str)."')\"> <input type='button' class= 'repertoire' value= '". $str2 ."' <script language = 'javascript'> onclick= parent.frames['\"/contenu.php?path=.'". $tableau ."'\"'].location.reload(); </script><br />\n";
Le problème est qu'évidemment, cela ne fonctionne pas. Nous voudrions donc savoir où se situe l'erreur que nous avons commise, et si possible, que l'on nous explique comment réparer cette erreur.
D'avance je remercie tous ceux qui nous répondront.
Cordialement,
Kitty-cat
Configuration: Windows XP Firefox 2.0.0.11
Bonjour,
echo "<img src=\"directory.png\" onclick=\"plidepli('".str_replace($replace,"",$str)."')\"> <input type='button' class= 'repertoire' value= '". $str2 ."' onclick= \"parent.frames['\"/contenu.php?path=.'". $tableau ."'\"'].location.reload()\" ><BR>";
Après je ne dis pas que ce que vous souhaitez faire fonctionne, je n'ai pas très bien compris comment fonctionne votre système ^^ ~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~ |
Le indentation($niveau) sert en fait à "afficher" les blancs derrière le nom du dossier. Comme ça si c'est un sous-dossier, il se retrouve décalé grâce à cela. Sinon, j'ai testé ce que tu m'as proposé, et encore une fois, aucun résultat. Si ce n'est que j'ai un point-virgule qui se balade derrière le nom de mon dossier XD.
|
Autant pour moi le ';' vient de là (en gras):
echo "<img src=\"directory.png\" onclick=\"plidepli('".str_replace($replace,"",$str)."')\"> <input type='button' class= 'repertoire' value= '". $str2 ."' onclick= \"parent.frames['/contenu.php?path=". $tableau ."'].location.reload()\" ><BR>";
Effectivement il y a un ';' qui traine au millieu et qui n'a rien à faire là. Sinon j'ai aussi supprimé des " en trop. Remplace pour voir. ~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~ |
<?php
|
Ok je vois,
onclick= \"parent.frames['nom_de_iframe'].location.href('contenu.php?path=". $tableau ."')\"
Ca devrait recharger la page dans l'iframe avec la variable path correctement passée. ~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~ |
Une petite question, comment est nommé ton iframe dans ton code ?
|
Dans ce cas déclare la comme ceci :
<iframe src="Contenu.php" id="Contenu" name="Contenu" height="800" width=700> Et modifie la fonction javascript sur le onclick comme ceci :
onclick= \"document.getElementById('Contenu').location.href('contenu.php?path=". $tableau ."')\"
Je n'ai jamais manipulé d'Iframe donc je ne sais pas trop si c'est reconu comme une véritable frame, ou un simple composant d'une page... dis moi ce qui se passe suite à cette modif. ~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~ |
On va essayer de faire autrement.
<div id="contenu" .... > TON CODE PHP CHARGE DE MONTRER LE CONTENU </div> Ensuite voici une fonction javascript à inclure ou tu veux dans ton fichier
<script language="javascript">
function callScript ( scriptName, args ){
var xhr_object = null;
if(window.XMLHttpRequest) // Firefox
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}
xhr_object.open("POST", scriptName, true);
xhr_object.onreadystatechange = function() {
if(xhr_object.readyState == 4) {
//alert(xhr_object.responseText); // DEBUG MODE
//document.write(xhr_object.responseText);
eval(xhr_object.responseText);
}
//alert(xhr_object.readyState);
return xhr_object.readyState;
}
xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr_object.send(args);
}
</script>
Cette fonction permet d'appeller un script PHP, de l'éxécuter, de récupérer le contenu de sa sortie (ce qui est afficher par le script PHP en gros) et de l'interpréter comme du javascript. C'est sympa et ca va te permettre de créé un autre fichier PHP qui lui fera exactement la même chose que l'affichage du contenu, mais écrit de manière à ce que ce soit interprétable en javascript. Mettons que l'on nomme ce fichier 'traitement.php', voici son contenu :
<?php
function listeFichier($chemin){
$replace = array(":","/","\\"," ",".","(",")","_");
$tableau = glob($chemin . '/*.*');
$display = "";
$display += "<table align ='center'>";
foreach($tableau as $str){
if (is_file($str)){
$tab = explode('/',$str);
$nomFichier = '';
foreach ($tab as $tabs){
$nomFichier = $tabs;
}
$extension = explode('.',$str);
$extension = $extension[count($extension)-1];
$extension = strtoupper($extension);
$display += "<td><tr>".$nomFichier."</tr><tr>".$extension. "</tr></td>";
}
}
if(count($tableau) == 0)
$display += "<td><tr align ='center'>Ce repertoire est vide</tr></td>";
$display += "</table>";
// --- Finally return the string to display
return $display;
}
$path = isset($_GET['path']) ? $_GET['path'] : '';
$toDisplay = "";
if ($path != ''){
$toDisplay = listeFichier($Path);
}
else{
$toDisplay = "Rien à afficher";
}
// --- Update the content of DIV 'contenu'
echo "var div = document.getElementById('contenu');";
echo "div.innerHTML = ".$toDisplay.";";
?>
De cette manière, tu n'aura plus qu'à appeller la fonction javascript suivante sur le onclick (menu gauche) :
onclick= \"callScript('traitement.php','path='".$tableau."')\"
Logiquement ca devrait fonctionner, il y a peut etre des erreurs de frappe par ci par là ^^ ~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~ |
Pas d"erreur critiques selon firefox. Pour autant, il ne m'affiche pas encore quelque chose. Je vois pas trop d'où le problème pourrait venir par contre. Le php m'a l'air au point, et je pense que si ca venait de la partie en ajax, firefox aurait crisé.
|
Dans ce cas là c'est surement une erreur dans l'ajax. Le mieux pour voir si effectivement il y a erreur, puisque tu as FF, c'est d'aller dans 'Outils->console d'erreur' puis d'exécuter ton truc pour voir s'il n'affiche pas une erreur (si rien ne s'affiche c'est que c'est fort probable).
//alert(xhr_object.responseText); // DEBUG MODE Si tu as bien une erreur, peux-tu me donner le message ? Sinon... peux-tu me donner le code PHP de ta page principale (celle qui contient tout normalement (les div, etc.) ) ~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~ |
Erreur : missing ) after argument list
|
<style type = "text/css">
|