Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML]XML nie chce działac - google sitemap
Forum PHP.pl > Forum > Przedszkole
Watt
Witam,

Mam prosblem z xml, chciałem napisać swoj sitemap i nie wiem czemu nie chce działać - chciałem odnieśc taki: http://pgc-cs.eu/sitemap-index.xml efekt, a mam coś takiego: http://gta4-forum.pdg.pl/index-tagsitemap.xml .

Co zrobiłem źle?
thek
A kod do jego tworzenia to gdzie? Bo tak to możemy zgadywać co nie tak jest. Analogicznie mógłbyś nam dać obrazek prawidłowy i jakiś "poszatkowany" przez skrypt lub napisać "nie chce mi tego zrobić". Nikt tu nie ma szklanej kuli by zgadywać co nie tak w skrypcie jest.
marian84
Sprawdź, czy edytor w ktorym piszesz xml nie dopisuje jakiegos dziadostwa w naglowkach pliku.
Najlepiej przeedytuj w notatniku i zapisz.

Kiedyś używając dreamwever'a też mialem podobny problem.
Watt
A tu kod php, ma coś do 'gadania'? Juz podaje:
  1. echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
  2. echo "<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n";
  3. $zapytanie = $db->query("SELECT * FROM `mybb_stcp`");
  4. $pageamount = ceil($db->num_rows($zapytanie)/1000);
  5. $i = 0;
  6. for($i; $i < $pageamount; $i++)
  7. {
  8. echo "\t<sitemap>\n";
  9. echo "\t\t<loc>".$link_forum."sitemap-tag.xml?page=".($i+1)."</loc>\n";
  10. echo "\t</sitemap>\n";
  11. }
  12. echo "</sitemapindex>";
  13.  

Bardzo prosty kod. W notepad++ pisze.
thek
To mam pytanie... Jak Ty tworzysz tę mapę, skoro nie określasz typu pliku w header, $zapytanie masz całkowicie gdzieś i nie obrabiając go wcale coś tworzysz z powietrza? Zauważ, że struktura linów w tym co chcesz uzyskać co chwilę się zmienia. raz są to sitemap-forums.xml, raz sitemap-threads.xml a innym razem sitemap-users.xml, a u Ciebie na pałę sitemap-tag jedyne. Zero jakiejkolwiek wspominki w kodzie o tagu lastmod. Gdzie go w kodzie masz bo ja nie widzę. Nadal uważasz, że to nie kod jest "problemem"? Przecież jak byk widać, że jest źle i jedyne co robi to Ci wypisze tylko liczbę stron.

EDIT: Dam ci porównanie do tego co zrobiłeś. Masz urodziny i sprosiłeś gości i chcesz by określone grupy były w innych pomieszczeniach. Ale zaproszenia wysłałeś na uświnionej papeterii (ma być w nagłówku text/xml, a nie text/html) a gdy już przyszli to pakujesz ich grupami po ileś i wrzucasz do pokoi w kolejności jakiej dotarli, nie sprawdzając wcale gdzi mieli by trafić winksmiley.jpg
Watt
Witam,

Tak, z tego co wiem lastmod jest opcjonalne. Nigdy nie miałem doczynienia z XMLem - nie był mi nigdy potrzebny, więc proszę Was o pomoc w tym zagadnieniu smile.gif

Pozdrawiam
thek
Radzę najpierw zajrzeć do specyfikacji sitemap i jakoś obrabiać otrzymane wyniki z zapytania. Jak wyciągasz informację czy ma być jako link do users, forum, threads czy jakiekolwiek innego? Ty tego wcale nie przewidujesz przy tworzeniu wpisu do sitemap. Jedyne co robisz to tworzysz ileś linków wedle wzorca ze zmieniającym się page na zasadzie sitemap-tag.xml?page=1 sitemap-tag.xml?page=2 sitemap-tag.xml?page=3 i tak dalej. A skąd masz wziąć te inne linki? Wpierw musisz porządne zapytanie do bazy ułożyć by te informacje wyciągnąć. A wątpię, że ktoś zechce ci pomóc bo musiałby znać strukturę tabel w Twojej bazie, połączenia między nimi itego typu informacje. Napisałeś bardzo skąpe informacje i liczysz na pomoc bez znajomości sql i php, więc pewnie chcesz gotowca. A skąd to wnioskuję? Bo zrobiłeś zapytanie, które kompletnie nie przystaje do problemu. Automatyczne generowanie sitemap dla serwisu jest po prostu niemożliwe jednym zapytaniem. Korzystasz bowiem zazwyczaj wtedy na nieskorelowanych tabelach, co powoduje już na starcie utworzenie wielu zapytań, nie zaś jednego. Do tego pewne linki są stałe i ich obecność musi być w pliku mapy zaznaczona "z palca" winksmiley.jpg

To czego potrzebujesz to odpowiednie zapytanie, które zwróci Ci konkretne działy (czyli owe forums, threads, users i inne) z ilością, dzięki którym to danym dopiero będziesz mógł przeprowadzić paginację w sitemapie. I wtedy w pętli będziesz mógł się pobawić z czymś w stylu:
  1. "<loc>".$link_forum.$dzial_strony_lub_forum.".xml?page=".($i+1)."</loc>"
