O produktu | Technická podpora | Verze | Videoukázky | Manuály | Nabídka práce | Kontakt
Česky   menu-arrow-gray-horizontal.gif
Domů > Návody > Jak na to ? Postupy, návody, rady > Generování mapy stránek (sitemap.xml)
Další informace
Hledat


Video ukázky
Drag&drop v prostředí Visual PHP™

Nejnovější video ukázky:
Nabídka práce
Společnost
E-VISION International s.r.o.

příjme na dlouhodobou spolupráci PHP5 a JavaScript programátory
pro vývoj produktu Visual PHP™




Více informací ...
Napsali o Visual PHP™
Novinky na e-mail
Váš e-mail

Visual PHP™ Doporučuje!
Pro práci jak v developerském, tak v administrátorském rozhraní doporučujeme používat internetový prohlížeč Mozilla Firefox, na jehož základě je vzhledem ke stabilitě, dodržování standardů konzorcia W3C a ochranným prvkům prohlížeče celý software vyvíjen.

Generování mapy stránek (sitemap.xml)

Soubor sitemap.xml obsahuje souhrn URL na jednotlivé stránky Vaší prezentace. Jedná se o poměrně jednoduchý XML soubor, který specifikuje protokol sitemaps XML format.

Ukázkový soubor se dvěma stránkami může vypadat takto:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
   <loc>http://www.domain.com/site-1/</loc>
   <lastmod>2011-05-14T14:20:29+01:00</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
   <loc>http://www.domain.com/site-2/</loc>
   <lastmod>2011-05-14T14:20:29+01:00</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
  </url>
</urlset>
Specifikace určuje tyto elementy:

Skript pro generování souboru sitemap.xml

Soubor sitemap.xml by bylo možné generovat jednoduchým skriptem, ale zhledem k tomu, že databáze může obsahovat velké množství tabulek a záznamů, došlo by u běžně psaného skriptu k vypršení povoleného času (max_execution_time), nebo přidělené paměti RAM (memory_limit). Proto jsme v návodu zvolili tvorbu pomocí skriptů běžících na pozadí, které umožňují zpracovávat data po téměř libovolně dlouhou domu s nevzrůstajícími nároky na spotřebovanou paměť.

Základem je tedy skript běžící na pozadí, kterému nadefinujeme vstupní parametry a jednotlivé události onStart, onContinue a onFinish

V nabídce Prezentace -> Skripty na pozadí založíme nový skript, kterému nastavíme tid například sitemap_xml a pro vstup nám stačí jediné vstupní pole, kterému budeme předávat názvy tabulek, ze kterých se mají generovat odkazy. Vstupnímu poli nastavíme:
Název:                tables
Typ komponenty:       TABLES
Parametry komponenty: Multiselect = true
Nyní už stačí pouze zadat jednotlivé události:

Událost onStart:
$this->tables = array();
$this->tableRecordIndex = 0;
$this->allTablesRecordIndex = 0;
$this->tableRecordStep = 20;
$this->fileName = PROJECTPATH."sitemap.xml";
$this->tmpFileName = PROJECTPATH."repository/temp/sitemap.xml";
_file_put_contents($this->tmpFileName, "");

$total = 0;
foreach($this->params["tables"] as $tableName)
{
	$Table = getTable($tableName);
	if ($Table)
	{
		foreach(getObject("Translators")->languages as $language)
		{
			$total += getTable($tableName)->getContentRecordCount();
			$this->tables[] = array("name" => $tableName, "recordCount" => $total, "language" => $language);
		}
	}
}

return($total);
Událost onContinue:
$f = fopen($this->tmpFileName, "a+");

