<?php if ($f == ""){ $f = glob("hakemisto/*"); } foreach($f as $hak){ if(is_dir($hak)){ print $hak . "/<br>\r\n"; $f = glob($hak . "/*"); } } ?>
Tällaisella silmukalla olen yrittänyt listata osoitettua halemistoa. Eli sivulle pitäisi saada tulostettua kaikki osoitetun hakemiston sisältämät alihakemistot ja jos vielä näiden alihakemistojen alla on hakemistoja niin myös ne tulostetaan. Toivottavasti joku osaisi antaa jotakin suuntaa antavaa neuvoa. Kiitos.
En nyt ole varma, mutta kokeile
Kiitos. Näin sen toimii oikein.
Sellainen vain vielä että miten voisin tarkistaa että mitkä alihakemistot on samassa hakemistossa?
Faarao kirjoitti:
Sellainen vain vielä että miten voisin tarkistaa että mitkä alihakemistot on samassa hakemistossa?
noo tee vaikka näin
<?php function listaa($hak) { $kansiot = array(); $filut = glob("$hak/*"); foreach($filut as $filu) { if(is_dir($filu)) $kansiot[$filu] = listaa($filu); } return $kansiot; } ?>
tuo sitten palauttaa taulukon jossa kansiot ovat muodossa
jne....
Onnistuisiko se jotenkin muuten. Kun näyttäisi vähän siltä ettei tuo toimi niinkuin pitäisi. Joko on niin etten osaa käsitellä tuota moniuloteistataulukkoa tai sitten se ei toimi.
Jos lisäisin tähän vielä mihin tarkoitukseen tuo olisi tulossa. Eli sivulla on javascriptillä toteutettu valikko.
Ja se kirjoitetaa tähän muotoon:
<div id='masterdiv'> <div class='menutitle' onclick=\"SwitchMenu('sub0')\"><a href='etusivu.php'>Etusivu</a></div> <div class='menutitle' onclick=\"SwitchMenu('sub0')\"><a href='tokasivu.php'>Toka</a></div> <div class='menutitle' onclick=\"SwitchMenu('sub1')\"><a href='#'>Kolmas</a></div> <span class='submenu' id='sub1'> <a href='#'>Alavalikko1</a><br> <a href='#'>Alavalikko2</a><br> <a href='#'>alavalikko3</a><br> <a href='#'>alavalikko4</a> </span> <div class='menutitle' onclick=\"SwitchMenu('sub2')\"><a href='#'>Neljäs</a></div> <span class='submenu' id='sub2'> <a href='#'>Alavalikko1</a><br> <a href='#'>Alavalikko2</a><br> <a href='#'>Alavalikko3</a><br> </span> <div class='menutitle' onclick=\"SwitchMenu('sub0')\"><a href='#' target='_blank'>Viides</a></div> <div class='menutitle' onclick=\"SwitchMenu('sub0')\"><a href='#'>Kuudes</a></div> <span class='submenu' id='sub0'></span> </div>
Ja siis valikon Kolmas ja Neljäs kohtaan pitäisi saada listattua osoitetusta hakemistosta kaikki hakemistot ja niiden alihakemistot. Toivottavasti kirjoitin ymmärrettävästi.
https://www.ohjelmointiputka.net/koodivinkit/
Tuota muokkaamalla saat, jos nyt käsitin oikein, että mikä oli ongelma :P
Ongelamhan on siis se etten osaa tehdä silmukkaa joka tulostaa kaikki alihakemistot <span> -tagien väliin. Eli listassa ensinmäisen alihakemiston eteen tulee
<span class='submenu' id='sub1'>
ja tähän väliin listataan alihakemistot...
</span>
ja viimeisen alihakemiston jälkeen span suljetaan.
Jos sitä ei vielä mainittu niin tämä on siis valikko johon listataan hakemistoja osoitetusta hakemitosta ja sen alahakemistot.
Noh jos selittäsin sen näin. Eli osoitetusta hakemistosta haetaan kaikki alihakemistot ja niiden alihakemistot jne. Ne listataan Treemenuksi.
Eli:
+-hakemisto1 +-hakemisto2 +-alihakemisto1 +-alihakemisto2 +-alihakemisto3 +-hakemisto3 +-alihakemisto1 +-alihakemisto2 +-alihakemisto4
<?php //mikä hakemisto listataan $perus="listataan/"; // functio suorittaa for silmukan joka tulostaa tarvittavan määrän - merkkejä function laske($a){ for($i=0;$i<$a;$i++){ $sis.=" - "; } return $sis; } // argumentit: listattava hakemisto: $alku, tiedostojen lukumäärä: $tied ja hakemistojen lukumäärä $hak. function listaa($alku, &$tied, &$hak){ global $perus; //napataan vielä $perus messiin if(!file_exists($alku)) exit("<font color=\"red\">ERROR: hakemistoa <b>$perus</b> ei löydy</font>"); // jos hakemistoa ei löydy, niin ilmoitetaan asiasta. foreach(glob("$alku*") as $nimi){ //glob function ja foreach silmukan yhdistelmä käy kaikki hakemiston tiedostot ja alihakemistot läpi ja lukee kunkin vuorollaan $nimi:n. $sis=explode("/", str_replace("$perus", "", $nimi)); //sisennystä varten lasketaan / merkkien lukumäärä $nimi:stä, mutta ensin pitää ottaa turha alkuosa pois echo laske(count($sis)); //tulostetaan sisennys if(is_dir($nimi)){ //jos listattava kohde on hakemisto $hak++; echo "<a href=\"$nimi\" class=\"hak\">".str_replace("$alku", "", $nimi)."</a><br>"; }else{ // ja jos ei $tied++; echo "<a href=\"$nimi\" class=\"fil\">".str_replace("$alku", "", $nimi)."</a> (".(filesize($nimi)/1000)." kt) <br>"; } if(is_dir("$nimi")) listaa($nimi."/", $tied, $hak); // jos löytyy alihakemistoja, niin homma aletaan alusta. } } ?>
Miten saisin tämän koodin lisäämään ensimmäisen alihakemiston eteen <span class='submenu' id='sub2'> ja viimeisen alihakemiston jälkeen </span> tagit? Eli noiden väliin tietenkin listataan nämä alihakemistot.
EDIT: Ei siinä ollutkaan GLOB_ONLYDIR, pitäisi vissiin nukkua enemmän. Joo eli kun $hak == 1, tulostat <span> ja loopin ulkopuolella sitten if ($hak>0) echo "</span>"; Elä ihmettele jos tämä ei toimi, ajatus ei nyt kulje ei suuntaan ei toiseen :).
Niinhän se kaiken järjen mukaan menisi. Mutta miten? Sellaista mietin että jollain funktiolla laskisi nuo alihakemistojen määrän ja sen mukaan lisäisi nuo <span>-tagit. Mutta siis miten? :)
<script type="text/javascript"> var persistmenu="yes" //"yes" or "no". Make sure each SPAN content contains an incrementing ID starting at 1 (id="sub1", id="sub2", etc) var persisttype="sitewide" //enter "sitewide" for menu to persist across site, "local" for this page only if (document.getElementById){ document.write('<style type="text/css">\n') document.write('.submenu{display: none;}\n') document.write('</style>\n') } function SwitchMenu(obj){ if(document.getElementById){ var el = document.getElementById(obj); var ar = document.getElementById("masterdiv").getElementsByTagName("span"); if(el.style.display != "block"){ for (var i=0; i<ar.length; i++){ if (ar[i].className=="submenu") ar[i].style.display = "none"; } el.style.display = "block"; }else{ el.style.display = "none"; } } } function get_cookie(Name) { var search = Name + "=" var returnvalue = ""; if (document.cookie.length > 0) { offset = document.cookie.indexOf(search) if (offset != -1) { offset += search.length end = document.cookie.indexOf(";", offset); if (end == -1) end = document.cookie.length; returnvalue=unescape(document.cookie.substring(offset, end)) } } return returnvalue; } function onloadfunction(){ if (persistmenu=="yes"){ var cookiename=(persisttype=="sitewide")? "switchmenu" : window.location.pathname var cookievalue=get_cookie(cookiename) if (cookievalue!="") document.getElementById(cookievalue).style.display="block" } } function savemenustate(){ var inc=1, blockid="" while (document.getElementById("sub"+inc)){ if (document.getElementById("sub"+inc).style.display=="block"){ blockid="sub"+inc break } inc++ } var cookiename=(persisttype=="sitewide")? "switchmenu" : window.location.pathname var cookievalue=(persisttype=="sitewide")? blockid+";path=/" : blockid document.cookie=cookiename+"="+cookievalue } if (window.addEventListener) window.addEventListener("load", onloadfunction, false) else if (window.attachEvent) window.attachEvent("onload", onloadfunction) else if (document.getElementById) window.onload=onloadfunction if (persistmenu=="yes" && document.getElementById) window.onunload=savemenustate </script> <title>menu</title> </head> <body> <?php //mikä hakemisto listataan $perus="hallinta/sivut/suo/"; // functio suorittaa for silmukan joka tulostaa tarvittavan määrän - merkkejä function laske($a){ for($i=0;$i<$a;$i++){ $sis.="--"; } return $sis; } // argumentit: listattava hakemisto: $alku, tiedostojen lukumäärä: $tied ja hakemistojen lukumäärä $hak. function listaa($alku, &$hak){ global $perus; //napataan vielä $perus messiin if(!file_exists($alku)) exit("<font color=\"red\">ERROR: hakemistoa <b>$perus</b> ei löydy</font>"); // jos hakemistoa ei löydy, niin ilmoitetaan asiasta. foreach(glob("$alku*", GLOB_ONLYDIR) as $nimi){ //glob function ja foreach silmukan yhdistelmä käy kaikki hakemiston tiedostot ja alihakemistot läpi ja lukee kunkin vuorollaan $nimi:n. if(is_dir("$nimi")) $kansio[$nimi] = listaa($nimi."/", $hak); // jos löytyy alihakemistoja, niin homma aletaan alusta. } return $kansio; } echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width='170' height='231'><tr><td valign='top' align='center'>\r\n <table cellspacing=\"0\" cellpadding=\"0\" width='90%' border='0'>\r\n <tr><td height='5' class='yx'> </td></tr><tr><td>\r\n"; echo "<div class='menutitle' onclick=\"SwitchMenu('sub0')\"><a href='index.php?pg=hallinta/sivut/suo/etusivu.txt&id=4'>Etusivu</a></div>\r\n <div class='menutitle' onclick=\"SwitchMenu('sub0')\"><a href='index.php?pg=hallinta/sivut/suo/yritys.txt&id=1'>Yritys</a></div>\r\n"; $hak = 0; $i = 1; // alustetaan muuttujat. foreach(listaa($perus, $hak) as $rivi => $avain) { $name = file_get_contents($rivi. "/name.ini"); print "<div class='menutitle' onclick=\"SwitchMenu('sub{$i}')\"><a href='#'>" . $name . "</a></div>\r\n"; echo "<span class='submenu' id='sub{$i}'>\r\n"; $i++; foreach($avain as $tieto => $sisa){ $subname = file_get_contents($tieto. "/name.ini"); print " <a href='index.php?lng=suo&pg={$tieto}'>" . $subname . "</a><br>\r\n"; } echo"</span>\r\n"; } echo "<div class='menutitle' onclick=\"SwitchMenu('sub0')\"><a href='galleria/' target='_blank'>Galleria</a></div>\r\n <div class='menutitle' onclick=\"SwitchMenu('sub0')\"><a href='index.php?pg=hallinta/sivut/suo/yht.txt'>Yhteydenotto</a></div>\r\n </div>\r\n"; ?>
Nyt sitten listaus toimii miten halusinkin, mutta itse valikko ei toimi oikein :P Nämä valikon hakemistosta listatut kohdat eivät avaudu niinkuin treemenussa on tapana.
Ratkaisu löyty :P
Aihe on jo aika vanha, joten et voi enää vastata siihen.