Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Classes/Controller/SearchController.php
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,11 @@ public function detailsAction(array $searchParams = []): ResponseInterface

}

// manage template file for detail view from extension (set in setup.typoscript of the extension)
if (isset($this->settings['detailTemplatePath'])) {
$this->view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName($this->settings['detailTemplatePath']));
}

// set page title
$pageTitle = $this->formatPageTitle($elasticResponse['_source']['title'] ?? 'Details');
$this->titleProvider->setTitle($pageTitle);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Configuration\ExtensionConfiguration;


/**
* Event to modify the site configuration array before loading the configuration
*/
Expand Down
50 changes: 50 additions & 0 deletions Classes/ViewHelpers/CommaSeparatedListElementViewHelper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php
namespace Slub\LisztCommon\ViewHelpers;

use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;

/**
* ViewHelper to render dt Element with comma separated fields and optional prefix for Detail View
*/
class CommaSeparatedListElementViewHelper extends AbstractViewHelper
{

protected $escapeOutput = false;

public function initializeArguments(): void
{
$this->registerArgument('values', 'array', 'The values to join', true);
$this->registerArgument('label', 'string', 'label for dt Element', true);
}

public function render(): string
{
$values = $this->arguments['values'];
$label = $this->arguments['label'];

$nonEmptyValues = array_filter($values, function($value) {
return $value !== null && $value !== '';
});

$html = '';

if (empty($nonEmptyValues)) return $html;

$formattedValues = [];
foreach ($nonEmptyValues as $key => $value) {
if (is_string($key) && !is_numeric($key)) {
$formattedValues[] = $key . ' ' . $value;
} else {
$formattedValues[] = $value;
}
}

$html .= '<div>';
$html .= '<dt>'.$label.'</dt>';
$html .= '<dd>'.implode(', ', $formattedValues).'</dd>';
$html .= '</div>';

return $html;
}

}
136 changes: 10 additions & 126 deletions Resources/Private/Templates/Search/Details.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,145 +4,29 @@
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
xmlns:i="http://typo3.org/ns/Quellenform/Iconpack/ViewHelpers"
data-namespace-typo3-fluid="true">
<f:variable name="languageFilePath">LLL:EXT:{settings.entityTypes.1.extensionName}/Resources/Private/Language/{settings.entityTypes.1.languageFile}.xlf</f:variable>


<f:variable name="languageFilePath">LLL:EXT:{settings.extensionName}/Resources/Private/Language/{settings.languageFile}.xlf</f:variable>
<f:render partial="DetailBreadcrumb" arguments="{_all}" />

<main role="main" id="page-content">
<div class="container-xl sidebar-right grid grid-4col-lg grid-3col-md searchresults">

<div class="searchresults-info frame">


</div>
<div class="container-xl sidebar-left grid grid-3col-md searchdetail">


<aside class="sidebar">
aside
<div class="frame">
<div class="searchdetail-item-icon"><i:icon iconfig="{lc:ItemTypeIconName(iconPackKey: 'lziconsr', itemType: searchResult._source.itemType)}" preferredRenderTypes="svgSprite" additionalAttributes="{aria-hidden:'true'}" /></div>
</div>
</aside>

<div class="content grid-colspan-lg-3 grid-colspan-md-2">
<div class="content grid-colspan-md-2">
<div class="frame">
<p>
<strong>itemType:</strong> {searchResult._source.itemType}
</p>
<p>
<strong>Title:</strong> {searchResult._source.title}
</p>
<p>
<strong>BookTitle:</strong> {searchResult._source.bookTitle}
</p>
<p>
<strong>University:</strong> {searchResult._source.university}
</p>
<p>
<strong>journalAbbreviation:</strong> {searchResult._source.journalAbbreviation}
</p>
<p>
<strong>Series:</strong> {searchResult._source.series}
</p>
<p>
<strong>publicationTitle:</strong> {searchResult._source.publicationTitle}
</p>
<p>
<strong>Volume:</strong> {searchResult._source.volume}
</p>
<p>
<strong>Issue:</strong> {searchResult._source.issue}
</p>
<p>
<strong>Place:</strong> {searchResult._source.place}
</p>
<p>
<strong>Date:</strong> {searchResult._source.date}
</p>
<p>
<strong>Pages:</strong> {searchResult._source.pages}
</p>
<p>
<strong>Language:</strong> {searchResult._source.language}
</p>
<p>
<strong>ShortTitle:</strong> {searchResult._source.shortTitle}
</p>
<p>
<strong>Url:</strong> {searchResult._source.url}
</p>
<p>
<strong>archiveLocation:</strong> {searchResult._source.archiveLocation}
</p>

<strong>Creators:</strong>
<f:if condition="{searchResult._source.creators}">
<f:then>
<ul>
<f:for each="{searchResult._source.creators}" as="creator">
<li>
<f:if condition="{creator.firstName}">
{creator.firstName}
</f:if>
<f:if condition="{creator.lastName}">
{creator.lastName}
</f:if>
<f:if condition="{creator.creatorType}">
(<span>{creator.creatorType}</span>)
</f:if>
</li>
</f:for>
</ul>
</f:then>
<f:else>
<p>Keine Creators vorhanden.</p>
</f:else>
</f:if>


<strong>collections:</strong>
<f:if condition="{searchResult._source.collections}">
<f:then>
<ul>
<f:for each="{searchResult._source.collections}" as="collection">
<li>
{collection}
</li>
</f:for>
</ul>
</f:then>
<f:else>
<p>Keine collections vorhanden.</p>
</f:else>
</f:if>

<strong>relations:</strong>
<f:if condition="{searchResult._source.relations}">
<f:then>
<ul>
<f:for each="{searchResult._source.relations}" as="relation" key="index">
<li>
{index}:
<f:if condition="{relation.0}">
<f:then>
<ul>
<f:for each="{relation}" as="subRelation">
<li>{subRelation}</li>
</f:for>
</ul>
</f:then>
<f:else>
{relation}
</f:else>
</f:if>
</li>
</f:for>
</ul>
<p>
<strong>Generische Detailseite</strong>
Es ist kein Pfad für die Detailseite in setup.typoscript der Extension eingetragen.
</p>


</f:then>
<f:else>
<p>Keine relations vorhanden.</p>
</f:else>
</f:if>

</div>
</div>
Expand Down