Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Wyszukiwarka na stronie
Forum PHP.pl > Forum > PHP
jj09
Witam, mam taki oto skrypt wyszukiwarki:
  1. <?
  2. function szukanie($szukane) {
  3.  
  4. $szukaj = explode(" ", $szukane);
  5.  
  6.  
  7. $sciezki[] = "./";  // katalog, w którym jest skrypt
  8. $roz = ".txt|.php";
  9.  
  10. for ($i=0;$i<count($sciezki);$i++) {
  11. $katalog = opendir($sciezki[$i]);
  12. while ($plik = readdir($katalog)) {
  13. if ($plik<>"." and $plik<>".." and !is_dir($sciezki[$i].$plik)) {
  14. if (eregi("($roz)($)",$plik)) $lista[] = $sciezki[$i].$plik;
  15. }
  16. }
  17. closedir($katalog);
  18. }
  19.  
  20.  
  21. $ile = count($lista);
  22. for ($i=0;$i<$ile;$i++) {
  23. $f = fopen($lista[$i], "r");
  24. $zawartosc = fread($f, filesize($lista[$i]));
  25. fclose($f);
  26. $jest = "tak";
  27. $ileszuk=count($szukaj);
  28. for ($j=0;$j<$ileszuk;$j++) {
  29. preg_match_all("/".$szukaj[$j]."/i", $zawartosc, $li);
  30. if (count($li[0])<1) {$jest="nie"; break;}
  31. }
  32. if ($jest=="tak") $sa[] = $lista[$i];
  33. }
  34.  
  35. $ile = count($sa);
  36. if ($ile>0) {
  37. sort($sa);
  38. for ($i=0;$i<$ile;$i++) {
  39. echo "<br /><a href=\"".$sa[$i]."\">" . $sa[$i]. "</a>";
  40. }
  41. }
  42. else { echo "<br />Nic nie znaleziono";}
  43. }
  44.  
  45.  
  46. $szukane = $_GET["szukane"];
  47.  
  48. if ($szukane<>"") { szukanie($szukane); }
  49. ?>


I jak wyszukuje to wyniki wyglądają tak:
  1. <?php
  2. <br /><a href="./cv.php">./cv.php</a>
  3. <br /><a href="./home.php">./home.php</a>
  4. ?>


I chciałbym go zmodyfikować następująco:
ponieważ mam podstrony includowane to chciałbym, żeby wyniki wyświetlały się w ten sposób:
  1. <?php
  2. <br /><a href="index.php?txt=cv">krótkie cv</a>
  3. <br /><a href="index.php?txt=home">strona g&#322;ówna</a>
  4. ?>

czyli zamienić ścieżkę do pliku na:
1) adres
2) nazwę

Dałoby radę takie coś w tym skrypcie zrobić?
loganek
ad 1
skrypt:
Kod
for ($i=0;$i<$ile;$i++) {
      echo "<br /><a href=\"".$sa[$i]."\">" . $sa[$i]. "</a>";
    }

zamień na:
Kod
for ($i=0;$i<$ile;$i++) {
      echo "<br /><a href=\"index.php?txt=".$sa[$i]."\">" . $sa[$i]. "</a>";
    }

ad 2
a skąd tą nazwę chcesz pobierać?
jj09
fak...źle zapisałem jak miałby link wyglądać...już poprawione...więc link miałby być taki:

index.php?txt=home

czyli oprócz dopisania "index.php?txt=" trzeba także wyciągnąć rozszerzenie...a nie bardzo wiem jak to zrobić;/

a nazwę możnaby jakoś zdefiniować w skrypcie bo nie mam dużo podstron
loganek
no to tamten kod zamień na taki:
Kod
$tabl["home"]="Katalog domowy";
$tabl["cv"]="Moje CV";
//i tak dalej
for ($i=0;$i<$ile;$i++) {$doklej=substr($sa[$i], 0, strlen($sa[$i])-4);
      echo "<br /><a href=\"index.php?txt=".$doklej."\">" . $tabl[$doklej]. "</a>";
    }
mysle ze sie domyslisz o co chodzi
jj09
jasne, że wiem;)

