Configuration
This extension ships its frontend TypoScript and its backend page TSconfig in two forms: as TYPO3 site sets, and as classic static templates plus page TSconfig files that are selected on a page. Both forms read the very same files, so they configure an installation identically.
Pick one of them per site and stay with it — see Do not combine both for what happens otherwise.
What the sets contain
The extension ships one content element, so it ships one component set and one aggregate set that depends on it.
| Set | Delivers |
|---|---|
fgtclb/ | The Contact list content element: its TypoScript
(plugin.), the data processor that
assigns the contacts of a page to the page template, and the page
TSconfig that makes the content element selectable in the backend. |
fgtclb/ | Everything above. This is the set to use unless you deliberately want a subset. |
Both depend on fgtclb/, the set of
EXT:academic_base that labels the content element group all academic
extensions sort their elements into.
Note
The setup of this extension reads
{$plugin. — a constant this
extension does not declare and that belongs to
EXT:academic_persons. Further constants of that extension are
mapped the same way, because the partials rendering a contact read them:
the crop variant of the lists
{$plugin., the
image placeholders
{$plugin.,
{$plugin.,
{$plugin. and
{$plugin., and
the phone link prefix
{$plugin..
Nothing has to be done about it. The component names that extension's
TypoScript in its own include_, and both delivery
mechanisms read that file, so the constant resolves whether this extension
arrives through its site set or through its static template.
The site set deliberately does not depend on a set of EXT:academic_persons. Such a dependency would not deliver the constant, and it would make that extension's content element selectable wherever this one is enabled.
Include the site set
Add the set to the config. of the site that should offer the content
element:
base: 'https://example.com/'
rootPageId: 1
+dependencies:
+ - fgtclb/academic-contacts4pages
See also TYPO3 Explained, Using a site set as dependency in a site.
Include static templates
For an installation that still configures its frontend through
sys_ records, the same files are registered as static templates
and as selectable page TSconfig files.
Tip
On TYPO3 v13 and v14 we recommend the site set — and if you use it, do not
press the backend button Create a root TypoScript record on that
site. The
sys_ record it creates carries the flag
Clear for constants and setup, and that flag discards everything
the site sets contributed. An installation that is already in that state
gets its configuration back by selecting the static templates below in that
very record.
Include static TypoScript
Edit the
sys_ record of the site root and add the entry to
Include static (from extensions):
| Entry | Delivers |
|---|---|
| Academic Contacts4Pages: Contact list (academic_contacts4pages) | The TypoScript of the Contact list content element. |
| Academic Contacts4Pages: All components (academic_contacts4pages) | Every component this extension ships, in one entry. |
| Academic Contacts4Pages: Path up to 2.3 (deprecated, use All components) (academic_contacts4pages) | The same as All components without the TypoScript of EXT:academic_persons, for a record that still stores the path of version 2.3. Deprecated, removed in version 4.0, see Deprecation: The static template path of version 2.3. |
Include static page TSconfig
Edit the page record of the site root, tab Resources, field Page TSconfig, and add the entry:
| Entry | Delivers |
|---|---|
| Academic Contacts4Pages: Contact list (academic_contacts4pages) | Makes the Contact list content element selectable, and configures its entry in the new content element wizard. |
| Academic Contacts4Pages: All components (academic_contacts4pages) | Every component this extension ships, in one entry. |
The setting is inherited by every page below the one it is set on.
Do not combine both
A site that uses the site set and the static template reads the shipped
files twice. The site set is applied before the
sys_ record, so
the second read happens after the site settings and after
config/ — and it resets every constant
the extension ships a default for back to that default. For this extension
those are the three Fluid root paths of the plugin and the
content element header switch.
Nothing else is damaged: the Constants and Setup fields
of the
sys_ record, the page TSconfig of a page and the page
TSconfig files selected on a page are all applied afterwards and still win. Use
one mechanism per site and the question does not arise.
The contact list
Group by role
The Configuration tab of the content element offers
Group by role (
settings.), switched on by
default.
- On – one heading per role, each followed by the contacts of that role, then the contacts without a role. A page on which no contact has a role renders one list without headings.
- Off – all contacts in one list, in the order they are sorted on the
page. A contact with a role shows its role name above its card, in an
element with the class
academic-.contacts4pages__ role
A content element saved before the option existed stores no value for it and reads the TypoScript default, so it keeps grouping:
plugin.tx_academiccontacts4pages.settings.groupByRole = 1
A value stored in the content element always wins over it.
The contact item partial
Contacts/ arranges the contacts and renders each of them
through Contacts/ of this extension — in the role groups,
below them and in the list that is not grouped. The grid column around the
partial belongs to the list template. By default the partial renders the
profile item of EXT:.
To change the card of a contact, override this partial rather than the list template:
plugin.tx_academiccontacts4pages.view.partialRootPaths.20 = EXT:my_sitepackage/Resources/Private/Extensions/academic_contacts4pages/Partials/
| Argument | Holds |
|---|---|
contact | The contact. |
role | The role of the contact, or nothing when it has none. |
profile | The profile behind the contract of the contact. |
contract | The contract the contact names. |
settings | The plugin settings. |
data | The content element record, as an array. |
grouped | Set when the contact renders below the heading of its role. The default partial then renders the profile name one heading level lower and leaves out the role name, which the heading already shows. |
The list template also receives record, the content element as a record
object. A project list template that renders the header partial of
EXT: itself needs it on TYPO3 v14 — which only makes
sense where the layout of the content element leaves the header out, as it is
rendered twice otherwise. See
the changelog entry
for what such a template needs. The shipped template renders the header itself
while the switch below is on, so a
copy made for the header alone is no longer needed.
The contacts in a page template
The data processor of this extension hands the contacts of a page to a page
template, for a page layout that shows them outside the content area, as a
sidebar or a slide-in panel. The shipped TypoScript attaches it to
page., where most site packages, the bootstrap package among
them, put their page template, by its identifier academic-. The
contacts are the ones the content element shows: a contact whose contract or
profile is not visible is left out, and a listener of the
page contacts event reaches both
outputs.
| Variable | Holds |
|---|---|
contacts | The contacts of the page, in the order they are sorted on the page. |
roles | The roles at least one of those contacts has, keyed by the uid of the role. |
contacts | The contacts that have no role, which the grouped list of the content element renders below the role groups. |
The processor takes three options, each with
std:
| Option | Default | Effect |
|---|---|---|
as
| empty | The variable that holds contacts, roles and
contacts. Without it, the three are written at the top
level of the page template. |
show | 0 | 1 shows hidden contacts and the hidden e-mail addresses, phone
numbers and addresses of a contact, as the
Show hidden records option of the content element does.
The page is cached with them, so every visitor sees them. |
page | the page that is rendered | The page whose contacts are read. Without it, the processor does nothing when it is attached to an object whose current record is not a page, a content element for example. |
Contacts are edited in the form of their page and stored on it, so saving them
clears the cache of that page. A page that shows the contacts of another page
through
page is not cleared with it and keeps the old contacts
until its own cache is cleared. The page TSconfig of the page the contacts
belong to can clear it as well:
TCEMAIN.clearCacheCmd = 42
The options go on the shipped entry:
page.10.dataProcessing.400 {
as = pageContacts
showHiddenRecords = 0
}
A site package that defines its page object after this extension's TypoScript
is included, or that renders a further page object, a page type of its own for
example, attaches the processor there by the same identifier. Assigning a new
content object to
page. keeps the properties set before, the
shipped
data included, so clear it first, or the
processor runs twice. A processor attached twice to one page object on purpose
needs a variable name for at least one of them, or the second overwrites the
first:
page.10 >
page.10 = PAGEVIEW
page.10 {
paths.10 = EXT:my_sitepackage/Resources/Private/Templates/
dataProcessing {
40 = academic-page-contacts
40.as = pageContacts
}
}
pageContacts
<f:for each="{pageContacts.roles}" as="role">
<h2>{role.name}</h2>
<f:for each="{pageContacts.contacts}" as="contact">
<f:if condition="{contact.role.uid} == {role.uid}">
<p>{contact.contract.profile.firstName} {contact.contract.profile.lastName}</p>
</f:if>
</f:for>
</f:for>
<f:for each="{pageContacts.contactsWithoutRole}" as="contact">
<p>{contact.contract.profile.firstName} {contact.contract.profile.lastName}</p>
</f:for>
A page template that renders the contacts through the Profile/
partial of EXT:academic_persons needs the partial root paths of
that extension and of EXT:academic_base in its view, see
Breaking: Profile images render as a responsive picture.
The class name
\FGTCLB\ in
place of the identifier keeps working, for TypoScript written before the
identifier existed.
The header of the content elements
The header and the subheader an editor enters on a Contacts for this page content element are rendered by the content element layout of the site, as for any other content element. The layouts of EXT:fluid_styled_content and of the bootstrap package do that, and the plugins render no header of their own.
A site whose content element layout renders no header, because its element templates render it instead, lets the plugins render it:
plugin.tx_academiccontacts4pages.renderContentElementHeader = 1
The extension declares no site settings, so a site that uses the site set sets
the constant in config/. The templates
then render the header partial of EXT:fluid_styled_content above
their output, for every header layout except Hidden. Do not switch
it on where the layout renders the header: the header then appears twice.
The extension does not require EXT:fluid_styled_content. It adds the
partial path of that extension below every other one, so a site package that
ships a Header/ of its own renders that one instead, and a site
without EXT:fluid_styled_content provides the partial that way.
For the header layout Default, the partial takes the heading level
from
plugin., which is mapped
from the constant
styles. of
EXT:fluid_styled_content. A site that does not include the
TypoScript of EXT:fluid_styled_content sets the setting itself;
without it, such a header renders as an empty
<header>
element.