Avatar billede Chewie Novice
29. august 2006 - 09:56 Der er 12 kommentarer og
1 løsning

automatisk sitemap

Hej exp´er

Jeg bruger nedenstående script til at lave et sitemap - nu vil jeg gerne udvide den lidt.

Er det muligt at udvide det sådan at Scriptet lister alle php og html filer der ligger under et domæne ?

og ikke som det er nu kun php filer i en mappe

--------------------------------------------
<?php
function listdir($dir, $search) {
  $mappe = @opendir($dir) or die ("ikke fundet");
  while($fil = readdir($mappe)) {
      if ($fil != "." && $fil != "..") {
          if (preg_match("/$search/i", $fil) && !is_dir($dir . $fil)) {
              $filer[] = $fil;
          }
      }
  }
  if (count($filer) != 0) {
      sort($filer);
      foreach ($filer as $fil) {
          $niceFil = substr($fil, 0, (strlen($fil) - 4) );
          echo "<a href=\"$fil\">$niceFil</a>&nbsp;&nbsp;";
      }
  }
  closedir($mappe);
  $mappe = @opendir($dir) or die ("ikke fundet");
  while($fil = readdir($mappe)) {
      if ($fil != "." && $fil != "..") {
          if (is_dir($dir . $fil)) {
              listdir($dir .$fil ."/", $search);
          }
      }
  }
}

$search = "php";
$bunddir = "./";
listdir($bunddir, $search);
?>
-------------------------------------
Avatar billede michaeltryl Seniormester
29. august 2006 - 10:17 #1
det der er smart, jeg lytter lige med
Avatar billede coderdk Praktikant
29. august 2006 - 12:42 #2
Er det ikke bare:

<?php
function listdir($dir, $search) {
  $mappe = @opendir($dir) or die ("ikke fundet");
  while($fil = readdir($mappe)) {
      if ($fil != "." && $fil != "..") {
          if (preg_match("/$search/i", $fil) && !is_dir($dir . $fil) && preg_match( "/(php|html?)$/", $file )) {
              $filer[] = $fil;
          }
      }
  }
  if (count($filer) != 0) {
      sort($filer);
      foreach ($filer as $fil) {
          $niceFil = preg_replace( "/(\w+)\.\w+$/", "\\1", $fil );
          echo "<a href=\"$fil\">$niceFil</a>&nbsp;&nbsp;";
      }
  }
  closedir($mappe);
  $mappe = @opendir($dir) or die ("ikke fundet");
  while($fil = readdir($mappe)) {
      if ($fil != "." && $fil != "..") {
          if (is_dir($dir . $fil)) {
              listdir($dir .$fil ."/", $search);
          }
      }
  }
}

$search = "php";
$bunddir = "./";
listdir($bunddir, $search);
?>
Avatar billede Chewie Novice
29. august 2006 - 12:48 #3
kræver det ikke at php filen ligger i roden ?
Avatar billede coderdk Praktikant
29. august 2006 - 13:05 #4
Den kræver det samme som din oprindelige - jeg har bare rettet den lidt til...

Jeg har lige lavet en anden en, som jeg selv godt kan lide:

    define( "PAD", 10 );
    define( "FILES", "php,htm,html" );
   
    function dirTree( $path, $level = 0 )
    {
        $result = array();
        $path .= ( substr( $path, -1 ) == '/' ? '' : '/' );
        $dirs = glob( $path . "*", GLOB_ONLYDIR | GLOB_NOSORT );
        natsort( $dirs );
        foreach ( $dirs as $dir )
        {
            echo str_repeat( "\t", $level ) . "<div style=\"margin-left: " .
                $level * PAD . "px; font-weight: bold\">" .
                basename( $dir ) . "</div>\n";
            dirTree( $dir, $level + 1 );
        }

        $tmp = glob( $path . "*.{" . FILES . "}", GLOB_NOSORT | GLOB_BRACE );
        $files = array();
        foreach ( $tmp as $file )
        {
            if ( !is_dir( $file ) )
            {
                $files[] = $file;
            }
        }
        natsort( $files );
        foreach ( $files as $fil )
        {
            $fname = preg_replace( "/(\w+)\.\w+$/", "\\1", basename( $fil ) );
            echo str_repeat( "\t", $level ) . "<div style=\"margin-left: " .
                $level * PAD . "px\"><a href=\"$fil\">$fname</a></div>\n";
        }
    }
    dirTree( "." );
Avatar billede Chewie Novice
29. august 2006 - 13:22 #5
jeg har valgt at ligge mit sitemap i en mappe så stien er www.xdomain.dk/sitemap/index.php

