Guest User

SiteMapController.php

a guest
Apr 6th, 2025
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.67 KB | None | 0 0
  1. <?php
  2.  
  3. namespace mirazmac\plugins\SiteMap;
  4.  
  5. use spark\controllers\Controller;
  6. use spark\helpers\UrlSlug;
  7. use spark\models\CategoryModel;
  8. use spark\models\FeedModel;
  9. use spark\models\PostModel;
  10.  
  11. /**
  12. * SiteMapController
  13. */
  14. class SiteMapController extends Controller
  15. {
  16.     protected $ignoreImported = false;
  17.  
  18.     protected $showFullText = true;
  19.  
  20.     /**
  21.      * Constructor
  22.      */
  23.     public function __construct()
  24.     {
  25.         parent::__construct();
  26.  
  27.         $this->showFullText = (int) get_option('rss_show_fulltext', 1);
  28.     }
  29.  
  30.     /**
  31.      * Index page for sitemap
  32.      *
  33.      */
  34.     public function sitemapIndex()
  35.     {
  36.         $app = app();
  37.         $data = [];
  38.         $postModel = new PostModel();
  39.  
  40.         $filters = [];
  41.  
  42.         if ($this->ignoreImported) {
  43.             $filters['where'][] = ['post_type', '=', PostModel::TYPE_ORIGINAL];
  44.         }
  45.  
  46.         $total = $postModel->countRows(null, $filters);
  47.         // Even though Google's limit is 50,000 per page,
  48.         // but its better to split up because of the crawling rate
  49.         $sitemapItemsPerPage = (int) get_option('sitemap_links_per_page', 1000);
  50.  
  51.         $numberOfSiteMaps = ceil($total / $sitemapItemsPerPage);
  52.  
  53.         // So only one it is
  54.         if ($numberOfSiteMaps < 1) {
  55.             $numberOfSiteMaps = 1;
  56.         }
  57.  
  58.         $data['total_sitemaps'] = $numberOfSiteMaps;
  59.  
  60.         $app->response->headers->set('content-type', 'application/xml');
  61.         return view('sitemap::sitemap-index.php', $data);
  62.     }
  63.  
  64.     /**
  65.      * Sitemap
  66.      *
  67.      * @return
  68.      */
  69.     public function sitemap($page = 1)
  70.     {
  71.         $app = app();
  72.         $data = [];
  73.  
  74.         $app->response->headers->set('content-type', 'application/xml');
  75.  
  76.         $postModel    = new PostModel();
  77.  
  78.         $itemsPerPage = (int) get_option('sitemap_links_per_page', 1000);
  79.         $offset = ($page - 1) * $itemsPerPage;
  80.  
  81.  
  82.         $filters = ['sort' => 'oldest'];
  83.  
  84.         if ($this->ignoreImported) {
  85.             $filters['where'][] = ['post_type', '=', PostModel::TYPE_ORIGINAL];
  86.         }
  87.  
  88.         $items = $postModel->readMany(
  89.             ['post_id', 'post_title', 'updated_at'],
  90.             $offset,
  91.             $itemsPerPage,
  92.             $filters
  93.         );
  94.  
  95.         $data['slug'] = new UrlSlug();
  96.  
  97.         $data['entries'] = $items;
  98.  
  99.         return view('sitemap::sitemap-single.php', $data);
  100.     }
  101.  
  102.  
  103.     /**
  104.      * Rss
  105.      *
  106.      * @return
  107.      */
  108.     public function rssIndex()
  109.     {
  110.         $app = app();
  111.         $data = [];
  112.  
  113.         $page = (int) $app->request->get('page', 1);
  114.         $catID = (int) $app->request->get('category', 0);
  115.  
  116.         $feedID = (int) $app->request->get('feed', 0);
  117.  
  118.         $category = null;
  119.         $feed = null;
  120.  
  121.         if ($catID) {
  122.             $category = (new CategoryModel())->read($catID, ['category_name', 'category_slug']);
  123.         }
  124.  
  125.  
  126.  
  127.         if ($feedID) {
  128.             $feed = (new FeedModel())->read($feedID, ['feed_id', 'feed_name']);
  129.         }
  130.  
  131.         $app->response->headers->set('content-type', 'application/xml');
  132.  
  133.         $postModel    = new PostModel();
  134.  
  135.         $itemsPerPage = (int) get_option('rss_items_per_page', 50);
  136.         $offset = ($page - 1) * $itemsPerPage;
  137.  
  138.         $fields = ['post_id', 'post_title', 'post_excerpt', 'created_at', 'updated_at', 'post_featured_image'];
  139.  
  140.         if ($this->showFullText) {
  141.             $fields[] = 'post_content';
  142.         }
  143.  
  144.         $filters = ['sort' => 'newest'];
  145.  
  146.         if ($category) {
  147.             $filters['where'][] = ['post_category_id', '=', $catID];
  148.         }
  149.  
  150.  
  151.  
  152.         if ($feed) {
  153.             $filters['where'][] = ['post_feed_id', '=', $feedID];
  154.         }
  155.  
  156.  
  157.         $items = $postModel->readMany(
  158.             $fields,
  159.             $offset,
  160.             $itemsPerPage,
  161.             $filters
  162.         );
  163.  
  164.         $data['last_build_date'] = time();
  165.  
  166.         if (isset($items[0]['updated_at'])) {
  167.             $data['last_build_date'] = $items[0]['updated_at'];
  168.         }
  169.  
  170.         $data['rss_title'] = get_option('site_name');
  171.         $data['rss_desc'] = get_option('site_description');
  172.  
  173.         if ($category || $feed) {
  174.             $title = $category ? "Category: {$category['category_name']}" : '';
  175.  
  176.             $title .= $category && $feed ? ' | ' : '';
  177.  
  178.             $title .= $feed ? "Feed: {$feed['feed_name']}" : '';
  179.  
  180.             $data['rss_title'] = $title;
  181.  
  182.             $data['rss_desc'] = "Read latest posts from {$title}";
  183.         }
  184.  
  185.  
  186.  
  187.         $data['slug'] = new UrlSlug();
  188.  
  189.         $data['entries'] = $items;
  190.         $data['show_fulltext'] = $this->showFullText;
  191.  
  192.         return view('sitemap::rss.php', $data);
  193.     }
  194. }
  195.  
Advertisement
Add Comment
Please, Sign In to add comment