✨ feat(FeedController): Ajoute un flux JSON pour les produits et les formules.
This commit is contained in:
@@ -9,8 +9,10 @@ use App\Entity\Product;
|
||||
use App\Repository\FormulesRepository;
|
||||
use App\Repository\ProductRepository;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
|
||||
|
||||
class FeedController extends AbstractController
|
||||
{
|
||||
@@ -38,4 +40,45 @@ class FeedController extends AbstractController
|
||||
'current_channel' => $channel
|
||||
], new Response('', 200, ['Content-Type' => 'application/xml']));
|
||||
}
|
||||
|
||||
// src/Controller/FeedController.php
|
||||
|
||||
#[Route('/feed/json', name: 'app_json_feed')]
|
||||
public function jsonFeed(UploaderHelper $uploaderHelper,ProductRepository $productRepo, FormulesRepository $formuleRepo): JsonResponse
|
||||
{
|
||||
$products = $productRepo->findBy([], ['updatedAt' => 'DESC'], 20);
|
||||
$formules = $formuleRepo->findBy(['isPublish' => true], ['updatedAt' => 'DESC'], 20);
|
||||
|
||||
$items = array_merge($products, $formules);
|
||||
usort($items, fn($a, $b) => $b->getUpdatedAt() <=> $a->getUpdatedAt());
|
||||
|
||||
$data = [
|
||||
'version' => 'https://jsonfeed.org/version/1.1',
|
||||
'title' => 'LudikEvent - Catalogue JSON',
|
||||
'home_page_url' => $this->generateUrl('app_crm_reservation', [], 0),
|
||||
'feed_url' => $this->generateUrl('app_json_feed', [], 0),
|
||||
'feed_rss' => $this->generateUrl('app_rss_feed', [], 0),
|
||||
'items' => []
|
||||
];
|
||||
|
||||
foreach ($items as $item) {
|
||||
$isProduct = ($item instanceof Product);
|
||||
|
||||
$url = $isProduct
|
||||
? $this->generateUrl('reservation_product_show', ['id' => $item->slug()], 0)
|
||||
: $this->generateUrl('reservation_formule_show', ['slug' => $item->slug()], 0);
|
||||
|
||||
$data['items'][] = [
|
||||
'id' => $url,
|
||||
'url' => $url,
|
||||
'title' => $item->getName(),
|
||||
'content_html' => $item->getDescription(),
|
||||
'date_modified' => (is_null($item->getUpdatedAt()) ? null : $item->getUpdatedAt()->getTimestamp()),
|
||||
'image' => ($item->getImageFile() !="")?$uploaderHelper->asset($items,'imageFile'):'/provider/images/favicon.webp',
|
||||
'_type' => $isProduct ? 'produit' : 'formule'
|
||||
];
|
||||
}
|
||||
|
||||
return new JsonResponse($data);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user