Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP - Alihakemistot

Sivun loppuun

Faarao [02.11.2005 15:46:58]

#

<?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.

Mazuli [02.11.2005 15:53:43]

#

En nyt ole varma, mutta kokeile

<?php
function listaa($hak)
{
  $filut = glob("$hak/*");

  foreach($filut as $filu)
  {
   if(is_dir($filu))
   {
     print $filu. "<br>";
     listaa($filu);
   }

  }
}
?>

Faarao [02.11.2005 16:00:18]

#

Kiitos. Näin sen toimii oikein.

Sellainen vain vielä että miten voisin tarkistaa että mitkä alihakemistot on samassa hakemistossa?

Faarao [02.11.2005 17:10:24]

#

Faarao kirjoitti:

Sellainen vain vielä että miten voisin tarkistaa että mitkä alihakemistot on samassa hakemistossa?

Mazuli [02.11.2005 17:55:10]

#

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

<?php

$kansiot = array( "kuvat" => array( "hyvat", "huonot" )
                  "koodit" => array( "php", "js" ));

?>

jne....

Faarao [09.11.2005 13:27:20]

#

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'>
	&nbsp;&nbsp;&nbsp;<a href='#'>Alavalikko1</a><br>
	&nbsp;&nbsp;&nbsp;<a href='#'>Alavalikko2</a><br>
	&nbsp;&nbsp;&nbsp;<a href='#'>alavalikko3</a><br>
	&nbsp;&nbsp;&nbsp;<a href='#'>alavalikko4</a>
	</span>

	<div class='menutitle' onclick=\"SwitchMenu('sub2')\"><a href='#'>Neljäs</a></div>
	<span class='submenu' id='sub2'>
	&nbsp;&nbsp;&nbsp;<a href='#'>Alavalikko1</a><br>
	&nbsp;&nbsp;&nbsp;<a href='#'>Alavalikko2</a><br>
	&nbsp;&nbsp;&nbsp;<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.

ipe [09.11.2005 14:50:34]

#

https://www.ohjelmointiputka.net/koodivinkit/24826-php-listaaja

Tuota muokkaamalla saat, jos nyt käsitin oikein, että mikä oli ongelma :P

Faarao [17.11.2005 09:46:50]

#

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.

Faarao [28.11.2005 12:03:28]

#

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

Faarao [30.11.2005 15:28:11]

#

<?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.

tsuriga [30.11.2005 16:08:55]

#

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 :).

Faarao [30.11.2005 16:47:58]

#

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? :)

Faarao [01.12.2005 11:22:27]

#

<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'>&nbsp;</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 "&nbsp;&nbsp;&nbsp;<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.

Faarao [01.12.2005 12:49:50]

#

Ratkaisu löyty :P


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta