Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]wyszukiwarka oparta na xml ?
Michał90
post
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 16.05.2007

Ostrzeżenie: (0%)
-----


Witam,
Mam taką stronę:
Wyniki są zapisane w pliku xml i są one pobierane do danej kategorii na stronę główną itd. Jak można zrobić wyszukiwarkę, żeby wyszukiwała wyniki np. po tytule z pliku xml lub już z kategorii, które są na stronie głównej?

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Można rozwiązać to na kilka sposobów, ale myślę, że jednym z bardziej przyjaznych dla programisty jest użycie XPath w pliku XML. Wygoda jak dla mnie porównywalna z zapytaniami do bazy danych smile.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Michał90
post
Post #3





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 16.05.2007

Ostrzeżenie: (0%)
-----


Można troszkę jaśniej smile.gif ?

Pozdrawiam
Go to the top of the page
+Quote Post
Void
post
Post #4





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

Ostrzeżenie: (0%)
-----


Tu masz ładnie opisane użycie XML w PHP (łącznie z XPath): http://devzone.zend.com/article/1713
Go to the top of the page
+Quote Post
Michał90
post
Post #5





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 16.05.2007

Ostrzeżenie: (0%)
-----


Można coś w wersji pl? biggrin.gif
Go to the top of the page
+Quote Post
thek
post
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Przyzwyczajaj się, że poznając programowanie większość tych rzeczy powyżej absolutnych podstaw nie jest dostępna w języku polskim. A jeśli już jest, to będziesz za nią musiał zapłacić (książki, kursy, płatne treści na stronach). Na szczęście XPath jest bliski podstawom i tutaj masz choćby krótki tutorialik do niego:
http://www.ygreg.com/pokaz.php/xpath


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Michał90
post
Post #7





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 16.05.2007

Ostrzeżenie: (0%)
-----


Kod
simplexml
ladujesz do niego, wyciagasz kolumne zwiazana z wyszukiwana rzecza (np. tytul), w petli od 0 do liczba_elementow porownujesz (eregi) wartosc wezla z szukana wartoscia, jesli sie zgadza, to zapamietujesz index w tablicy $wyniki

na koniec pokazujesz zawartosc xml odwolujac sie do listy publication i indeksow z tablicy wyniki (jesli szukany tytul byl na pozycjach 0, 5 i 67 to pokazujesz publication[0], publication[5] i publication[67])


czy ktoś mi pomoże zamienić to na php biggrin.gif jak to zrobić?

Pozdrawiam
Go to the top of the page
+Quote Post
Void
post
Post #8





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

Ostrzeżenie: (0%)
-----


A co, dostałeś taką odpowiedź na innym forum i nie wiesz co z tym zrobić ? sleep.gif

Ja bym tego jednak nie robił za pomocą simplexml tylko obiektu DomDocument i później domxpath.

1. tworzysz nowy obiekt DomDocument ($x = new DomDocument() ) i ładujesz do niego plik xml metodą load(sciezka/do/pliku.xml)
2. tworzysz nowy obiekt domxpath, podając mu w argumencie konstruktora instancję wcześniej utworzonego obiektu DomDocument ($y = new domxpath($x) )
3. wywołujesz metodę query obiektu domxpath, podając w argumencie ścieżkę xpath do elementów XML, które chcesz pobrać. Wynik przypisujesz do zmiennej
4. za pomocą pętli foreach iterujesz tablicę zawierającą pobrane elementy i wyświetlasz je lub robisz z nimi co tam potrzebujesz smile.gif
Go to the top of the page
+Quote Post
Michał90
post
Post #9





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 16.05.2007

Ostrzeżenie: (0%)
-----


Nie wiem czy mnie dobrze rozumicie i czy to dobrze napisałem w pierwszym wątku.

W jednym pliku xml mam tam zawarte wszystkie tytuły smile.gif i właśnie z tego dokumentu xml pobieram/wyświetlam dane na str. tylko chciałbym jeszcze zrobić wyszukiwarkę na stronie, jak ją zrobić?
Go to the top of the page
+Quote Post
Void
post
Post #10





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

Ostrzeżenie: (0%)
-----


No i robisz dokładnie tak jak napisałem, a w tej pętli foreach (pkt 4) po prostu sprawdzasz czy szukana fraza pojawia się w którymś z tytułów pobranych Xpathem.