kan man fortælle scriptet at det skal tage alle filer under domænet og ikke kun i den mappe hvor det ligger ? (det er ok hvis du tager udgangspunk i din egen)
Avatar billede coderdk Praktikant
29. august 2006 - 13:26 #6
Ja, du kalder bare: dirTree( "../" ); for at gå én level tilbage, lige som du satte $bunddir på din egen :)
Avatar billede coderdk Praktikant
29. august 2006 - 13:27 #7
Du kan måske fjerne de steder hvor der står str_repeat( "\t", $level ) - det er bare for at kildekoden skulle se pæn ud, så det er ligegyldigt ;)
Avatar billede michaeltryl Seniormester
29. august 2006 - 13:33 #8
lige et lille spørgsmål.
kan man få den til at udelukke bestemte mapper hvis der er nogen som man ikke vil have med på sitemappen?
jeg vil godt oprette et nyt spørgsmål og give point for svar
Avatar billede Chewie Novice
29. august 2006 - 13:36 #9
godt spg :)
Avatar billede coderdk Praktikant
29. august 2006 - 13:37 #10
michealtryl, det er blot at lave et array med de mapper du ikke vil vise og lave en if her:

        foreach ( $dirs as $dir )
        {
            echo str_repeat( "\t", $level ) . "<div style=\"margin-left: " .
                $level * PAD . "px; font-weight: bold\">" .
                basename( $dir ) . "</div>\n";
            dirTree( $dir, $level + 1 );
        }

f.eks.

        $dontShow = array( "mappe/undermappe/", "hemmelig/" );
        foreach ( $dirs as $dir )
        {
            if ( !in_array( $dir, $dontShow ) )
            {
              echo str_repeat( "\t", $level ) . "<div style=\"margin-left: " .
                  $level * PAD . "px; font-weight: bold\">" .
                  basename( $dir ) . "</div>\n";
              dirTree( $dir, $level + 1 );
            }
        }
Avatar billede Chewie Novice
29. august 2006 - 13:40 #11
ok så kommer den færdige kode til at se sådan ud

-------------------------------
    define( "PAD", 10 );
    define( "FILES", "php,htm,html" );
 
    function dirTree( $path, $level = 0 )
    {
        $result = array();
        $path .= ( substr( $path, -1 ) == '/' ? '' : '/' );
        $dirs = glob( $path . "*", GLOB_ONLYDIR | GLOB_NOSORT );
        natsort( $dirs );
        $dontShow = array( "mappe/undermappe/", "hemmelig/" );
        foreach ( $dirs as $dir )
        {
            if ( !in_array( $dir, $dontShow ) )
            {
              echo str_repeat( "\t", $level ) . "<div style=\"margin-left: " .
                  $level * PAD . "px; font-weight: bold\">" .
                  basename( $dir ) . "</div>\n";
              dirTree( $dir, $level + 1 );
            }
        }
        $tmp = glob( $path . "*.{" . FILES . "}", GLOB_NOSORT | GLOB_BRACE );
        $files = array();
        foreach ( $tmp as $file )
        {
            if ( !is_dir( $file ) )
            {
                $files[] = $file;
            }
        }
        natsort( $files );
        foreach ( $files as $fil )
        {
            $fname = preg_replace( "/(\w+)\.\w+$/", "\\1", basename( $fil ) );
            echo str_repeat( "\t", $level ) . "<div style=\"margin-left: " .
                $level * PAD . "px\"><a href=\"$fil\">$fname</a></div>\n";
        }
    }
    dirTree( "../" );
------------------------
Avatar billede coderdk Praktikant
29. august 2006 - 13:52 #12
Hmm nej der var en fejl ang. foldere der skal skjules:

    define( "PAD", 10 ); // Pixels to indent each new level
    define( "FILES", "php,htm,html" ); // What file extensions to show
    // List of directories NOT to show in map
    $dontShow = array( "show_this/but_not_this", "secret", "admin" );
   
    // Do not change this
    $prepared = false;
   
    function dirTree( $path, $level = 0 )
    {
        global $dontShow, $prepared;
        $path .= ( substr( $path, -1 ) == '/' ? '' : '/' );
        if ( !$prepared )
        {
            $prepared = true;
            $n = count( $dontShow );
            for ( $i = 0; $i < $n; $i++ )
            {
                $dontShow[$i] = $path . $dontShow[$i];
            }
        }
        $dirs = glob( $path . "*", GLOB_ONLYDIR | GLOB_NOSORT );
        natsort( $dirs );
        foreach ( $dirs as $dir )
        {
            if ( !in_array( $dir, $dontShow ) )
            {
                echo str_repeat( "\t", $level ) . "<div style=\"margin-left: " .
                    $level * PAD . "px; font-weight: bold\">" .
                    basename( $dir ) . "</div>\n";
                dirTree( $dir, $level + 1 );
            }
        }

        $tmp = glob( $path . "*.{" . FILES . "}", GLOB_NOSORT | GLOB_BRACE );
        $files = array();
        foreach ( $tmp as $file )
        {
            if ( !is_dir( $file ) )
            {
                $files[] = $file;
            }
        }
        natsort( $files );
        foreach ( $files as $fil )
        {
            $fname = preg_replace( "/(\w+)\.\w+$/", "\\1", basename( $fil ) );
            echo str_repeat( "\t", $level ) . "<div style=\"margin-left: " .
                $level * PAD . "px\"><a href=\"$fil\">$fname</a></div>\n";
        }
    }
   
    dirTree( "." );

Så er der kommenteret en LILLE smule også :)
Avatar billede Chewie Novice
24. januar 2007 - 14:49 #13
michaeltryl >> du skulle måske lige følge med her :) http://www.eksperten.dk/spm/758164
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester