От няколко дни се опитвам да си намеря скрипт, който да се инсталира на хоста, след това на определен интервал да се пуска и да обхожда сайта, като след това генерира сайтмап за Google. Става въпрос за сайта ми за малки обяви BGobiavi.info. Сайта ползва XZero Classifieds, а всички разширения за тази платформа, са платени.
Потърсих доста и в Интернет дали някой друг не е направил Sitemap for XZero Classifieds, но за съжаление не можах да намеря. Изтествах много и различни генератори. Повечето, които пробвах бяха от най-големия каталог от скриптове HotScripts.com. За съжаление повечето безплатни скриптове, които изтеглих не работеа нормално и бяха с много сложен сорс, който аз не мога да оправя сам. Тествах и Unlimited Sitemap Generator, но и той въпреки, че е платен не можа да сканира сайта ми.
Колкото повече скриптове тествах, толкова повече се убеждавах, че не е много удачен този начин за сайт, в който ежедневно ще се публикуват множество обяви, тъй като ако скрипта се стартира всеки ден и обхожда целия сайт, то тожа ще отнема много процесорно време.
Потърсих доста и в Интернет дали някой друг не е направил Sitemap for XZero Classifieds, но за съжаление не можах да намеря. Макар, че не съм писал код до сега реших да се опитам да се справя сам. Не претендирам, че това е най-верния начин, но получения файл работи перфектно. Това което той прави може да се опише в едно изречение – прави заявка към базата данни, от където извлича всички обяви, които са публикувани и одобрени, както и датите, на които са публикувани, след което форматира данните по слецификациите на Google за sitemap.
Ето и самия код:
<?php
require_once(„initvars.inc.php“);
require_once(„config.inc.php“);
$newLine = „\n“;
$indent = „ „;
// XML document
header(„Content-Type: text/xml“);
$sql = „SELECT a.*, ct.cityname, UNIX_TIMESTAMP(a.createdon) AS timestamp, scat.subcatname, scat.catid, cat.catname
FROM $t_ads a
INNER JOIN $t_cities ct ON a.cityid = ct.cityid
INNER JOIN $t_subcats scat ON a.subcatid = scat.subcatid
INNER JOIN $t_cats cat ON scat.catid = cat.catid
WHERE a.enabled = ’1′ AND a.verified = ’1′ AND a.expireson >= NOW()
ORDER BY a.createdon DESC
LIMIT 10000″;
$res_ads = mysql_query($sql) or die($sql.mysql_error());
if($sef_urls) $url = „{$vbasedir}$xcityid/posts/{$row[catid]}_{$catname_inurl}/{$row[subcatid]}_{$subcatname_inurl}/$row[adid]_“ . RemoveBadURLChars($row['adtitle']) . „.html“;
else $url = „?view=showad&adid=$row[adid]&cityid=$xcityid&lang=$xlang{$link_extra}“;
// Writing of the XML file
// Headers :
$sm = „“;
$sm .= „<?xml version=’1.0′ encoding=’UTF-8′?>$newLine“;
$sm .= „<urlset xmlns:xsi=’http://www.w3.org/2001/XMLSchema-instance’
xsi:schemaLocation=’http://www.google.com/schemas/sitemap/0.9 http://www.google.com/schemas/sitemap/0.9/sitemap.xsd’
xmlns=’http://www.sitemaps.org/schemas/sitemap/0.9′>$newLine“;
// Ads
while($row = mysql_fetch_array($res_ads)) {
if($sef_urls) $url = „$script_url/{$vbasedir}$xcityid/posts/{$row[catid]}_{$catname_inurl}/{$row[subcatid]}_{$subcatname_inurl}/$row[adid]_“ . RemoveBadURLChars($row['adtitle']) . „.html“;
else $url = „?view=showad&adid=$row[adid]&cityid=$xcityid&lang=$xlang{$link_extra}“;
$sm .= „$indent<url>$newLine“;
$sm .= „$indent$indent<loc>“.htmlentities($url, ENT_QUOTES, ‘UTF-8′).“</loc>$newLine“; // you may adapt the URL syntax to your need, this is an example
$sm .= „$indent$indent<lastmod>“.date(DATE_ATOM, $row['timestamp']).“</lastmod>$newLine“;
$sm .= „$indent$indent<changefreq>monthly</changefreq>$newLine“;
$sm .= „$indent$indent<priority>0.7</priority>$newLine“;
$sm .= „$indent</url>$newLine“;
}
$sm .= „</urlset>$newLine“;
$sm .= “;
echo $sm;
?>
Както се вижда това е PHP файл, който при изпълнението си генерира XML. Сега остава да излъжем Google, че при извикване на http://bgobiavi.info/sitemap.xml да се пренасочва към този файл.
Това съм го направил във файла .htaccess
RewriteEngine On
# sitemap XML
RewriteCond %{REQUEST_URI} ^/sitemap.xml$
RewriteRule .* sitemapforxzero.php [L]
Сега остава и Google да одобри генерирания файл и всичко ще е наред.