if ($this->allTablesRecordIndex == 0)
{
	fwrite($f, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
	fwrite($f, "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">");
}

while(count($this->tables))
{
	$Table = getTable($this->tables[0]["name"]);
	setLanguage($this->tables[0]["language"]);

	processProgressText("Processing table '".$Table->name."' record ".($this->tableRecordIndex+1)." of ".$this->tables[0]["recordCount"]." for language ".$this->tables[0]["language"]);
	processProgressByIndex($this->allTablesRecordIndex);
	$records = $Table->getContentRecords("begin=".$this->tableRecordIndex.",limit=".$this->tableRecordStep);
	
	foreach($records as $record)
	{
		fwrite($f, "<url>");
		fwrite($f, "<loc>".parseFileLinks($Table->fileName."?id=".$record["id"])."</loc>");
                if ($record["date"])
		    fwrite($f, "<lastmod>".date("c",_strtotime($record["date"]))."</lastmod>");
                fwrite($f, "<changefreq>monthly</changefreq>");
                fwrite($f, "<priority>0.5</priority>");
		fwrite($f, "</url>");
	}
	
	$this->tableRecordIndex += $this->tableRecordStep;
	$this->allTablesRecordIndex += count($records);
	
	processMessage($this->tableRecordIndex." >= ".$this->tables[0]["recordCount"]);
	if ($this->tableRecordIndex >= $this->tables[0]["recordCount"])
	{
		array_shift($this->tables);
		$this->tableRecordIndex = 0;
	}
	
	if ($this->resumeNeeded())
	{
		fclose($f);
		$this->resumeInBackground();
	}
}

fwrite($f, "</urlset>");
fclose($f);

$this->finish();
Událost onFinish:
_file_put_contents($this->fileName, "");
rename($this->tmpFileName, $this->fileName);

// ping Google to say that sitemap has changed
download("http://www.google.com/webmasters/sitemaps/ping?sitemap=".urlencode(PROJECTURL."sitemap.xml"), array(), array(), array("timeout" => 2));

processProgressText("Finished");
Skript generuje odkazy pro všechny nastavené jazyky, lze jej tedy využít i pro vícejazyčné prezentace.

Pravidelné spouštění skriptu

Skript je ideální spouštět 1x denně, ovšem čas spouštení si můžete nastavit dle libosti. Je potřeba pouze vytvořit nový časový skript v nabídce Prezentace -> Časové skripty.

Do tid zadáme například sitemap_xml a budeme chtít spouštět každý den v 1h v noci. Do vlastnosti Minuty tedy zvolíme 00, do vlastnosti Hodiny zvolíme 01 a do Dny, Měsíce a Dny v týdnu vybereme všechny možnosti pomocí tlačítka Vybrat vše.

Zbývá už jen samotný kód skriptu, který je velice jednoduchý:
$tables = array(
    "news",
    "documents",
    "articles",
    "photogalleries",
);

runProcessScript("sitemap_xml", array("tables" => $tables));
Které tabulky budete generovat záleží už jen na rozsáhlosti Vašeho projektu.

Na časový skript nemusíte čekat, ale můžete jej spustit ihned zavoláním této URL:
http://www.domain.com/cron.php?tid=sitemap_xml
Průběh provádění skriptu na pozadí můžete sledovat v Nástroje -> Správce procesů -> Všechny procesy.

Jak sdělit vyhledávačům, kde soubor sitemap.xml naleznou

Zatím pouze Google poskytuje tzv. ping sitemapy, tedy okamžité sdělení, že soubor byl změněn. Provádí se to voláním speciální URL:
http://www.google.com/webmasters/sitemaps/ping?sitemap=URL_SOUBORU_SITEMAP_XML
Volání samo je provedeno ve skriptu v události onFinish. Pro ostatní vyhledávače musíme přidat do souboru robots.txt (nacházející se v rootu webu) cestu, kde je sitemap.xml uložen. Výsledný soubor robots.txt :
User-agent: *
Allow:
Sitemap: http://www.domain.com/sitemap.xml







UPOZORNĚNÍ

Některé vlastnosti publikované v tomto článku mohou být funkční pouze s nejnovější verzí jádra. Pokud máte starší verzi jádra, doporučujeme provést aktualizaci na nejnovější verzi.

Přihlášení
Vyzkoušejte zdarma

na dobu 30 dní
Aktuální verze jádra
Single Developer 1.7.9.680
20.leden 2012

Professional 1.7.9.680
20.leden 2012

Enterprise 1.7.9.680
20.leden 2012


Příručka pro vývojáře
Developer Guide 1.0.5
10.červenec 2009 09:36:42

Příručka pro administrátory
Administrator Guide 1.0.24
27.srpen 2010 11:58:08

Instalační skript
install.php 1.9.22
12.duben 2012 18:02:40

Novinky v příští verzi
nová událost onGetFilterSQL() pro pole tabulky umožňující nastavit vlastní SQL filtrace
Více ...

rss.gif
Podpora

Fotogalerie 10.5.2012
Sekce: Tvorba prezentací
Chyba v hromadné korespondenci, nelze odeslat příloha (nová verze 6.4.2012
Sekce: Bug reporty
AntiSpam obrázek 6.4.2012
Sekce: Programování
Chyba při opravách textů 4.4.2012
Sekce: Bug reporty
Admin může smazat Developera, je to ok? 27.3.2012
Sekce: Bug reporty
Mapa webu 19.3.2012
Sekce: Tvorba prezentací


rss.gif
Aktuality

Update komponenty Weather
18.listopad 2011
Server weather.com se rozhodl ukončit poskytování informací o počasí zdarma a přešel na placenou variantu (cca 60$ měsíčně). Z tohoto důvodu jsme byli nuceni upravit komponentu Weather tak, aby stahovala informace o počasí z jiného zdroje dat a to konkrétně ze serveru www.worldweatheronline.com. Tento server také poskytuje informace o počasí z celého světa, nicméně množství informací je oproti původnímu zdroji menší.

Ke správné funkčnosti komponenty počasí aktualizujte jádro na verzi 1.7.9.638.
Přidány nové návody
4.říjen 2011
Byl přidán nový návod "Použití jiného HTML editoru"
Powered by Visual PHP ™
© 2008 - 2010 E-VISION International, s.r.o.
O produktu | Technická podpora | Verze | Videoukázky | Manuály | Nabídka práce | Kontakt