Avatar billede jahamnej Nybegynder
28. august 2005 - 14:34 Der er 12 kommentarer og
1 løsning

Omdanne links i søgemaskine

Hej hej allesammen, jeg er lidt i knibe med en søgemaskine, og håber at nogen ved hvordan man løser følgende problem.

Jeg har dette script til at søge med...

<?php

if(isset($_GET['sSearch']))
{
    $dir = "lalalablhablah/Pages"; //Dit HTML bibliotek

    // Open a known directory, and proceed to read its contents
    if (is_dir($dir))
    {
        if ($dh = opendir($dir))
        {
            while (($file = readdir($dh)) !== false)
            {
                if (is_file($dir . $file))
                {
                    $indhold = file_get_contents($dir . $file);
                    $searchString = "/.{0,150}" . $_GET['search'] . ".{0,150}/si";
                    if (preg_match($searchString, strip_tags($indhold), $match))
                    {
                      $fileName = substr($file, 0, strrpos($file, "."));
                      echo "<a href=\"Template_A.php?page=../Pages/" . $fileName . "\">" . $fileName . "</a> :<br> " .  $match[0] . "...<br><br>";
                    }
                    //Her skal vi så søge i filens indhold... Og det kan godt komme til at tage noget tid...
                }
            }
            closedir($dh);
        }
        else
        {
            echo "opendir failed";
        }
    }
    else
    {
        echo "$dir is not a Directory";
    }
}

?>


Det virker også fint, når den går ind og søger i mine html filer i mappen Pages. Mit problem er bare at pages, består af forskellige mindre elementer, som bliver bundet sammen af andre sider. Så hvis jeg søger nu, finder den måske en fil ved navn "minprofil", og viser den alene. I virkeligheden skal det element sidde på en hel side med andre elementer, relateret til "minprofil".

Søge-scriptet siger jo at linket skal hedde - Template_A.php?page=../Pages/ og så + den fil den fandt

Jeg kunne selvfølgelig bare sige at linket skal lege med end anden mappe... f.eks Template_A.php?page=../Sogefix/ , og så oprette en masse filer, hvor navnene afspejler dem i Pages, men hvor indholdet redirecter til den fulde sammensatte side. Det virker dog lidt snørklet, og totalt spaghetti-agtigt...

Så jeg tænke om man måske kunne lave nogle variabler, hvor man f. eks siger, hvis den finder "minprofil", så jeg har en variabel der siger "minprofil" = den her side...

Ved overhovedet ikke om det er muligt, og som man nok kan se, er jeg totalt noob... anyways, hvis nogle kan se den "lette" løsning, så skriv gerne!!
Avatar billede nielle Nybegynder
28. august 2005 - 18:22 #1
Hvor mange filer drejer det egnetligt sig om? 10, 100, 1000?
Avatar billede jahamnej Nybegynder
28. august 2005 - 22:14 #2
Det drejer sig vel omkring 45-60 stk...
Avatar billede nielle Nybegynder
28. august 2005 - 23:28 #3
Ok, men så ligger antallet lige omkring der hvor at jeg selv ville vælge imellem om jeg ville have oversættelses-tabellen liggende i en database eller om jeg ville have den liggende hårdkodet i PHP-koden. Hvilken løsning ville du foretrække?
Avatar billede jahamnej Nybegynder
29. august 2005 - 09:49 #4
Jeg ville foretrække i scriptet, da jeg faktisk ikke bruger en database til dette "projekt"
Avatar billede nielle Nybegynder
29. august 2005 - 10:10 #5
Det kunne så se ud på nogenlunde denne måde:

<?php
if (isset($_GET['sSearch']))
{
    $dir = "lalalablhablah/Pages"; //Dit HTML bibliotek

    // Open a known directory, and proceed to read its contents
    if (is_dir($dir))
    {
        if ($dh = opendir($dir))
        {
            while (($file = readdir($dh)) !== false)
            {
                if (is_file($dir . $file))
                {
                    $indhold = file_get_contents($dir . $file);
                    $searchString = "/.{0,150}" . $_GET['search'] . ".{0,150}/si";
                    if (preg_match($searchString, strip_tags($indhold), $match))
                    {
                        $fileName = substr($file, 0, strrpos($file, "."));
                        $fileName = trueFileName($fileName);
                        echo "<a href=\"Template_A.php?page=../Pages/" . $fileName . "\">" . $fileName . "</a> :<br> " .  $match[0] . "...<br><br>";
                    }
                    // Her skal vi så søge i filens indhold... Og det kan godt komme til at tage noget tid...
                }
            }
            closedir($dh);
        }
        else
        {
            echo "opendir failed";
        }
    }
    else
    {
        echo "$dir is not a Directory";
    }
}