szkoda tylko, że zapomniałem dodać sobie subskrypcji tego tematu(gdzieś w panelu można było ustawić, żeby wszystkie tematy w których odpowiem były automatycznie subskrybowane...tylko nie pamiętam gdzie?) i mi powiadomienia na maila nie przychodziły...i w tym czasie wymąciłem i skrypt wygląda tak:
  1. <?
  2. function szukanie($szukane) {
  3.  
  4. $szukaj = explode(" ", $szukane);
  5.  
  6.  
  7. $sciezki[] = "./";  // katalog, w którym są przeszukiwane pliki
  8. $roz = ".txt|.php";
  9. $del = array('.php' => '', './' => '');
  10.  
  11. //$description['nazwa_pliku'] = 'opis+nazwa_pliku';
  12. $description['index'] = 'strona główna';
  13. $description['home2'] = 'strona główna';
  14. $description['omnie'] = 'o mnie';
  15. $description['cv'] = 'krótkie cv';
  16. $description['ui'] = 'usługi informatyczne';
  17. $description['portfolio'] = 'portfolio';
  18. $description['flexworld'] = 'flexworld';
  19. $description['bogatyojciec'] = 'bogaty ojciec';
  20. $description['config'] = 'mój komputer';
  21. $description['linki'] = 'linki';
  22. $description['bo1'] = 'bogaty ojciec';
  23. $description['bo2'] = 'bogaty ojciec';
  24. $description['bo3'] = 'bogaty ojciec';
  25. $description['bo4'] = 'bogaty ojciec';
  26. $description['bo5'] = 'bogaty ojciec';
  27. $description['bo6'] = 'bogaty ojciec';
  28. $description['boksiazki'] = 'bogaty ojciec';
  29. $description['bocashflow'] = 'bogaty ojciec';
  30.  
  31.  
  32.  
  33. for ($i=0;$i<count($sciezki);$i++) {
  34. $katalog = opendir($sciezki[$i]);
  35. while ($plik = readdir($katalog)) {
  36. if ($plik<>"." and $plik<>".." and !is_dir($sciezki[$i].$plik)) {
  37. if (eregi("($roz)($)",$plik)) $lista[] = $sciezki[$i].$plik;
  38. }
  39. }
  40. closedir($katalog);
  41. }
  42.  
  43.  
  44. $ile = count($lista);
  45. for ($i=0;$i<$ile;$i++) {
  46. $f = fopen($lista[$i], "r");
  47. $zawartosc = fread($f, filesize($lista[$i]));
  48. fclose($f);
  49. $jest = "tak";
  50. $ileszuk=count($szukaj);
  51. for ($j=0;$j<$ileszuk;$j++) {
  52. preg_match_all("/".$szukaj[$j]."/i", $zawartosc, $li);
  53. if (count($li[0])<1) {$jest="nie"; break;}
  54. }
  55.  if ($jest=="tak") $sa[] = strtr($lista[$i], $del);
  56. }
  57.  
  58. $ile = count($sa);
  59. if ($ile>0) {
  60. sort($sa);
  61. echo "Frazę znaleziono na następujących stronach:";
  62. for ($i=0;$i<$ile;$i++) {
  63. echo "<br />";
  64. echo (isset($description[$sa[$i]])) ? "<a href=\"index.php?txt=".$sa[$i]."\">" . $description[$sa[$i]]. "</a>" : "<a href=\"index.php?txt=".$sa[$i]."\">" . $sa[$i]. "</a>";
  65. }
  66. }
  67. else { echo "<br />Nic nie znaleziono";}
  68. }
  69.  
  70.  
  71. $szukane = $_GET["szukane"];
  72.  
  73. if ($szukane<>"") { szukanie($szukane); }
  74. ?>


chciałem jeszcze zrobić modyfikację, aby przeszukiwało tylko kod znajdujący się pomiędzy znacznikami <title></tile> i <body></body>:

ten kod:
  1. <?
  2. preg_match_all("/$szukane/i", $zawartosc, $li);
  3. ?>


zastąpiłem:
  1. <?
  2. $zawartosc = preg_replace("/\n/i","",$zawartosc);
  3. $zawartosc = preg_replace("/r/i","",$zawartosc);
  4.  
  5. preg_match_all("/(<title>.*$szukane.*?</title>|<body.*?>.*$szukane.*?</body>)/i", $zawartosc, $li);
  6. ?>


No i teraz przeszukuje tylko stronę główną...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.