Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sitemap generator - generowanie mapy strony
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
korro
Witam.

Przedstawiam klasę PHP generującą mapy stron zgodne z protokołem Sitemap 0.90.
Założeniem była 100% zgodność ze specyfikacją oraz maksymalna możliwa prostota.

Cechy klasy:
  • Pełna zgodność z UTF-8
  • Wsparcie dla Sitemap index
  • Obsługa do 50,000,000 linków
  • Wsparcie dla plików robots.txt
  • Automatyczne powiadamianie wyszukiwarek: Google, Yahoo!, Ask i Bling
  • Wsparcie dla Yahoo App ID
  • Wsparcie dla GZip

Przykład wygenerowanej mapy:

http://wydluz.net/sitemap.xml


Download i przykłady użycia w języku angielskim:

http://www.phpclasses.org/browse/package/5838.html


Przykłady użycia i opis w języku polskim:

http://antczak.org/2009/12/sitemap-generat...ie-mapy-strony/
nospor
Klasa zapowiada się ciekawie - w wolnej chwili przejrzę.
Ale mała sugestia: daj może link do pobrania bezpośrednio od Ciebie ze strony a nie na tym durnym phpclasses...
korro
To prawda, phpclasses nie jest najwygodniejsze, ale chciałbym mieć download w jednym miejscu.
Widzę tam ilość ściągnięć.
nospor
Cytat
Widzę tam ilość ściągnięć.
Ok, to masz juz o jedno mniej sciagniecie.

edit down:
Cytat
Nie wiem, co widzisz w tym złego.

to, ze zamiast jednego kliknięcia muszę wykonac 15 by ją pobrać smile.gif

Cytat
Poza tym, i klasa radzi sobie całkiem dobrze
Ale ja nie mówię, ze to zła klasa. Mowię tylko że jestem na tyle leniwy i na tyle nie lubię phpclasses że ja osobiście już jej pobierać nie będę.
korro
Nie wiem, co widzisz w tym złego.
Poza tym, i klasa radzi sobie całkiem dobrze: http://www.phpclasses.org/browse/top/top.html#weekpackages
NuLL
@nospor - nie jestes sam. Ja tez bym sie z checia pobawil ale phpclasses.org jest tak wstretne ze nie mam nawet zamiaru tam zagladac ;-)
emp
Wygląda bardzo fajnie i porządnie. Twoja klasa na pewno nie jednej osobie się przyda.
W przeciwieństwie do kolegów od dawna mam konto na phpclasses i korzystam z tego serwisu.
graczu
Mam pytanko, gdzie to dodajecie?. Oczywiście jak już sobie podprowadzicie by generowało odpowiednie linki. Do crontaba, czy co jakiś czas ręcznie?.
koderrr
Postanowilem napisac cos podobnego
ale troche latwiejszego w uzyciu dla mniej doswiadczonych userow

  1. <?php
  2.  
  3. if($_GET['hash'] != nasztajnykod)
  4. {
  5. }
  6.  
  7. $when = date('Y-m-d');
  8. $sitemap = 'sitemap.txt';
  9. $tmp = 'temporary.txt';
  10. $logs = 'logs.txt';
  11. //nasza domena
  12. $website = file_get_contents('http://www.xml-sitemaps.com/download/www.domain.com/urllist.txt');
  13.  
  14.  
  15. if($website != true)
  16. {
  17. $error = $when;
  18. $error .= "\t";
  19. $error .= "Address not available from this machine \r\n";
  20. file_put_contents($logs, $error, FILE_APPEND);
  21. }
  22.  
  23. $write = file_put_contents($tmp, $website);
  24.  
  25. if(filesize($sitemap) == filesize($tmp))
  26. {
  27. $error = $when;
  28. $error .= "\t";
  29. $error .= "Sitemap file has not changed \r\n";
  30. file_put_contents($logs, $error, FILE_APPEND);
  31. }
  32.  
  33. // pingujemy strone google
  34. $pinggoogle = file_get_contents('http://www.google.com/webmasters/tools/ping?sitemap=http://www.domain.com/sitemap.txt');
  35.  
  36. if ($pinggoogle != true)
  37. {
  38. $error = $when;
  39. $error .= "\t";
  40. $error .= "Google is not responding (sic!) \r\n";
  41. file_put_contents($logs, $error, FILE_APPEND);
  42. }
  43. else
  44. {
  45. $error = $when;
  46. $error .= "\t";
  47. $error .= "Sitemap has been successfully added \r\n";
  48. file_put_contents($logs, $error, FILE_APPEND);
  49.  
  50. $write = file_put_contents($sitemap, $website);
  51. }
  52. ?>
  53.  
  54.  
  55.  