Watt
Oj, źle wyjaśniłem - bardzo przepraszam, że to tak zabrzmiało, mówiąc, że chciałem odnieść taki rezultat miałem na myśli to że firefox nie interpretuje tej strony 'graficznie' (tak jak to robi na tej pierwszej stronie). Napisałem mały plugin http://community.mybboard.net/thread-55796.html i chciałem do tego dodać sitemape (żeby tagi szybciej się indexowały w google), a nigdy nie pisałem niczego takiego (XMLa), a to nie chce działać i utknąłem w martwym punkcie smile.gif Ten skrypt ma tworzyć index sitemapy, jak zrozumiem jak to mam robić to już sobie poradzę.

Cytat
liczysz na pomoc bez znajomości sql i php

Trochę umiem php i 'sqla' - myślę, że jak zrozumiem swój błąd będę w stanie sobie poradzić.

Btw. mysql num rows obciąża serwer mocno (powiedzmy przy 50 000 wyników ?)

//Problem rozwiązany Apache automatycznie zmienia headera na text/html, tzreba było dodać header("Content-type: text/xml"); .
GwynBleidD
Kolega miał raczej na myśli to, że przeglądarka (firefox) traktuje ten plik jako plik html, a nie xml. Myślę że
  1. header("Content-type: text/xml");
załatwi sprawę smile.gif

Pozdrawiam.
thek
Przecież mój post sprzed 16 wyraźnie mówił, że header jest źle ustawiony i jest w nim text/html zamiast text/xml smile.gif Problemem poważniejszym jest samo tworzenie linków w kodzie jaki podano. Jak mniemam jest to robione dla określonego typu forum, gdzie struktura jest zawsze ta sama? Jeśli tak to stworzenie odpowiednich zapytań, w których być może od razu będzie można użyć funkcji count() będzie najlepszym rozwiązaniem. Silnik bazy zrobi to obliczenie zapewne wydajniej niż php policzy za pomocą mysql_num_rows smile.gif
GwynBleidD
Tworzenie linków nie jest raczej problemem, bo z tego co widzę to plugin jest na etapie wstępnego projektu, będzie to raczej zmienione, aczkolwiek słuszna uwaga. Co do header to jego tam wcale nie było, a nie był źle ustawiony smile.gif a że plik jest generowany przez skrypt z rozszerzeniem php i dopiero przez htaccess jest tworzone przekierowanie z xml to apache nadaje temu plikowi doctype text/html. Gdyby był generowany bezpośrednio z pliku o rozszerzeniu xml to problemu by nie było, ale teraz pytanie czy konfiguracja apache pozwoli na wykonywanie skryptu w pliku o takim rozszerzeniu...
thek
Osobiście uważam, że dla stron, które nie muszą być aktualizowane na zasadzie "up to date" nie ma sensu generować sitemap częściej niż kilka razy dziennie. Stąd uważam, że sensowniej jest po prostu zawartość przypisywać w pliku do zmiennej i potem zapisać do osobnego pliku, który będzie widziany jako normalny xml. Po prostu oddzielenie sitemapy od skryptu ją generującego. Zmniejszy to na pewno też obciążenie, choć z drugiej strony dane mogą być ciut nieaktualne. Ale te kilka godzin w przypadku normalnego serwisu to wcale nie tragedia smile.gif
GwynBleidD
W zasadzie nie robi to różnicy, gdyż jeśli header jest dobrze zdefiniowany to będzie się to wyświetlać tak jak się ma wyświetlać, a obciążenie raczej znikome, gdyż z sitemapy korzystają tylko wyszukiwarki i robią to kilka razy dziennie. Ale to nie czas i miejsce na takie dyskusje.

Jeszcze co do sitemapy generowanej co jakiś czas. Jeśli byłoby to b. duże forum to jednak przydaje się generowanie w czasie rzeczywistym, a autor pluginu nie jest w stanie zgadnąć na jakie fora dany plugin trafi, także lepiej zrobić pod większe. Jeszcze problemem może być zlecenie generowania sitemapy co jakiś czas nie mając dostępu do CRONa, więc trzeba by było odpalać to ręcznie, co też nie jest za wygodne.
thek
@GwynBleidD: miałem na myśli sytuację, gdy plik generuje się automatycznie przy próbie otworzenia sitemapy jako formę "up to date". Problem właśnie z dużymi forami. Dla takich możesz mieć te pliki ogromne. Dla małego serwisu to już jest ponad 200kB zazwyczaj. Dla for może to bez problemu przeskoczyć w wiele MB i zaistnieje konieczność dzielenia tego pliku na kilka bo zanim robot ja wywoła i wyjdzie, to nie zdoła się ona wygenerować na nowo winksmiley.jpg Robot przecież nie będzie czekał aż wygenerujesz plik mający kilka MB. Walnie timeouta i pójdzie gdzie indziej.
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.