Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Hakemistolistaaja tulostaa väärään paikkaan vääriä kansioita

Macro [09.02.2010 16:28:44]

#

Tein yhden koodivinkin pohjalta seuraavan systeemin sivustonhallintajärjestelmää varten:

<?php
function listaa($alku, &$tied, &$hak) {
	global $kansio, $kuvat, $txt;
	$k = 0;

	if(!file_exists($alku)) die("Hakemistoa ei löytynyt!");

	foreach(glob("$alku*") as $nimi) {
		$sis = explode("/", str_replace("$kansio", "", $nimi));
		echo laske(count($sis) - 2);

		if(is_dir($nimi)) {
			$hak++;
			if($nimi != "..") {
				$k = "<img src=\"img/iconset/m_dir.gif\"> ";
				$piilota = " (<a href=\"javascript: kansio('$nimi')\">Piilota / Näytä</a>)";
			} else {
				$k = "";
				$piilota = "";
			}

			echo "$k<a href=\"$nimi\">" . str_replace("$alku", "", $nimi) . "</a>$piilota<br>";
		 } else {
			$tied++;

			$paate = explode(".", str_replace("$alku", "", $nimi));
			if(in_array($paate[1], $kuvat)) $p = "m_image.gif\" title=\"Kuva";
			else if(in_array($paate[1], $txt)) $p = "m_text.gif\" title=\"Tekstitiedosto";
			else $p = "m_unknown.gif\" title=\"Tuntematon tiedosto";

			if(in_array(end($paate), $txt)) $muokkaus = "<a href=\"muokkaa.php?nimi=$nimi\"><img src=\"img/iconset/edit.gif\" title=\"Muokkaa\"></a>";
			else $muokkaus = "<img src=\"img/iconset/edit.gif\" title=\"Tätä tiedostoa ei voi muokata\">";

			echo "$muokkaus <a href=\"javascript: poista('" . str_replace("$alku", "", $nimi) . "', '$nimi')\"><img src=\"img/iconset/delete.gif\" title=\"Poista " . str_replace("$alku", "", $nimi) . "\"></a> <img src=\"img/iconset/$p\"> <a href=\"$nimi\">" . str_replace("$alku", "", $nimi) . "</a><br>";
		}
		if(is_dir("$nimi")) {
			echo "<div id=\"$nimi\" style=\"display: block;\">";
			listaa($nimi . "/", $tied, $hak);
			echo "</div>\n";
		}

		$k++;
	}
}

Tämän pitäisi listata kaikki kansiot ../ kansiosta alkaen. Nyt käy niin, että osa kansioista on aivan väärässä paikassa (Esim, kansion x alihakemisto y on suoraan ennen x-hakemistoa). Lisäksi sen pitäisi ohittaa kansio jossa se on, ja sen alihakemistot.

Metabolix [09.02.2010 19:54:26]

#

Olet tehnyt tuon kovin sotkuisesti. Katsopa funktioni tästä vanhasta keskustelusta.

Nykyisen hakemiston voisi tarkistaa näin:

<?php
if ($hakemisto == "../".basename(dirname(__FILE__))) {
  return;
}

Tarkistusta ei ole minusta järkevää laittaa suoraan funktioon, vaan ennemmin sille voisi antaa ylimääräisiä parametreja kuten taulukon ohitettavista nimistä.

Älä kokoa tulostettavia asioita muuttujiin, tuo on todella epäselvää. Käsittele mieluummin asiat tulostusjärjestyksessä ja tulosta suoraan, tai jos laitat jotain muuttujaan, laita edes selkeä kokonaisuus. Tuo src-title-viritys on aivan erityisen ruma.

$nimi ei yleensä ole kelvollinen id, tarkista jostain id:n merkkivaatimukset. Muista urlencode($nimi) linkeissä.

Vastaus

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

Tietoa sivustosta