function trueFileName($aFileName)
{
    switch ($aFileName)
    {
        case "minProfil.php" :
            return "sidenHvorMinProfilIndgår.php"
            break;
        case "enAndenUnderside.php" :
            return "sidenHvorEnAndenUndersideIndgår.php"
            break;
        // osv. for alle 50 filer ...
        default :
            return $aFileName;  // Denne fanger de tilfælde hvor vi har glemt en fil i listen.
            break
    }
}
?>
Avatar billede nielle Nybegynder
29. august 2005 - 10:13 #6
Jeg ville umiddelbart tro at du kunne undvære break-sætningerne i switch'en.

Et spørgsmål: Kan siden minProfil.php indgå i mere end én af de andre filer? Altså sådan at man faktisk burde give mere end ét link når søgeteksten blev fundet i minProfil.php?
Avatar billede jahamnej Nybegynder
29. august 2005 - 10:34 #7
ja, du siger noget.... det har jeg ikke en gang tænkt over. DEr er sikkert nogle "sider" som vil gå igen... eller jo, det er der rent faktisk. Spørgsmålet er om det er et større problem at tilføje det?
Avatar billede nielle Nybegynder
29. august 2005 - 19:34 #8
Ikke noget større problem; Vi går bare over til at basere løsningen på et array:

<?php
if (isset($_GET['sSearch']))
{
    $dir = "lalalablhablah/Pages"; //Dit HTML bibliotek

    // Open a known directory, and proceed to read its contents
    if (is_dir($dir))
    {
        if ($dh = opendir($dir))
        {
            while (($file = readdir($dh)) !== false)
            {
                if (is_file($dir . $file))
                {
                    $indhold = file_get_contents($dir . $file);
                    $searchString = "/.{0,150}" . $_GET['search'] . ".{0,150}/si";
                    if (preg_match($searchString, strip_tags($indhold), $match))
                    {
                        $fileName = substr($file, 0, strrpos($file, "."));
                        $fileNames = trueFileName($fileName);

                        foreach ($fileNames as $fileName)
                        {
                            echo "<a href=\"Template_A.php?page=../Pages/" . $fileName . "\">" . $fileName . "</a> :<br> " .  $match[0] . "...<br><br>";
                        }
                    }
                    // Her skal vi så søge i filens indhold... Og det kan godt komme til at tage noget tid...
                }
            }
            closedir($dh);
        }
        else
        {
            echo "opendir failed";
        }
    }
    else
    {
        echo "$dir is not a Directory";
    }
}

function trueFileNames($aFileName)
{
    $trueFileNamesArr = array();

    switch ($aFileName)
    {
        case "minProfil.php" :
            $trueFileNamesArr[] = "side1HvorMinProfilIndgår.php";
            $trueFileNamesArr[] = "side2HvorMinProfilIndgår.php";
            $trueFileNamesArr[] = "side3HvorMinProfilIndgår.php";
            break;
        case "enAndenUnderside.php" :
            $trueFileNamesArr[] = "sidenHvorEnAndenUndersideIndgår.php";
            break;
        // osv. for alle 50+ filer ...
        default :
            $trueFileNamesArr[] = $aFileName;  // Denne fanger de tilfælde hvor vi har glemt en fil i listen.
            break
    }

    return $trueFileNamesArr;
}
?>
Avatar billede nielle Nybegynder
05. september 2005 - 19:25 #9
Gar du fået kigget på det?
Avatar billede nielle Nybegynder
15. september 2005 - 18:30 #10
?
Avatar billede jahamnej Nybegynder
29. september 2005 - 20:28 #11
hej undskyld, jeg kom lidt fra det igen...

men hvis du lige svarer, så regner det med point ;)

tak for hjælpen!
Avatar billede nielle Nybegynder
29. september 2005 - 22:23 #12
Svar :^)
Avatar billede nielle Nybegynder
30. september 2005 - 17:37 #13
Takker fo point :^)
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