dodalem logowanie ew bledow co moze sie przydac gdy wrzucimy calosc do crona
calosc jest prosta i dziala
moze sie komus przyda
korro
Niezupełnie. Inaczej mówiąc nie działa.
http://www.xml-sitemaps.com/download/www.wp.pl/urllist.txt
http://www.xml-sitemaps.com/download/php.pl/urllist.txt
Sitemapa najpierw musi zostać wygenerowana przez stronę http://www.xml-sitemaps.com.

Co do phpclasses.
Cóż. Udostępniam Wam gotowe rozwiązanie. Jedyne co musicie zrobić, to zarejestrować się na jakieś stronie.
Okazuje się jednak, że jest to bariera nie do przejścia.
Nie będę namawiał do skorzystania. Jeśli będziecie potrzebować, napiszecie sami i udostępnicie na forum. Będzie to z pożytkiem dla społeczności.

Edit:
@graczu: cron to dobre rozwiązanie. Jeśli nie ma takiej możliwości, można sprawdzać jak stary jest plik, jeśli osiągnie odpowiedni wiek, uruchamiasz generator.
graczu
Dodałem sobie do cron'a by odpalał się o 00:00, podpiąłem klase pod mojego cms'a, w którym mam w bazie zapisywane ostatnie modyfikacje dla rekordów, więc wstawiam unix timestamp do date("c", wartosc_time_z_bazy);.

I wprowadziłem małą zmianę, dodałem:

Kod
109>>
private $sitemapFullURLGZ;

224>>
            if ($this->createGZipFile){
                $this->sitemapFullURLGZ = $this->baseURL.$this->sitemapFileName.".gz";
            }
                $this->sitemapFullURL = $this->baseURL.$this->sitemapFileName;

268>>
    public function updateRobots() {
        if (!isset($this->sitemaps))
            throw new BadMethodCallException("To update robots.txt, call createSitemap function first.");
        $sampleRobotsFile = "User-agent: *\nAllow: /";
        if (file_exists($this->basePath.$this->robotsFileName)) {
            $robotsFile = explode("\n", file_get_contents($this->basePath.$this->robotsFileName));
            $robotsFileContent = "";
            foreach($robotsFile as $key=>$value) {
                $value = trim($value);
                if(substr($value, 0, 8) == 'Sitemap:') unset($robotsFile[$key]);
                else $robotsFileContent .= $value."\n";
            }
            $robotsFileContent .= "Sitemap: " . $this->sitemapFullURL;
            if ($this->createGZipFile && !isset($this->sitemapIndex)){
                $robotsFileContent .= "\nSitemap: ".$this->sitemapFullURLGZ;
            }
            file_put_contents($this->basePath.$this->robotsFileName,$robotsFileContent);
        } else {
            $sampleRobotsFile = $sampleRobotsFile."\n\nSitemap: ".$this->sitemapFullURL;
            if ($this->createGZipFile && !isset($this->sitemapIndex)){
                $sampleRobotsFile .= "\nSitemap: ".$this->sitemapFullURLGZ;
            }
            file_put_contents($this->basePath.$this->robotsFileName, $sampleRobotsFile);
        }
    }



Bo w pliku robots robiło pierwszą nazwę pliku mapy z rozszerzeniem .gz i pod nią drugą z .gz.gz.

Kod
Sitemap: http://192.168.0.2/strona/xml/sitemap.xml.gz
Sitemap: http://192.168.0.2/strona/xml/sitemap.xml.gz.gz


Teraz już nie ma tego problemu.
koderrr
dzieki wielkie

straszne niedopatrzenie z mojej strony...
korro
@graczu, pokaż wywołanie.
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.