Browse Source

Pages\Misc: Change sitemap() method

Visman 1 năm trước cách đây
mục cha
commit
1d57ade40f
1 tập tin đã thay đổi với 43 bổ sung0 xóa
  1. 43 0
      app/Models/Pages/Misc.php

+ 43 - 0
app/Models/Pages/Misc.php

@@ -155,9 +155,13 @@ class Misc extends Page
 
         } elseif (null === $id) {
             // sitemap.xml
+            $available = false;
+
             foreach ($forums->loadTree(0)->descendants as $forum) {
                 if ($forum->last_post > 0) {
                     $this->sitemap[$this->c->Router->link('Sitemap', ['id' => $forum->id])] = $forum->last_post;
+
+                    $available = true;
                 }
             }
 
@@ -165,8 +169,47 @@ class Misc extends Page
                 $this->sitemap[$this->c->Router->link('Sitemap', ['id' => 0])] = null;
             }
 
+            if (true === $available) {
+                $this->sitemap[$this->c->Router->link('Sitemap', ['id' => 2147483647])] = null;
+            }
+
             $this->nameTpl = 'sitemap_index';
 
+        } elseif (2147483647 === $id) {
+            // sitemap2147483647.xml
+            $this->sitemap[$this->c->Router->link('Index')] = null;
+
+            --$max;
+
+            if (
+                1 === $this->c->config->b_rules
+                && 1 === $this->c->config->b_regs_allow
+            ) {
+                $this->sitemap[$this->c->Router->link('Rules')] = null;
+
+                --$max;
+            }
+
+            $dtd = $this->c->config->i_disp_topics_default;
+
+            foreach ($forums->loadTree(0)->descendants as $forum) {
+                if ($forum->last_post > 0) {
+                    $pages = (int) \ceil(($forum->num_topics ?: 1) / $dtd);
+                    $page  = 1;
+
+                    for (; $max > 0 && $page <= $pages; --$max, ++$page) {
+                        $this->sitemap[$this->c->Router->link(
+                            'Forum',
+                            [
+                                'id'   => $forum->id,
+                                'name' => $forum->friendly,
+                                'page' => $page,
+                            ]
+                        )] = null;
+                    }
+                }
+            }
+
         } elseif (0 === $id) {
             // sitemap0.xml
             if (1 !== $gGroup->g_view_users) {