File: //home/temp/yarusvl.ru/sitemap-filter.php
<?php
chdir(__DIR__);
require_once('api/Mgc.php');
$mgc = new Mgc();
/*
* параметры с крона в виде key=val
* доступные пары:
* lang_label=ru
* root_url=http://domain.com
*
* чтобы сгенерировать файлы с браузера нужно в браузере перейти по ссылке
* http://domain.com/sitemap.php?output=file
*/
$params = array();
if (!empty($argv)) {
$params['output'] = 'file';
for ($i = 1; $i < count($argv); $i++) {
$arg = explode("=", $argv[$i]);
$params[$arg[0]] = $arg[1];
}
$params['root_url'] = trim($params['root_url']);
$params['root_url'] = preg_replace("~^(https?://[^/]+)/.*$~", "$1", $params['root_url']);
$_GET['lang_label'] = $params['lang_label'];
} else {
if (isset($_GET['output']) && $_GET['output']=='file') {
$params['output'] = 'file';
} else {
$params['output'] = 'browser';
}
$params['root_url'] = $mgc->config->root_url;
}
$language = $mgc->languages->get_language($mgc->languages->lang_id());
$params['l'] = '';
$lang_link = '';
if (!empty($language)) {
$params['l'] = '_'.$language->label;
$lang_link = $mgc->languages->get_lang_link();
}
$main_url = $params['root_url'].'/'.$lang_link;
if ($params['output'] == 'file') {
$sub_sitemaps = glob($mgc->config->root_dir . "/sitemap" . $params['l'] . "_*.xml");
if (is_array($sub_sitemaps)) {
foreach ($sub_sitemaps as $sitemap) {
@unlink($sitemap);
}
}
if (file_exists($mgc->config->root_dir . "/sitemap" . $params['l'] . ".xml")) {
@unlink($mgc->config->root_dir . "sitemap" . $params['l'] . ".xml");
}
} else {
header("Content-type: text/xml; charset=UTF-8");
}
$sitemap_index = 1;
$url_index = 0;
write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
write("<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n");
$s = "\t<url>\n";
$s .= "\t\t<loc>$main_url</loc>\n";
$s .= "\t\t<changefreq>daily</changefreq>\n";
$s .= "\t\t<priority>1.0</priority>\n";
$s .= "\t</url>\n";
write($s, true);
// Товары
$mgc->db->query("SELECT url, last_modify FROM __seo_link WHERE visible=1");
foreach($mgc->db->results() as $p) {
$url = $main_url . esc($p->url);
$last_modify = substr($p->last_modify, 0, 10);
$s = "\t<url>\n";
$s .= "\t\t<loc>$url</loc>\n";
$s .= "\t\t<lastmod>$last_modify</lastmod>\n";
$s .= "\t\t<changefreq>daily</changefreq>\n";
$s .= "\t\t<priority>1.0</priority>\n";
$s .= "\t</url>\n";
write($s, true);
}
write("</urlset>\n");
if ($params['output'] == 'file') {
$last_modify = date("Y-m-d");
$file = 'sitemap'.$params['l'].'.xml';
file_put_contents($file, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
file_put_contents($file, "<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n", FILE_APPEND);
for ($i = 1; $i <= $sitemap_index; $i++) {
$url = $params['root_url'].'/sitemap'.$params['l'].'_'.$i.'.xml';
file_put_contents($file, "\t<sitemap>"."\n", FILE_APPEND);
file_put_contents($file, "\t\t<loc>$url</loc>"."\n", FILE_APPEND);
file_put_contents($file, "\t\t<lastmod>$last_modify</lastmod>"."\n", FILE_APPEND);
file_put_contents($file, "\t</sitemap>"."\n", FILE_APPEND);
}
file_put_contents($file, '</sitemapindex>'."\n", FILE_APPEND);
}
function esc($s) {
return(htmlspecialchars($s, ENT_QUOTES, 'UTF-8'));
}
function write ($str, $count_url = false) {
global $params, $sitemap_index, $url_index;
if ($params['output'] == 'file') {
$file = 'sitemap'.$params['l'].'_'.$sitemap_index.'.xml';
file_put_contents($file, $str, FILE_APPEND);
if ($count_url && ++$url_index == 50000) {
file_put_contents($file, '</urlset>'."\n", FILE_APPEND);
$url_index=0;
$sitemap_index++;
file_put_contents($file, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
file_put_contents($file, "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n", FILE_APPEND);
}
} else {
print $str;
}
}