Last active
January 21, 2020 14:39
-
-
Save shm-sl/0867a25b360c1d214c13ca7df4acee10 to your computer and use it in GitHub Desktop.
Fluid Typo3 Content Element: Alphabetic Index
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div xmlns="http://www.w3.org/1999/xhtml" lang="en" | |
xmlns:f="http://typo3.org/ns/TYPO3/Fluid/ViewHelpers" | |
xmlns:flux="http://typo3.org/ns/FluidTYPO3/Flux/ViewHelpers" | |
xmlns:v="http://typo3.org/ns/FluidTYPO3/Vhs/ViewHelpers"> | |
<f:layout name="Content" /> | |
<f:section name="Configuration"> | |
<flux:form id="azIndex" options="{group: 'FCE'}"> | |
<flux:field.multiRelation | |
name="settings.entryPages" | |
label="Entry Pages" | |
table="pages" | |
minItems="1" maxItems="1000" size="6" | |
multiple="true" | |
> | |
<flux:wizard.suggest/> | |
</flux:field.multiRelation> | |
</flux:form> | |
</f:section> | |
<f:section name="Preview"> | |
<!-- If you wish, place custom backend preview content here --> | |
<strong>Entry Pages:</strong> {settings.entryPages} | |
</f:section> | |
<f:section name="Main"> | |
<!-- set global var to access it in subsections --> | |
<v:variable.register.set name="azPageList" value=""/> | |
<!-- split settings.entryPages string into array --> | |
<f:variable name="entryUIDs"><v:iterator.explode content="{settings.entryPages}" glue=","/></f:variable> | |
<!-- recursive walk through every entry --> | |
<f:for each="{entryUIDs}" as="entryPage"> | |
<f:render section="MenuRecursionStart" arguments="{entryPage: '{entryPage}'}"/> | |
</f:for> | |
<!-- hyperlinks to headers --> | |
<f:render section="TableOfLetters"/> | |
<!-- sort collected pages by alphabet and render --> | |
<f:render section="SortAndRender"/> | |
<f:section name="SortAndRender"> | |
<f:for each="{v:variable.register.get(name: 'azPageList') -> v:iterator.sort(sortBy: 'title')}" as="item"> | |
<f:variable name="currentLetter" value="{v:format.substring(content: item.title, start: 0, length: 1)}"/> | |
<f:if condition="{currentLetter} !== {previousLetter}"> | |
<!-- if not the first headline, close ul tag --> | |
<f:if condition="{previousLetter} !== ''"> | |
</ul> | |
</f:if> | |
<!-- render headline & update previousLetter--> | |
<h2 id="{currentLetter}"><v:format.case string="{currentLetter}" case="upper"/></h2><ul class="lst-none lst-angel"> | |
<f:variable name="previousLetter" value="{currentLetter}"/> | |
</f:if> | |
<li class="li {item.class}"> | |
<v:page.link pageUid="{item.uid}" /> | |
</li> | |
</f:for> | |
<!-- close last ul --> | |
</ul> | |
</f:section> | |
<f:section name="TableOfLetters"> | |
<f:variable name="previousLetter" value=""/> | |
<f:for each="{v:variable.register.get(name: 'azPageList') -> v:iterator.sort(sortBy: 'title')}" as="item"> | |
<f:variable name="currentLetter" value="{v:format.substring(content: item.title, start: 0, length: 1)}"/> | |
<f:if condition="{currentLetter} !== {previousLetter}"> | |
<!-- if not the first letter, add divider --> | |
<f:if condition="{previousLetter} !== ''"> | |
| | |
</f:if> | |
<!-- render letter & update previousLetter--> | |
<a href="#{currentLetter}"><v:format.case string="{currentLetter}" case="upper"/></a> | |
<f:variable name="previousLetter" value="{currentLetter}"/> | |
</f:if> | |
</f:for> | |
<hr> | |
</f:section> | |
<f:section name="MenuRecursionStep"> | |
<!-- read from global var --> | |
<f:variable name="pageList" value="{v:variable.register.get(name: 'azPageList')}"/> | |
<f:if condition="{currentPage.hasSubPages}"> | |
<v:menu pageUid="{currentPage.uid}"> | |
<f:if condition="{menu}"> | |
<!-- merge menu array to page collection --> | |
<f:variable name="pageList" value="{menu -> v:iterator.merge(b: pageList, useKeys: 1)}"/> | |
<!-- write back to global var --> | |
<v:variable.register.set name="azPageList" value="{pageList}"/> | |
<f:for each="{menu}" as="currentSubPage"> | |
<f:render section="MenuRecursionStep" arguments="{currentPage: '{currentSubPage}'}" /> | |
</f:for> | |
</f:if> | |
</v:menu> | |
</f:if> | |
</f:section> | |
<f:section name="MenuRecursionStart"> | |
<!-- read from global var --> | |
<f:variable name="pageList" value="{v:variable.register.get(name: 'azPageList')}"/> | |
<v:menu pageUid="{entryPage}"> | |
<f:if condition="{menu}"> | |
<!-- merge menu array to page collection --> | |
<f:variable name="pageList" value="{menu -> v:iterator.merge(b: pageList, useKeys: 1)}"/> | |
<!-- write back to global var --> | |
<v:variable.register.set name="azPageList" value="{pageList}"/> | |
<f:for each="{menu}" as="startLevelPage"> | |
<f:render section="MenuRecursionStep" arguments="{currentPage: '{startLevelPage}'}"/> | |
</f:for> | |
</f:if> | |
</v:menu> | |
</f:section> | |
</f:section> | |
</div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[...] | |
<trans-unit id="flux.azIndex"> | |
<source>Alphabetic Index</source> | |
</trans-unit> | |
<trans-unit id="flux.azIndex.description"> | |
<source>Alphabetic sitemap of selected pages</source> | |
</trans-unit> | |
[...] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment