src/Service/VehicleSitemapProvider.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use Presta\SitemapBundle\Event\SitemapPopulateEvent;
  4. use Presta\SitemapBundle\Service\UrlContainerInterface;
  5. use Presta\SitemapBundle\Sitemap\Url\UrlConcrete;
  6. use Pimcore\Model\DataObject\Vehicle;
  7. use Pimcore\Model\DataObject\Vehicle\Listing;
  8. use Psr\Log\LoggerInterface;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use Symfony\Component\Routing\RouterInterface;
  12. class VehicleSitemapProvider implements EventSubscriberInterface
  13. {
  14.     private LoggerInterface $logger;
  15.     private RequestStack $requestStack;
  16.     private RouterInterface $router;
  17.     public function __construct(
  18.         LoggerInterface $logger,
  19.         RequestStack $requestStack,
  20.         RouterInterface $router
  21.     ) {
  22.         $this->logger $logger;
  23.         $this->requestStack $requestStack;
  24.         $this->router $router;
  25.     }
  26.     public static function getSubscribedEvents(): array
  27.     {
  28.         return [
  29.             SitemapPopulateEvent::class => 'populate',
  30.         ];
  31.     }
  32.     public function populate(SitemapPopulateEvent $event): void
  33.     {
  34.         $this->logger->info('VehicleSitemapProvider: Starting population');
  35.         /** @var UrlContainerInterface $urlContainer */
  36.         $urlContainer $event->getUrlContainer();
  37.         try {
  38.             $context $this->router->getContext();
  39.             $request $this->requestStack->getCurrentRequest();
  40.             $host $request $request->getHost() : 'timmermanns.de';
  41.             $context->setScheme('https');
  42.             $baseUrl sprintf('%s://%s'$context->getScheme(), $host);
  43.             $carListing Vehicle::getList([
  44.                 "condition" => "object_vehicle.o_published = 1"
  45.             ]);
  46.             $urlContainer->addUrl(
  47.                 new UrlConcrete(
  48.                     $baseUrl '/fahrzeugboerse/fahrzeuge',
  49.                     new \DateTime(),
  50.                     UrlConcrete::CHANGEFREQ_DAILY,
  51.                     0.8
  52.                 ),
  53.                 'vehicles'
  54.             );
  55.             // Optionally add conditions for published vehicles if needed
  56.             // $listing->setCondition('published = 1');
  57.             $this->logger->info('VehicleSitemapProvider: Found ' $carListing->count() . ' vehicles');
  58.             foreach ($carListing as $vehicle) {
  59.                 if (!$vehicle instanceof Vehicle) {
  60.                     continue;
  61.                 }
  62.                 $urlContainer->addUrl(
  63.                     new UrlConcrete(
  64.                          $baseUrl '/fahrzeugboerse/fahrzeuge?i=' $vehicle->getInternalVehicleId(),
  65.                         new \DateTime(),
  66.                         UrlConcrete::CHANGEFREQ_DAILY,
  67.                         0.6
  68.                     ),
  69.                     'vehicles'
  70.                 );
  71.                 $this->logger->debug('VehicleSitemapProvider: Added URL for vehicle ID ' $vehicle->getInternalVehicleId());
  72.             }
  73.         } catch (\Exception $e) {
  74.             $this->logger->error('VehicleSitemapProvider Error: ' $e->getMessage());
  75.             throw $e;
  76.         }
  77.     }
  78. }