<?php
namespace App\Controller;
use Pimcore\Controller\FrontendController;
use Pimcore\Model\DataObject;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Contracts\Translation\TranslatorInterface;
use Knp\Component\Pager\PaginatorInterface;
class NewsController extends FrontendController {
// -----------------------------------
// GET DETAIL
// -----------------------------------
/**
* @Route("/{path}/{headline}_n{id}",
* name="newslist",
* requirements={
* "path"=".*",
* "headline"="[\w-]+",
* "id"="\d+"
* }
* )
*/
public function getDetail(Request $request, TranslatorInterface $translator): Response
{
$documentId = $this->document->getId();
// preview
$preview = $request->get('preview');
// parameters
$routeParameters = $request->attributes->get('_route_params');
$id = $routeParameters['id'];
//$title = $routeParameters['title'];
// news object
$detail = DataObject\News::getById($id);
$device = \Pimcore\Tool\DeviceDetector::getInstance();
$device->getDevice(); // returns "phone", "tablet" or "desktop"
// view
if ($detail && ($preview == 'true' || $detail->getPublished())) {
$headline = HelperController::toUrl($detail->getHeadline());
$detailLink = $this->generateUrl('newslist', [
'id' => $id,
'headline' => $headline,
'path' => $translator->trans('news-url-path')
]);
return $this->render('news/detail.html.twig', [
'newsDetail' => $detail,
'newsDetailLink' => $detailLink,
'documentId' => $documentId,
'isDesktop' => $device->isDesktop(),
'isTablet' => $device->isTablet(),
'isPhone' => $device->isPhone(),
'deviceType' => $device->getDevice()
]);
} else {
throw new NotFoundHttpException("News object not found");
}
}
/**
* @Route("api/news-list", name="news-api-list")
* @param Request $request
* @param TranslatorInterface $translator
* @return JsonResponse
*/
public function newsApiAction(Request $request, TranslatorInterface $translator): JsonResponse
{
// set empty json array
$json = [];
// get a list of news objects and order them by date
$apiList = new DataObject\News\Listing();
$apiList->setOrderKey('date');
$apiList->setOrder('DESC');
$apiList->setOffset($request->get('offset', 0));
$apiList->setLimit($request->get('limit', 100));
foreach ($apiList as $item) {
$headline = HelperController::toUrl($item->getHeadline());
$detailLink = $this->generateUrl('newslist', [
'id' => $item->getId(),
'headline' => $headline,
'path' => $translator->trans('news-url-path')
]);
$json[] = [
'id' => $item->getId(),
'key' => $item->getKey(),
'date' => $item->getDate()->format('d.m.Y'),
'headline' => nl2br($item->getHeadline()),
'intro' => substr($item->getIntro(), 0, 155),
'image' => $item->getTeaserImage()->getThumbnail('NewsOverview')->getPath(),
'detailLink' => $detailLink
];
}
return $this->json($json);
}
}