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 (IMG:style_emoticons/default/smile.gif)
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 (IMG:style_emoticons/default/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? (IMG:style_emoticons/default/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
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 (IMG:style_emoticons/default/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ć ? (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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ę (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 22:28