src/Controller/NewsController.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Pimcore\Controller\FrontendController;
  4. use Pimcore\Model\DataObject;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  10. use Symfony\Contracts\Translation\TranslatorInterface;
  11. use Knp\Component\Pager\PaginatorInterface;
  12. class NewsController extends FrontendController {
  13.     // -----------------------------------
  14.     // GET DETAIL
  15.     // -----------------------------------
  16.     /**
  17.      * @Route("/{path}/{headline}_n{id}",
  18.      *      name="newslist",
  19.      *      requirements={
  20.      *          "path"=".*",
  21.      *          "headline"="[\w-]+",
  22.      *          "id"="\d+"
  23.      *      }
  24.      * )
  25.      */
  26.     public function getDetail(Request $requestTranslatorInterface $translator): Response
  27.     {
  28.         $documentId $this->document->getId();
  29.         // preview
  30.         $preview $request->get('preview');
  31.         // parameters
  32.         $routeParameters $request->attributes->get('_route_params');
  33.         $id $routeParameters['id'];
  34.         //$title = $routeParameters['title'];
  35.         // news object
  36.         $detail DataObject\News::getById($id);
  37.         $device \Pimcore\Tool\DeviceDetector::getInstance();
  38.         $device->getDevice(); // returns "phone", "tablet" or "desktop"
  39.         // view
  40.         if ($detail && ($preview == 'true' || $detail->getPublished())) {
  41.             $headline HelperController::toUrl($detail->getHeadline());
  42.             $detailLink $this->generateUrl('newslist', [
  43.                 'id' => $id,
  44.                 'headline' => $headline,
  45.                 'path' => $translator->trans('news-url-path')
  46.             ]);
  47.             return $this->render('news/detail.html.twig', [
  48.                 'newsDetail' => $detail,
  49.                 'newsDetailLink' => $detailLink,
  50.                 'documentId' => $documentId,
  51.                 'isDesktop'   => $device->isDesktop(),
  52.                 'isTablet'    => $device->isTablet(),
  53.                 'isPhone'     => $device->isPhone(),
  54.                 'deviceType'  => $device->getDevice()
  55.             ]);
  56.         } else {
  57.             throw new NotFoundHttpException("News object not found");
  58.         }
  59.     }
  60.     /**
  61.      * @Route("api/news-list", name="news-api-list")
  62.      * @param Request $request
  63.      * @param TranslatorInterface $translator
  64.      * @return JsonResponse
  65.      */
  66.     public function newsApiAction(Request $requestTranslatorInterface $translator): JsonResponse
  67.     {
  68.         // set empty json array
  69.         $json = [];
  70.         // get a list of news objects and order them by date
  71.         $apiList = new DataObject\News\Listing();
  72.         $apiList->setOrderKey('date');
  73.         $apiList->setOrder('DESC');
  74.         $apiList->setOffset($request->get('offset'0));
  75.         $apiList->setLimit($request->get('limit'100));
  76.         foreach ($apiList as $item) {
  77.             $headline HelperController::toUrl($item->getHeadline());
  78.             $detailLink $this->generateUrl('newslist', [
  79.                 'id' => $item->getId(),
  80.                 'headline' => $headline,
  81.                 'path' => $translator->trans('news-url-path')
  82.             ]);
  83.             $json[] = [
  84.                 'id' => $item->getId(),
  85.                 'key'   => $item->getKey(),
  86.                 'date' => $item->getDate()->format('d.m.Y'),
  87.                 'headline' => nl2br($item->getHeadline()),
  88.                 'intro' => substr($item->getIntro(), 0155),
  89.                 'image' => $item->getTeaserImage()->getThumbnail('NewsOverview')->getPath(),
  90.                 'detailLink' => $detailLink
  91.             ];
  92.         }
  93.         return $this->json($json);
  94.     }
  95. }