<?php
namespace App\Controller;
use App\Website\Tool\Image;
use Devkitchen\DocumentIndexingBundle\Annotations\IndexingDocumentType;
use Devkitchen\DocumentIndexingBundle\Controller\DocumentTypeAwareController;
use Devkitchen\DocumentIndexingBundle\IndexingService\IndexingService;
use Pimcore\Model\Asset;
use Pimcore\Model\DataObject\Location;
use Pimcore\Model\Document\Page;
use Pimcore\Model\Document\Service;
use Pimcore\Translation\Translator;
use Symfony\Component\DomCrawler\Crawler;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class ArticleController extends BaseController implements DocumentTypeAwareController {
/**
* @Route({
* "de": "/{_locale}/entdecken/news-presse",
* "en": "/{_locale}/entdecken/news-presse"
* }, name="article_not_filtered", methods={"GET"})
*
* @Route({
* "de": "/{_locale}/entdecken/news-presse/typ/{key}",
* "en": "/{_locale}/entdecken/news-presse/typ/{key}"
* }, name="article_filtered_by_key", methods={"GET"})
*
* @param Request $request
*
* @return Response
*/
public function listingAction(Request $request, IndexingService $indexingService, Translator $translator): Response {
$filterActive = $request->get('key', 'default');
$aggregatedFilter = $indexingService->getFieldAggregated( 'article', 'documentSubtype' );
//$listing = $indexingService->listing( 'article', [ $filterActive ], 'default', $request->get('_locale', 'de'), 'documentDate', 'desc');
$listing = $indexingService->setOrderBy( 'documentDate')
->setOrderDirection( 'desc')
->listing( 'article', [ $filterActive ], 'default', $request->get('_locale', 'de'));
$listingCount = 0;
if ($listing) {
$listingCount = count( $listing );
}
//list view = 1;
$columnCount = 1;
//grid view
//$columnCount = 3;
$rows = [];
if ($listingCount > 0) {
$rowCount = ceil( $listingCount / $columnCount );
$contentIndex = 0;
for ($i = 0; $i < $rowCount; $i++) {
$content = [];
for($c = 0; $c < $columnCount; $c++) {
if (isset($listing[$contentIndex])) {
$item = $listing[$contentIndex];
$teaserImageId = $item->teaserAssetId;
if ($teaserImageId) {
$teaserImage = Asset::getById( $teaserImageId );
}
else {
$teaserImage = $this->document->getProperty( 'document-teaser-image-fallback' );
}
if ($teaserImage) {
$gridImageData = Image::getGridThumbnailMetaData( $teaserImage, 4, $this->editmode, 'teaser-default' );
$teaserThumbnail = $teaserImage->getThumbnail( $gridImageData->thumbnail );
$teaserSubtitle = null;
if ($item->documentSubtype) {
foreach($item->documentSubtype as $key) {
$teaserSubtitle[] = $translator->trans('filter.value.'.$key);
}
$teaserSubtitle = implode(', ', $teaserSubtitle);
}
//list view
$content[] = $this->renderView( 'includes/partials/stuff/document-list-item.html.twig', [
'url' => Page::getById( $item->documentId ),
'title' => $item->teaserTitle,
'subtitle' => null, //$teaserSubtitle,
'text' => $item->teaserContent,
'image' => $teaserThumbnail->getHtml()
] );
//grid view
//$content[] = $this->renderView( 'includes/partials/teaser/teaser-image-title.html.twig', [
// 'url' => Page::getById( $item->documentId ),
// 'title' => $item->teaserTitle,
// 'subtitle' => $teaserSubtitle,
// 'image' => $teaserThumbnail->getHtml()
//] );
$contentIndex ++;
}
}
}
//list view
$rows[] = $this->renderView( 'includes/partials/stuff/div.html.twig', [
'content' => implode('', $content),
'classes' => 'grid grid--t50 grid--50-4-5 grid--vc document-list'
]);
//grid view
//$rows[] = $this->renderView( 'includes/partials/stuff/grid-row.html.twig', [
// 'columns' => $content,
// 'classes' => 'grid--t33 grid--4-4-4'
//]);
} //endfor
$request->getSession()->set('article-listing', $listing);
$request->getSession()->set('article-listing-route', [
'route' => $request->get('_route'),
'params' => $request->get('_route_params')
]);
}
return $this->render( 'article/listing.html.twig', [
'layoutClass' => 'layout--listing layout--article',
'filter' => $aggregatedFilter,
'filterActive' => $filterActive,
'listing' => $listing,
'listingRows' => $rows
]);
}
/**
* @param Request $request
* @param IndexingService $indexingService
*
* @return Response
*
* @IndexingDocumentType(type="article", tagIdForSubtype="6")
*/
public function detailAction(Request $request, IndexingService $indexingService): Response {
$prevItem = null;
$nextItem = null;
$overview = null;
if ($listing = $request->getSession()->get( 'article-listing')) {
$item = $indexingService->get( $this->document );
if ($item) {
foreach($listing as $key => $listingItem) {
if ($listingItem->id == $item->id) {
if (isset($listing[$key - 1])) {
$prevItem = $listing[$key - 1];
}
if (isset($listing[$key + 1])) {
$nextItem = $listing[$key + 1];
}
}
}
}
$overview = $request->headers->get( 'referer');
if ($overviewRouteInfo = $request->getSession()->get('article-listing-route')) {
$overview = $this->generateUrl( $overviewRouteInfo['route'], $overviewRouteInfo['params'] ?: []);
}
//p_r($request->get('_route'));
//p_r($request->get('_route_params'));
}
return $this->render('article/detail.html.twig', [
'layoutClass' => 'layout--article',
'overview' => $overview,
'prev' => $prevItem,
'next' => $nextItem
]);
}
}