From 222e6f28dbf747bc9876101f19b678e765e6438f Mon Sep 17 00:00:00 2001 From: Kevin Ditscheid <kevin.ditscheid@sgalinski.de> Date: Wed, 27 Apr 2022 13:05:42 +0200 Subject: [PATCH] [TASK] Add the possibility to reuse the Teaser partial --- Classes/Domain/Model/News.php | 73 +++++++++++++++++++ .../Templates/SingleView/SingleView.html | 14 +++- 2 files changed, 84 insertions(+), 3 deletions(-) diff --git a/Classes/Domain/Model/News.php b/Classes/Domain/Model/News.php index d042f4b..607c4a7 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 485bcc8..bc803ad 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}"> -- GitLab