Assorted snippets¶
This section contains snippets making EXT:news more awesome which might be useful for your projects as well.
Show FAL properties in fluid¶
Every property of a file, e.g. the copyright (available via EXT:filemetadata) can be rendered in templates by using e.g. {file.originalResource.properties.copyright}
.
A full example can look like this
<f:for each="{newsItem.mediaNonPreviews}" as="mediaElement">
<div class="thumbnail">
<f:media file="{mediaElement}" class="img-fluid" />
<f:if condition="{mediaElement.originalResource.properties.copyright}">
<small>{mediaElement.originalResource.properties.copyright}</small>
</f:if>
</div>
</f:for>
Use <f:debug>{mediaElement.originalResource.properties}</f:debug>
to get all available properties
Improved back links¶
The back link on a detail page is a fixed link to a given page. However it might be that you use multiple list views and want to change the link depending on the given list view.
A nice solution would be to use this JavaScript jQuery snippet:
if ($(".news-backlink-wrap a").length > 0) {
if(document.referrer.indexOf(window.location.hostname) != -1) {
$(".news-backlink-wrap a").attr("href","javascript:history.back();");
}
}
Creating links with Fluid¶
Besides the ViewHelper <n:link />
you can also use the ViewHelpers of Fluid itself:
<f:link.page pageUid="13" additionalParams="{tx_news_pi1: {controller: 'News',action: 'detail', news:newsItem.uid}}">{newsItem.title}</f:link.page>
<a href="{f:uri.page(pageUid:13,additionalParams:'{tx_news_pi1:{controller:\'News\',action:\'detail\',news:newsItem.uid}}')}">{newsItem.title}</a>
Creating links in PHP¶
If you want to create links within PHP you can usw the following snippet as inspiration:
public function createLink(int $pageId, array $arguments = [], bool $absolute = false): string
{
$site = GeneralUtility::makeInstance(SiteFinder::class)->getSiteByPageId($pageUid);
return (string)$site->getRouter()->generateUri(
(string)$pageUid,
$arguments,
'',
($absolute ? RouterInterface::ABSOLUTE_URL : RouterInterface::ABSOLUTE_PATH)
);
}
$pageId = 123; // news detail page uid
$newsRecordUid = 1234; // news record uid
$absolute = true; // full url or relative url
$arguments = [
'tx_news_pi1' => [
'action' => 'detail',
'controller' => 'News',
'news' => $newsRecordId,
],
];
$newsDetailPageUrlForNews = createLink($pageId, $arguments, true);
Set n:link target page in Fluid¶
If the detail page should not be set in the plugin or by a category, it can also be set within the template:
<n:link
newsItem="{newsItem}"
configuration=“{parameter:settings.somePid}"
settings="{settings}" title="{newsItem.title}"><f:translate key="more-link"/></n:link>
The setting settings.somePid
can e.g. set with plugin.tx_news.settings.somePid=123
.
Render category rootline¶
If you want to show not only the title of a single category which is related to the news item but the complete category rootline use this snippets.
<f:if condition="{category:newsItem.firstCategory}">
<ul class="category-breadcrumb">
<f:render section="categoryBreadcrumb" arguments="{category:newsItem.firstCategory}" />
</ul>
</f:if>
and
<f:section name="categoryBreadcrumb">
<f:if condition="{category}">
<f:if condition="{category.parentCategory}">
<f:render section="categoryBreadcrumb" arguments="{category:category.parentCategory}" />
</f:if>
<li>{category.title}</li>
</f:if>
</f:section>
Use current content element in the template¶
If you ever need information from the content element itself, you can use {contentObjectData.header}
.
Use current page in the template¶
If you ever need information from the current page, you can use {pageData.uid}
.
Sort tags¶
If you want to sort the tags of a news item, you can use a custom ViewHelper or EXT:vhs
:
<ul>
<f:for each="{newsItem.tags->v:iterator.sort(order: 'ASC', sortBy: 'title')}" as="tag">
<li>{tag.title}</li>
</f:for>
</ul>
Render news items in columns¶
If you need to list news next to each other and need some additional CSS classes, you can the following snippet. The provided example will wrap 3 items into a div with the class "row".
<f:for each="{news -> n:iterator.chunk(count: 3)}" as="col" iteration="cycle">
<div class="row">
<f:for each="{col}" as="newsItem">
<div class="col-md-4">
<f:render partial="List/Item" arguments="{newsItem: newsItem, settings:settings}"/>
</div>
</f:for>
</div>
</f:for>
Override pagination labels¶
To override the labels used in the pagination, you can use the following TypoScript snippet:
plugin.tx_fluid {
_LOCAL_LANG {
// default for default = english language
default {
widget.pagination.next = my custom next
}
de {
widget.pagination.next = nächste Seite
}
}
}
As an alternative it is also possible to adopt the partial List/Pagination.html
and use XLF files of your own extension.
<a href="...">
{f:translate(key:'widget.pagination.next', extensionName: 'yourSitePackage')}
</a>