Sitemap erstellen

AIKler

Erfahrenes Mitglied
Hi Leute

Immer mehr Internetseiten haben jetzt eine so genannte Sitemap veröffentlicht. Find ich ja ganz praktisch wenn man mal ne Seite sucht aber ich möchte sowas nicht manuell in HTML oder PHP schreiben. Gibt es da nicht einen Trick?


Ich glaube mal was gehört zu haben, dass ich unter PHP alle Dateien unterhalb eines Verzeichnisses mit dem entsprechenden Verzeichnispfad anzeigen lassen kann!

Kann mir da einer helfen oder muss ich doch etwa :rtfm: machen?

Ich bräuchte es für meine Projektarbeit (Abgabeschluss: Montag 18.06.07)

Vielen Dank
 
Mit der Funktion von php.net kannst du ein Verzeichnis auslesen:
PHP:
<?php
if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            echo "$file\n";
        }
    }
    closedir($handle);
}
?>
 
Hey, ich mag die Faulheit...
deswegen hier ein Script von mir. Ich war damals zu blöd für klassen usw, aber ich denke es sollte verständlich sein.

PHP:
<?php
// ### INFOS ###
// 1. Ordner ohne index.php datei werden nicht aufgelistet
// 2. Ordner selbst werden auf /ordner/index.php verlinkt
// 3. Vorraussetzung ist, dass die Pfade bzw. Verzeichnisse genau so benannt sind wie die GET_Parameter
// 4. Es sind nur .php Datein zum includen über die GET Parameter vorgesehen


// Config
$index_path = "index.php?";			// (Pfad/)Datei, an welche die GET_Parameter der Links geschickt werden (z.B. "index.php?" , die Links sind dann "index.php?a=xxx&b=yyy" )
$parameter = array (				// $_GET Parameter zum includen in die Datei "$index_path" ( z.B. ?a=xxx&b=yyy&c=index ). Es sind 4 hirachische Stufen vorgesehen.
	"para0"=>"a=",
	"para1"=>"&amp;b=",
	"para2"=>"&amp;c=",
	"para3"=>"&amp;d=");
$dir_start_map = "content/";		// Verzeichniss welches Ausgelesen wird (relativ zu dieser Datei, mit Slash am Ende (z.B.  "dir/" )
$listed_extensions = array(			// Dateiendungen welche ausgelesen werden (z.B. "php", "xml"); ohne Punkt vor Endung
	"php", "xml" , "pdf");
$unlisted_suffix = ".inc";			// Teil des Dateinamens von Dateien welche nicht mit gelistetet werden sollen (z.B. ".inc" für "menu.inc.php")

// lädt Array zum Umformen der Dateinamen in den ausgegebenen Text der Links. Wird in der Funktion text() verwendet. Beides kann ggf. gelöscht werden.
require_once("config/confic_breadcrump.php");

// End Cofig

// Prüft, ob dateityp ausgegeben wird
function file_extension($file){

	global $listed_extensions;

	$path_parts = pathinfo($file);

	if(in_array($path_parts["extension"] , $listed_extensions ) ){
		return true;
	}else{
		return false;
	}
}

// Filtert Dateien mit speziellem Namen bzw. Namensteil (z.B. inhalt.inc.php -> .inc Dateien werden nicht ausgelesen)
function file_name($file){

	global $unlisted_suffix;

	$list_file = strpos($file, $unlisted_suffix);

	$path_parts = pathinfo($file);	// verhindert das listen der index.php's
	if($path_parts["basename"] == "index.php"){
		$list_indexfile = true;
	}

	if($list_file === false and $list_indexfile == false){
		return true;
	}else{
		return false;
	}
}

// Erzeugt Pfade
function  url($path){

	global $parameter;
	global $index_path;
	global $dir_start_map;

	$clean_path = ereg_replace($dir_start_map."/", "", $path);

	$path_parts = pathinfo($path);	// nur wenn es eine .php Datei ist, wird Pfad mit Parametern umgebaut, sonst bleibt er

	if($path_parts["extension"] != "php" and !is_dir($path)){	// !is_dir, damit Pfad auf Ordner nicht betroffen ist
		$url = $dir_start_map.$clean_path;
		return $url;
		exit;
	}
	// Pfad für .php Dateien
	$url_parts = explode("/" , $clean_path);

	if(is_dir($path) ){				// erweitet die Pfade der Verzeichnisse um /index um auf die darin liegende index-Datei zu verwisen
	$url_parts[] = "index";
	}

	for($i=0; $i < count($url_parts); $i++){
		$url .= "para".$i.$url_parts[$i];
	}

	$parameter[".php"] = ""; 		// fügt "php"=>"" dem Array hinzu um .php zu entfernen

	$url = strtr($index_path.strtr($url, $parameter), array("?a=index"=>""));	 // entf. a=index, startseite nicht includen

	return $url;
}

// Formt Dateinamen in Text der Links um. Benötigt "config/confic_breadcrump.php"
function text($txt){

	global $_show;

	$_show[".php"]= "";

	return ucwords(strtr($txt, $_show ));
}


// Liest Verzeichnisse aus (ruft sich selbst auf um Unterverzeichnisse mitzunehmen)
function get_dir ($dir) {

	//global $index_path;

	$fp=opendir($dir);
		while($datei=readdir($fp)) {

			$path = "$dir/$datei";

			if (is_dir($path) && $datei!="." && $datei!=".." and file_exists($path."/index.php")) {  // wenn es ein Verzeichnis mit index.php ist

  				echo "<li><a href=\"".url($path)."\"class=\"parent\">".text($datei)."</a> \n";
				echo "<ul> \n";

				get_dir("$dir/$datei");

				echo "</li>\n</ul>\n";

			}elseif( ($datei!="." && $datei!="..") and file_extension($datei) == true and file_name($datei)== true){ // wenn es eine erlaubte datei ist

	  			 echo "<li><a href=\"".url($path)."\">".text($datei)."</a></li> \n";

			}
 		}
 	closedir($fp);
}

echo "<ul class=\"sitemap\"> \n";

get_dir($dir_start_map);

echo "</ul>\n";
?>
 
Hab jetzt mal was mit Hilfen aus dem Netz selber erstellt, funktionieren tut es jedoch leider nicht. Kann mir jemand Helfen?

PHP:
 function readfiles($vz)
 {
 if ($handle = opendir($vz))
 {
     while (false !== ($file = readdir($handle)))
     {
         if ($file != "." && $file != "..")
     {
          if (is_file($file))
              {
                  echo "<a href='$vz/$file'>$vz/$file</a><br>";
              }
              elseif (is_dir($file))
              {
                   readfiles('$vz/$file');
              }
     }
     }
     closedir($handle);
 }
 }

Das skript gibt alle Dateien die im gleichen VZ sind aus, jedoch liest es keine UVZs aus.
 
Zurück