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;
    }
}