diff --git a/Classes/Domain/Model/News.php b/Classes/Domain/Model/News.php index d042f4b004717147ad9e35f700652254dc8786b1..607c4a7799b49b3e3ff5e2795eb536effee32ea7 100644 --- a/Classes/Domain/Model/News.php +++ b/Classes/Domain/Model/News.php @@ -26,6 +26,9 @@ namespace SGalinski\SgNews\Domain\Model; * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ +use SGalinski\SgNews\Domain\Repository\CategoryRepository; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Domain\Model\FileReference; use TYPO3\CMS\Extbase\Persistence\Generic\LazyLoadingProxy; use TYPO3\CMS\Extbase\Persistence\ObjectStorage; @@ -102,6 +105,16 @@ class News extends CategoryAndNews { */ protected $enableComments = TRUE; + /** + * @var Category + */ + protected $categoryCache = NULL; + + /** + * @var FileReference + */ + protected $teaserImageCache = NULL; + /** * Constructor */ @@ -402,4 +415,64 @@ class News extends CategoryAndNews { public function setEnableComments(bool $enableComments): void { $this->enableComments = $enableComments; } + + /** + * Get the assigned category + * + * @return Category + */ + public function getCategory(): Category { + if ($this->categoryCache instanceof Category) { + return $this->categoryCache; + } + + return $this->categoryCache = GeneralUtility::makeInstance(CategoryRepository::class) + ->findByUid($this->pid); + } + + /** + * Get the teaser image object + * + * @return FileReference|null + */ + public function getTeaserImageObject(): ?FileReference { + if ($this->teaserImageCache instanceof FileReference) { + return $this->teaserImageCache; + } + $teaserImage = $this->getTeaser1Image()->current(); + if ($teaserImage instanceof FileReference) { + return $this->teaserImageCache = $teaserImage; + } + + $teaserImage = $this->getCategory()->getTeaser1Image()->current(); + if ($teaserImage instanceof FileReference) { + return $this->teaserImageCache = $teaserImage; + } + + $teaserImage = $this->getTeaser2Image()->current(); + if ($teaserImage instanceof FileReference) { + return $this->teaserImageCache = $teaserImage; + } + + return NULL; + } + + /** + * Get the teaser image public url + * + * @return string + */ + public function getTeaserImage() { + $teaserImage = $this->getTeaserImageObject(); + if ($teaserImage === NULL) { + return ''; + } + + $originalResource = $teaserImage->getOriginalResource(); + if ($originalResource === NULL) { + return ''; + } + + return $originalResource->getPublicUrl(); + } } diff --git a/Resources/Private/Templates/SingleView/SingleView.html b/Resources/Private/Templates/SingleView/SingleView.html index 485bcc8336512b54f606db299edfd667c1daefe3..bc803ad9a7d71e029c1eb26a2b5a32a8fda177e7 100644 --- a/Resources/Private/Templates/SingleView/SingleView.html +++ b/Resources/Private/Templates/SingleView/SingleView.html @@ -221,6 +221,13 @@ iteration="iterator" limit="5" as="relatedNewsEntry"> + <f:variable name="relatedNewsMetaData" + value="{ + news: relatedNewsEntry, + teaserImage: relatedNewsEntry.teaserImage, + teaserImageObject: relatedNewsEntry.teaserImageObject, + category: relatedNewsEntry.category + }" /> <f:if condition="{iterator.isFirst}"> <div class="tx-sgnews-single-related"> <h3> @@ -229,10 +236,11 @@ <ul class="tx-sgnews-list tx-sgnews-overview"> </f:if> <li class="col-md-4 col-sm-6 col-xs-12"> - <f:render partial="TeaserRelated" arguments="{ - news: relatedNewsEntry, + <f:render partial="Teaser" arguments="{ + newsMetaData: relatedNewsMetaData, headerTag: '<h2>', - closingHeaderTag: '</h2>' + closingHeaderTag: '</h2>', + showCategory: '1' }" /> </li> <f:if condition="{iterator.isLast}">