src/Controller/SitemapController.php line 15

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Enum\Sitemap\ChangeFreq;
  4. use App\Service\WordpressAPIService;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. class SitemapController extends AbstractController
  10. {
  11.     #[Route('/sitemap.xml'name'sitemap'methods: ['GET''HEAD'])]
  12.     public function sitemap(Request $request)
  13.     {
  14.         $hostname $request->getSchemeAndHttpHost();
  15.         $urls     = [];
  16.         // aggiungo gli URL statici
  17.         // Home
  18.         $urls[] = $this->generateEntry($this->generateUrl('home'), ChangeFreq::DAILY1.0);
  19.         // Chi siamo
  20.         $urls[] = $this->generateEntry($this->generateUrl('polo-sanitario-moderno'), ChangeFreq::MONTHLY0.8);
  21.         $urls[] = $this->generateEntry($this->generateUrl('fondatore'), ChangeFreq::MONTHLY0.8);
  22.         $urls[] = $this->generateEntry($this->generateUrl('universo-salute'), ChangeFreq::MONTHLY0.8);
  23.         // Servizi sanitari
  24.         $urls[] = $this->generateEntry($this->generateUrl('assistenza-ospedaliera-per-acuti'), ChangeFreq::MONTHLY0.5);
  25.         $urls[] = $this->generateEntry($this->generateUrl('riabilitazione-intensiva-ospedaliera'), ChangeFreq::MONTHLY0.5);
  26.         $urls[] = $this->generateEntry($this->generateUrl('riabilitazione-intensiva-extra-ospedaliera'), ChangeFreq::MONTHLY0.5);
  27.         $urls[] = $this->generateEntry($this->generateUrl('riabilitazioni-estensive-di-mantenimento'), ChangeFreq::MONTHLY0.5);
  28.         $urls[] = $this->generateEntry($this->generateUrl('uo-riabilitazione-alzheimer'), ChangeFreq::MONTHLY0.5);
  29.         $urls[] = $this->generateEntry($this->generateUrl('centro-disturbi-cognitivi-demenze'), ChangeFreq::MONTHLY0.5);
  30.         $urls[] = $this->generateEntry($this->generateUrl('residenze-sanitarie-assistenziali'), ChangeFreq::MONTHLY0.5);
  31.         $urls[] = $this->generateEntry($this->generateUrl('hospice'), ChangeFreq::MONTHLY0.5);
  32.         // Tutela dei cittadini
  33.         $urls[] = $this->generateEntry($this->generateUrl('strumenti-di-tutela'), ChangeFreq::MONTHLY0.5);
  34.         $urls[] = $this->generateEntry($this->generateUrl('diritti-doveri-cittadino'), ChangeFreq::MONTHLY0.5);
  35.         $urls[] = $this->generateEntry($this->generateUrl('rapporti-con-associazioni-volontariato'), ChangeFreq::MONTHLY0.5);
  36.         // Servizi al paziente
  37.         $urls[] = $this->generateEntry($this->generateUrl('servizi-al-paziente'), ChangeFreq::MONTHLY0.5);
  38.         // Strutture assistenziali
  39.         $urls[] = $this->generateEntry($this->generateUrl('sede-di-bisceglie'), ChangeFreq::MONTHLY0.8);
  40.         $urls[] = $this->generateEntry($this->generateUrl('sede-di-foggia'), ChangeFreq::MONTHLY0.8);
  41.         $urls[] = $this->generateEntry($this->generateUrl('sede-di-potenza'), ChangeFreq::MONTHLY0.8);
  42.         // Galleria
  43.         $urls[] = $this->generateEntry($this->generateUrl('galleria-bisceglie'), ChangeFreq::MONTHLY0.5);
  44.         $urls[] = $this->generateEntry($this->generateUrl('galleria-foggia'), ChangeFreq::MONTHLY0.5);
  45.         $urls[] = $this->generateEntry($this->generateUrl('galleria-potenza'), ChangeFreq::MONTHLY0.5);
  46.         $urls[] = $this->generateEntry($this->generateUrl('galleria-video'), ChangeFreq::WEEKLY0.7);
  47.         // Press Area
  48.         $urls[] = $this->generateEntry($this->generateUrl('notizie'), ChangeFreq::DAILY0.8);
  49.         $urls[] = $this->generateEntry($this->generateUrl('ufficio-stampa'), ChangeFreq::MONTHLY0.5);
  50.         // Contatti
  51.         $urls[] = $this->generateEntry($this->generateUrl('contatti'), ChangeFreq::MONTHLY0.6);
  52.         $urls[] = $this->generateEntry($this->generateUrl('lavora-con-noi'), ChangeFreq::MONTHLY0.6);
  53.         // Policy
  54.         $urls[] = $this->generateEntry($this->generateUrl('privacy-policy'), ChangeFreq::MONTHLY0.5);
  55.         $urls[] = $this->generateEntry($this->generateUrl('cookie-policy'), ChangeFreq::MONTHLY0.5);
  56.         // Link
  57.         $urls[] = $this->generateEntry($this->generateUrl('amministrazione-trasparente'), ChangeFreq::MONTHLY0.5);
  58.         $urls[] = $this->generateEntry($this->generateUrl('faq'), ChangeFreq::MONTHLY0.6);
  59.         $urls[] = $this->generateEntry($this->generateUrl('area-download'), ChangeFreq::MONTHLY0.5);
  60.         // Biblioteca
  61.         $urls[] = $this->generateEntry($this->generateUrl('biblioteca'), ChangeFreq::MONTHLY0.5);
  62.         $urls[] = $this->generateEntry($this->generateUrl('biblioteca-galleria'), ChangeFreq::MONTHLY0.5);
  63.         foreach (BibliotecaController::getGalleries() as $slug => $gallery) {
  64.             $urls[] = $this->generateEntry($this->generateUrl('biblioteca-galleria-slug', [ 'slug' => $slug ]), ChangeFreq::MONTHLY0.5);
  65.         }
  66.         // Articoli
  67.         $wordpressAPIService = new WordpressAPIService();
  68.         $page 1;
  69.         do {
  70.             $q1 $wordpressAPIService->getArticles($page100);
  71.             $totPages $q1['totPages'] ?? -1;
  72.             $articles $q1['articles'] ?? [];
  73.             foreach ($articles as $a) {
  74.                 $urls[] = $this->generateEntry($this->generateUrl('articolo', [ 'slug' => $a['slug'] ?? "" ]), ChangeFreq::WEEKLY0.8);
  75.             }
  76.             $page++;
  77.         } while ($page <= $totPages);
  78.         /**/
  79.         // buildo il template XML
  80.         $response = new Response(
  81.             $this->renderView('pages/sitemap.html.twig', [
  82.                 'urls'     => $urls,
  83.                 'hostname' => $hostname
  84.             ]),
  85.             200
  86.         );
  87.         $response->headers->set('Content-Type''text/xml');
  88.         return $response;
  89.     }
  90.     // METODO che genera la entry da inserire nella sitemap
  91.     private function generateEntry(string $urlChangeFreq $changefreqfloat $priority=0.5, ?string $lastmod=null): array {
  92.         $priority max(0.0min(1.0$priority));  // priorità compresa tra 0.0 e 1.0 inclusi
  93.         return [
  94.             'loc'        => $url,
  95.             'changefreq' => $changefreq->value,
  96.             'priority'   => $priority,
  97.             'lastmod'    => $lastmod,
  98.         ];
  99.     }
  100. }