Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sitemap generator - generowanie mapy strony, sitemap.xml sitemap-index.xml
korro
post
Post #1





Grupa: Zarejestrowani
Postów: 259
Pomógł: 42
Dołączył: 8.04.2005
Skąd: Mława

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


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/


Ten post edytował korro 11.12.2009, 10:15:04


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





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
korro
post
Post #3





Grupa: Zarejestrowani
Postów: 259
Pomógł: 42
Dołączył: 8.04.2005
Skąd: Mława

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


To prawda, phpclasses nie jest najwygodniejsze, ale chciałbym mieć download w jednym miejscu.
Widzę tam ilość ściągnięć.

Ten post edytował korro 12.12.2009, 10:17:12


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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ę.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
korro
post
Post #5





Grupa: Zarejestrowani
Postów: 259
Pomógł: 42
Dołączył: 8.04.2005
Skąd: Mława

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


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


--------------------
Go to the top of the page
+Quote Post
NuLL
post
Post #6





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


@nospor - nie jestes sam. Ja tez bym sie z checia pobawil ale phpclasses.org jest tak wstretne ze nie mam nawet zamiaru tam zagladac ;-)

Ten post edytował NuLL 13.12.2009, 23:56:27


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
emp
post
Post #7





Grupa: Zarejestrowani
Postów: 195
Pomógł: 14
Dołączył: 12.01.2006
Skąd: Gotham City

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


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.


--------------------
Temat zamykam i przenoszę do Bangladeszu.
To jest wiadomość śmierci jeśli ją czytasz to znaczy że pozostało ci 30 sekund życia, więc lepiej zacznij się modlić.
Go to the top of the page
+Quote Post
graczu
post
Post #8





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 10.02.2006

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


Mam pytanko, gdzie to dodajecie?. Oczywiście jak już sobie podprowadzicie by generowało odpowiednie linki. Do crontaba, czy co jakiś czas ręcznie?.
Go to the top of the page
+Quote Post
koderrr
post
Post #9





Grupa: Zarejestrowani
Postów: 255
Pomógł: 16
Dołączył: 4.07.2007

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


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
Go to the top of the page
+Quote Post
korro
post
Post #10





Grupa: Zarejestrowani
Postów: 259
Pomógł: 42
Dołączył: 8.04.2005
Skąd: Mława

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


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.

Ten post edytował korro 27.12.2009, 22:10:53


--------------------
Go to the top of the page
+Quote Post
graczu
post
Post #11





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 10.02.2006

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


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.
Go to the top of the page
+Quote Post
koderrr
post
Post #12





Grupa: Zarejestrowani
Postów: 255
Pomógł: 16
Dołączył: 4.07.2007

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


dzieki wielkie

straszne niedopatrzenie z mojej strony...
Go to the top of the page
+Quote Post
korro
post
Post #13





Grupa: Zarejestrowani
Postów: 259
Pomógł: 42
Dołączył: 8.04.2005
Skąd: Mława

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


@graczu, pokaż wywołanie.


--------------------
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:06