Przykładowo:
masz taki plik xml:
  1. <dane>
  2. <news>
  3. <tytul>News testowy</tytul>
  4. <kategoria>1</kategoria>
  5. <tresc>...</tresc>
  6. </news>
  7. <news>
  8. <tytul>news nr 2</tytul>
  9. <kategoria>3</kategoria>
  10. <tresc>abc</tresc>
  11. </news>
  12. ...
  13. </dane>


to metoda query obiektu domxpath będzie wyglądała tak:
  1. // Definicja potrzebnych obiektów, załadowanie pliku xml, czyli to co pisałem w poprzednim poście
  2. $results = $myDomxpathObject->query('/dane/news/tytul');
  3. // dalej foreach i porównujesz frazę, którą wpisał użytkownik z każdym elementem tablicy $results.


Już chyba więcej napisać się nie da smile.gif

Jak dalej nie wiesz jak tworzyć te obiekty to zajrzyj do tego artykułu, którego link wcześniej podałem, nie musisz znać angielskiego, popatrz na kody po prostu smile.gif
Go to the top of the page
+Quote Post
Michał90
post
Post #11





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 16.05.2007

Ostrzeżenie: (0%)
-----


Ok już wyświetlają mi się tytuły.
Zrobiłem to tak:
  1. <?php
  2. $dom = new DomDocument();
  3. $dom->load("publikacje.xml");
  4. $xp = new domxpath($dom);
  5. // Definicja potrzebnych obiektów, załadowanie pliku xml, czyli to co pisałem w poprzednim poście
  6. $results = $xp->query('/publications/publication/tytul');
  7. // dalej foreach i porównujesz frazę, którą wpisał użytkownik z każdym elementem tablicy $results.
  8. foreach ($results as $node) {
  9. echo $node->textContent . " ";
  10. }
  11. ?>


Teraz jak podpiąć pod to wyszukiwarkę biggrin.gif ?
Go to the top of the page
+Quote Post
Void
post
Post #12





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

Ostrzeżenie: (0%)
-----


W pętli foreach zamiast wyświetlać wartość pola textContent każdego elementu XML porównaj ją np. za pomocą funkcji stristr z frazą wpisaną przez użytkownika. Jeżeli funkcja zwróci true - znaczy że dany tytuł pasuje w jakimś stopniu do zapytania, jeśli false - znaczy, że nie został znaleziony.
Go to the top of the page
+Quote Post
Michał90
post
Post #13





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 16.05.2007

Ostrzeżenie: (0%)
-----


Można troszkę jaśniej smile.gif ?

Pozdrawiam
Go to the top of the page
+Quote Post
Void
post
Post #14





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

Ostrzeżenie: (0%)
-----


  1. foreach ($results as $node) {
  2. if ( stristr($node->textContent, $_POST['nazwa_pola_wyszukiwania_w_formularzu']) ) {
  3. // tytuł odpowiada zapytaniu
  4. } else {
  5. // tytuł nie odpowiada zapytaniu
  6. }
  7. }


No i oczywiście musisz dorobić do tego jakiś formularz. Nie wiem co w tym jest niejasnego
Go to the top of the page
+Quote Post
Michał90
post
Post #15





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 16.05.2007

Ostrzeżenie: (0%)
-----


Czyli ma to wyglądać tak:

wyszukiwarka.php
  1. <?php
  2. $dom = new DomDocument();
  3. $dom->load("publikacje.xml");
  4. $xp = new domxpath($dom);
  5. // Definicja potrzebnych obiektów, załadowanie pliku xml, czyli to co pisałem w poprzednim poście
  6. $results = $xp->query('/publications/publication/tytul');
  7. // dalej foreach i porównujesz frazę, którą wpisał użytkownik z każdym elementem tablicy $results.
  8. foreach ($results as $node) {
  9. if ( stristr($node->textContent, $_POST['wyszukiwarka']) ) {
  10. // tytuł odpowiada zapytaniu
  11. echo $wyszukiwarka;
  12. } else {
  13. // tytuł nie odpowiada zapytaniu
  14. echo 'nie ma takiej pozycji';
  15. }
  16. }
  17. ?>


pole.html
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <form action="wyszukiwarka.php" method="post">
  6. <input name="wyszukiwarka" type="text" />
  7. <input type="submit" value="Szukaj" />
  8. </form>
  9. </body>
  10. </html>


Tak to ma wyglądać..? Coś nie działa :/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 10:16