View file app/modules/pages/sitemap.php

File size: 4.46Kb
<?php

switch ($act):

/**
 * Генерируем главную страницу
 */
case 'index':
    $pages = [
        'news.xml',
        'blogs.xml',
        'events.xml',
        'topics.xml',
        'downs.xml',
    ];
    $locs = [];
    foreach ($pages as $page) {
        $locs[] = [
            'loc' => App::setting('home').'/sitemap/'.$page,
            'lastmod' => date('c', SITETIME),
        ];
    }

    App::view('sitemap/index', compact('locs'));
break;

/**
 * Генерируем блоги
 */
case 'blogs':
    $blogs = DBM::run()->query("SELECT b.*, MAX(c.time) last_time FROM blogs b LEFT JOIN comments c ON b.id = c.relate_id AND relate_type='blog' GROUP BY b.id;");

    $locs = [];
    foreach ($blogs as $blog) {

        $changeTime = ($blog['last_time'] > $blog['time']) ? $blog['last_time'] : $blog['time'];

        // Обновлено менее 1 месяца
        $new = (SITETIME < $changeTime + 3600 * 24 * 30) ? true : false;

        $locs[] = [
            'loc' => App::setting('home').'/blog/blog?act=view&id='.$blog['id'],
            'lastmod' => date('c', $changeTime),
            'changefreq' => $new ? 'weekly' : 'monthly',
            'priority' => $new ? '1.0' : '0.5',
        ];
    }
    App::view('sitemap/url', compact('locs'));
break;
/**
 * Генерируем новости
 */
case 'news':
    $newses = DBM::run()->query("SELECT n.*, MAX(c.time) last_time FROM news n LEFT JOIN comments c ON n.id = c.relate_id AND relate_type='news' GROUP BY n.id;");

    $locs = [];
    foreach ($newses as $news) {

        $changeTime = ($news['last_time'] > $news['time']) ? $news['last_time'] : $news['time'];

        // Обновлено менее 1 месяца
        $new = (SITETIME < $changeTime + 3600 * 24 * 30) ? true : false;

        $locs[] = [
            'loc' => App::setting('home').'/news/'.$news['id'],
            'lastmod' => date('c', $changeTime),
            'changefreq' => $new ? 'weekly' : 'monthly',
            'priority' => $new ? '1.0' : '0.5',
        ];
    }
    App::view('sitemap/url', compact('locs'));
break;

/**
 * Генерируем события
 */
case 'events':
    $events = DBM::run()->query("SELECT e.*, MAX(c.time) last_time FROM events e LEFT JOIN comments c ON e.id = c.relate_id AND relate_type='event' GROUP BY e.id;");
    $locs = [];
    foreach ($events as $event) {

        $changeTime = ($event['last_time'] > $event['time']) ? $event['last_time'] : $event['time'];

        // Обновлено менее 1 месяца
        $new = (SITETIME < $changeTime + 3600 * 24 * 30) ? true : false;

        $locs[] = [
            'loc' => App::setting('home').'/events?act=read&id='.$event['id'],
            'lastmod' => date('c', $changeTime),
            'changefreq' => $new ? 'weekly' : 'monthly',
            'priority' => $new ? '1.0' : '0.5',
        ];
    }
    App::view('sitemap/url', compact('locs'));
break;

/**
 * Генерируем темы форума
 */
case 'topics':
    $topics = DBM::run()->select('topics', null, 25000, null, ['last_time' => 'DESC']);

    $locs = [];
    foreach ($topics as $topic) {

        // Обновлено менее 1 месяца
        $new = (SITETIME < $topic['last_time'] + 3600 * 24 * 30) ? true : false;

        $locs[] = [
            'loc' => App::setting('home').'/topic/'.$topic['id'],
            'lastmod' => date('c', $topic['last_time']),
            'changefreq' => $new ? 'weekly' : 'monthly',
            'priority' => $new ? '1.0' : '0.5',
        ];
    }
    App::view('sitemap/url', compact('locs'));
break;

    /**
     * Генерируем загрузки
     */
    case 'downs':
        $downs = DBM::run()->query("SELECT d.*, MAX(c.time) last_time FROM downs d LEFT JOIN comments c ON d.id = c.relate_id AND relate_type='down' GROUP BY d.id;");

        $locs = [];
        foreach ($downs as $down) {

            $changeTime = ($down['last_time'] > $down['time']) ? $down['last_time'] : $down['time'];

            // Обновлено менее 1 месяца
            $new = (SITETIME < $changeTime + 3600 * 24 * 30) ? true : false;

            $locs[] = [
                'loc' => App::setting('home').'/load/down?act=view&id='.$down['id'],
                'lastmod' => date('c', $changeTime),
                'changefreq' => $new ? 'weekly' : 'monthly',
                'priority' => $new ? '1.0' : '0.5',
            ];
        }
        App::view('sitemap/url', compact('locs'));
        break;

default:
    App::abort(404);
endswitch;