Tämä koodinpätkä etsii tiedostosta hakusanaa vastaavaa tulosta ja näyttää sen käyttäjälle. Pieni selostus tämän toiminnasta: Käyttäjä kirjoittaa hakusanan, joka muunnetaan pieniksi kirjaimiksi. Tämän jälkeen käydään hakusanat sisältävä tiedosto läpi ja poimitaan mukaan vastaavat tulokset. Tämä olisi kyllä parempi toteuttaa MySQL-tietokannalla, mutta kyllä tämäkin käy, vähän työläämpi vain... Sama robotti on käytössä omilla sivuillani osoitteessa: www.teemuikonen.net ja se näyttää toimivan loistavasti. Jos koodissa on mielestääne parantamisen varaa, voisitko ilmoittaa siitä sivuillani olevalla palautelomakkeella??
Formi, johon käyttäjä syöttää hakusanan:
<form action="search.php" method="GET"> Hakusana:<br> <input type="text" name="query"><br><br> <input type="submit" value="Hae!"> </form>
Tiedostossa olevat tulokset, joista haetaan, menevät seuraavasti:
hakusana:otsikko:kuvaus:sivun url-osoite
Esimerkiksi:
kopioi:Downloads-osio:Lataa pelit täältä.:kopioi.html
HUOM!!!
KIRJOITA HAKUSANAT TIEDOSTOON PIENILLÄ KIRJAIMILLA, JOTTA HAKUKONE LÖYTÄÄ NE!!!!
Hakuskripti eli toisin sanoen search.php
<?php $hs = strtolower(trim($_GET['query'])); //otetaan hakusana muuttujaan if (empty($hs)) { Tyhjä(); die; } //jos tyhjä => Tyhjä() if (file_exists("hakusanat.txt") or TiedostoaEiLöydy()) { $banned = file("hakusanat.txt"); /* vaihda tiedostonimi, jos hakusanat sisältävä tiedosto on eriniminen kuin tämä */ for ($i = 0; $i < count($banned); $i++) { $tiedot = explode(":", $banned[$i]); //etsitään if ($tiedot[0] == $hs) { $tlm++; } } } if ($tlm == 0) { EiTuloksia(); } //ei tuloksia unset ($banned); unset ($i); unset ($tiedot); if ($tlm == 1) { $tlm = $tlm." vastaava tulos"; } if ($tlm > 1) { $tlm = $tlm." vastaavaa tulosta"; } echo "<html>\n"; echo "<head>\n"; echo "<title>Haun tulokset</title>\n"; echo "</head>\n"; echo "<h3>Hakusanalla ".chr(34).trim($_GET['query']).chr(34)." löytyi ".$tlm.":</h3><menu>\n\n"; $banned = file("hakusanat.txt"); //tiedostonimi? for ($i = 0; $i < count($banned); $i++) { $tiedot = explode(":", $banned[$i]); if ($tiedot[0] == $hs) { // -------------- tuloksien listaus -------------- echo "<li><b><a href=".chr(34).$tiedot[3].chr(34)." title=".chr(34).$tiedot[1].chr(34).">".$tiedot[1]."</a></b><br>\n"; echo "<dd>".$tiedot[2]."<br><br>\n\n"; } } echo "</menu>\n</body>\n"; echo "</html>"; function Tyhjä() { //Hakusana-kenttä tyhjä echo "<html>\n"; echo "<head>\n"; echo "<title>Virheellinen hakusana</title>\n"; echo "</head>\n"; echo '<body topmargin="100">'."\n"; echo '<div align="center"><h3>Syöttämäsi hakusana on virheellinen. Kokeile toista hakusanaa.</h3></div>'."\n"; echo "</body>\n"; echo "</html>"; die; } function TiedostoaEiLöydy() { //Hakutuloksia sisältävää tiedostoa ei löydy echo "<html>\n"; echo "<head>\n"; echo "<title>Haun suorittamisessa virhe</title>\n"; echo "</head>\n"; echo '<body topmargin="100">'."\n"; echo '<div align="center"><h3>Haun suorittamisessa tapahtui virhe. Voisitteko ilmoittaa asiasta ylläpitäjälle <a href="mailto:email@osoitteesi.org">sähköpostilla?</a></h3></div>'."\n"; echo "</body>\n"; echo "</html>"; die; } //vaihda yllä olevan linkin kohde oikeaksi function EiTuloksia() { echo "<html>\n"; echo "<head>\n"; echo "<title>Virheellinen hakusana</title>\n"; echo "</head>\n"; echo '<body topmargin="100">'."\n"; echo '<div align="center"><h3>Hakusanalla '.chr(34).trim($_GET['query']).chr(34).' ei löytynyt vastaavia tuloksia. Kokeile suorittaa haku uudelleen toisella hakusanalla.</h3></div>'."\n"; echo "</body>\n"; echo "</html>"; die; } ?>
Tämä voi olla aikamoista koodia, mutta näin se on nyt tehty. Sitä voisi kyllä lyhennellä ja parannella, mutta sitä voi itse muokata...
Huomasin juuri, että koodin joukossa on myös omilla sivuillani tarpeellisia, jotka eivät kuulu tuohon. Ne kannattaa poistaa sieltä... Esimerkiksi kohta:
<link rel="stylesheet" type="text/css" href="defstyle.css">
Jos käytätte tätä, muistakaa tarkistaa koko skripti läpi rivi riviltä!
ei näytä hirveen hyvältä.
en kyllä testannu, mutta..
Joo ei ole mikään kauheen hyvä, mutta joidenkin mielestä voi olla parempi kuin ei mitään...? Aion kyl päivittää mun nykyisen hakurobotin MySQL-pohjaiseksi.
Jahas.. voihan tuota johonkin käyttää..
Aikamoista koodia! heh..
Missä toi hakusana:otsikko:kuvaus:sivun url-osoite pitäis olla?
Tiedostossa, jonka nimi sinun pitää vaihtaa tonne skripteihin. Mulla on tällä hetkellä parempi hakukone käytössä, käy katsomassa: www.teemuikonen.net. Jos tarttet ni pistä postii: teemu.ikonen@nic.fi ni teen sulle oman version.
VÄHÄ SIISTI! Se toimii totta tosiaan!
joo, käytössä osoitteessa, http://koti.mbnet.fi/desing .
Todella hyvin toimii, paitsi jos saisi sen laajennetun haun samaan scriptiin niin olisiko nannaa!!
Kyllähän toi toimii, mut parempikin vois olla... Hyvää työtä silti! ;)
Tää ei ole kommentti vaan kysymys. Toivottavasti joku ehtii vastaamaan :)
Voiko tuohon hakusanat.txt:hen laittaa monta hakusanaa yhdelle riville, joilla voisi hakea? Eli saman tuloksen voisi saada useammalla eri hakusanalla?
Olikohan tämä kysymys nyt järkevästi esitetty...? En oikein ole perillä näistä asioista. Mutta tarkoitin siis, että esimerkiksi jos "Otsikko" olisi "Eläimet", niin hakusanoina voisi olla "kissa" ja "koira" ja "possu", ja kun yksi käyttäjä hakee sanalla "kissa", niin se saisi saman hakutuloksen kuin "possu"-sanalla hakenut...? Eli molemmille hauille tuloksena olisi "Eläimet"?
Ilmeisesti tuohno täytyisi vain tehdä jokaiselle hakusanalle oma rivi, joka olisi muuten sama lukuunottamatta hakusanaa...
toimii
siis miten noi hakusanat laitetaan tonne hakusanat.txt tiedostoon?!?! Muuten toimii mutta ei vaan löydä niitä mitä oon sinne kirjottanu!?!?! APUA!??!
Nyt toimii!! Aika helvettin siisti skripti silti!! Tosi nätti. Pistän ton kyllä sivuilleni...
Miten ton sais silleen että se linkki ois jollekkin webbisivulle??? Muuten mahti koodi!!
Joo eli sainkin muutettuu ton sillain että toi linkittää webbisivulle!!! elikkä silloin search.php:en koodi on tuollainen:
<?php $hs = strtolower(trim($_GET['query'])); //otetaan hakusana muuttujaan if (empty($hs)) { Tyhjä(); die; } //jos tyhjä => Tyhjä() if (file_exists("hakusanat.txt") or TiedostoaEiLöydy()) { $banned = file("hakusanat.txt"); /* vaihda tiedostonimi, jos hakusanat sisältävä tiedosto on eriniminen kuin tämä */ for ($i = 0; $i < count($banned); $i++) { $tiedot = explode("_", $banned[$i]); //etsitään if ($tiedot[0] == $hs) { $tlm++; } } } if ($tlm == 0) { EiTuloksia(); } //ei tuloksia unset ($banned); unset ($i); unset ($tiedot); if ($tlm == 1) { $tlm = $tlm." vastaava tulos"; } if ($tlm > 1) { $tlm = $tlm." vastaavaa tulosta"; } echo "<html>\n"; echo "<head>\n"; echo "<title>Haun tulokset</title>\n"; echo "</head>\n"; echo "<h3>Hakusanalla ".chr(34).trim($_GET['query']).chr(34)." löytyi ".$tlm.":</h3><menu>\n\n"; $banned = file("hakusanat.txt"); //tiedostonimi? for ($i = 0; $i < count($banned); $i++) { $tiedot = explode("_", $banned[$i]); if ($tiedot[0] == $hs) { // -------------- tuloksien listaus -------------- echo "<li><b><a href=".chr(34).$tiedot[3].chr(34)." title=".chr(34).$tiedot[1].chr(34).">".$tiedot[1]."</a></b><br>\n"; echo "<dd>".$tiedot[2]."<br><br>\n\n"; } } echo "</menu>\n</body>\n"; echo "</html>"; function Tyhjä() { //Hakusana-kenttä tyhjä echo "<html>\n"; echo "<head>\n"; echo "<title>Virheellinen hakusana</title>\n"; echo "</head>\n"; echo '<body topmargin="100">'."\n"; echo '<div align="center"><h3>Syöttämäsi hakusana on virheellinen. Kokeile toista hakusanaa.</h3></div>'."\n"; echo "</body>\n"; echo "</html>"; die; } function TiedostoaEiLöydy() { //Hakutuloksia sisältävää tiedostoa ei löydy echo "<html>\n"; echo "<head>\n"; echo "<title>Haun suorittamisessa virhe</title>\n"; echo "</head>\n"; echo '<body topmargin="100">'."\n"; echo '<div align="center"><h3>Haun suorittamisessa tapahtui virhe. Voisitteko ilmoittaa asiasta ylläpitäjälle <a href="mailto:email@osoitteesi.org">sähköpostilla?</a></h3></div>'."\n"; echo "</body>\n"; echo "</html>"; die; } //vaihda yllä olevan linkin kohde oikeaksi function EiTuloksia() { echo "<html>\n"; echo "<head>\n"; echo "<title>Virheellinen hakusana</title>\n"; echo "</head>\n"; echo '<body topmargin="100">'."\n"; echo '<div align="center"><h3>Hakusanalla '.chr(34).trim($_GET['query']).chr(34).' ei löytynyt vastaavia tuloksia. Kokeile suorittaa haku uudelleen toisella hakusanalla.</h3></div>'."\n"; echo "</body>\n"; echo "</html>"; die; } ?>
Mulla se ei mee minnekään, kun klikkaan hakutuloksissa ollutta linkkiä. Tossa hakusanat.txt tiedostossa määritelty URL-menee suoraan sen URL:n perään, missä search.php on.
ICompare.Comparen selostusta en tehnyt koska olin eritellyt funktion eri if lausekkeiden return arvot kommentteina.(rivit 48-80).
Vinkin aihe itsessään ei ollu CompareTo -metodi, vaan keino käyttää ICompare luokkaa oman kustomoidun järjestelijän tekemisessä.
CompareTo metodia taasen käytetään rivillä 76-77, joista ei ollut mitään infoa palautusarvosta.(Siksi tein infon metodista erikseen)
Compare on itsessään samanlainen kuin CompareTo, mutta vertailu tapahtuu kahden objektin välillä, kun taasen CompareTo:ssa objektin ja instanssin välillä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.