Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
WCAG-compliant TYPO3 site package for Italian public administrations
1. BIT3
WCAG-compliant TYPO3
site package for
Italian public administrations
@abramoteso
Abramo Tesoro
tesoro@archicoop.it
github.com/Nostrabramus
www.linkedin.com/in/abramotesoro/
2. A BIT ABOUT ME
07/24/2023 T3DD23
Abramo Tesoro
Frontend Developer and TYPO3 Developer
at Archimede Informatica
Work with TYPO3 since 2007
Work with Bootstrap since 2015
Work with Bootstrap Italia since 2018
3. BOOTSTRAP ITALIA
07/24/2023 T3DD23
It’s completely open source, built on Bootstrap 5.2.3, from which it inherits all
features, components, grids and classes.
It is a specialization of Bootstrap according to the design, usability and
accessibility guidelines defined in the new 'Design Guidelines for Public
Administration Websites and Digital Services'.
Bootstrap Italia is a library developed by the
Dipartimento per la Transizione Digitale
(Department for Digital Transition) and AGID
(Agenzia per l'Italia Digitale - Agency for Digital
Italy) for building websites of municipalities and
public administrations.
www.agid.gov.it
The introduction of Bootstrap Italia was an important step forward achieved by listening to the feedback from the developer community,
the first library released (Web Toolkit) was completely self-contained and therefore made it necessary to familiarise oneself with and use
a complex specific library to realise sites for public administration.
5. GOALS
07/24/2023 T3DD23
Develop a ready-to-use TYPO3 extension that implements
the Bootstrap Italia templates, css and js libraries
A Backend Module that allows editors without integrator skills
to fully configure the website
Override templates and configurations of some core and third-party
extensions to implement layouts and features provided by Bootstrap Italia
Adding functionality and developing custom CTypes that implements
components designed by Bootstrap Italia
Publish the site package in the Reuse Catalogue,
a repository dedicated to host software developed for PA
6. NEXT GENERATION EU
07/24/2023 T3DD23
the site package is developed
for the new websites
of municipalities using
Next Generation EU funds
in order to obtain funding, it is necessary to pass the
accessibility tests using the apps issued by AGID
https://github.com/italia/pa-website-validator/releases
7. NEXT GENERATION EU
07/24/2023 T3DD23
the site package is developed
for the new websites
of municipalities using
Next Generation EU funds
in addition, the site package will have to be released
in the reuse catalogue so that it will be available to
other municipalities that wish to adopt it
https://developers.italia.it/it/search.html
13. SITE PACKAGE - MODULE
07/24/2023 T3DD23
Analytics (Matomo)
Google Analytics is not GDPR compliant, so AGID released
Web Analytics Italia (webanalytics.italia.it)
a specific analytics service dedicated to
public administrations powered by Matomo
14. SITE PACKAGE - BACKEND LAYOUTS
07/24/2023 T3DD23
We've added 8 different Backend Layouts
Home, 1 Column, 2 Column with Aside on Left,
2 Column with Aside on Right, 3 Columns
some of these are the classical page types:
15. SITE PACKAGE - BACKEND LAYOUTS
07/24/2023 T3DD23
We've added 8 different Backend Layouts
News Detail, News List, Services
others are Bootstrap Italia specific page templates:
16. Home is the most structured Backend Layout
SITE PACKAGE - BACKEND LAYOUTS
07/24/2023 T3DD23
in the typoscript the footer sections (colpos 11-14) are
configured with slide = -1 so that the editor can freely modify
and compose those sections of the footer in home page, so that
all pages can inherit them.
lib.content.footer.left = COA
lib.content.footer.left {
10 < styles.content.get
10 {
select.where = colPos=11
slide = -1
}
}
lib.content.footer.center = COA
lib.content.footer.center {
10 < styles.content.get
10 {
select.where = colPos=12
slide = -1
}
}
lib.content.footer.right = COA
lib.content.footer.right {
10 < styles.content.get
10 {
select.where = colPos=13
slide = -1
}
}
/Configuration/Typoscript/Library/lib.footer.setupts
Bootstrap Italia did not allow the possibility of having different footers in different
pages and therefore it was not possible to modify that section in the subpages
17. [page["backend_layout"] == "pagets__NewsDetail"]
temp.newsTitle = RECORDS
temp.newsTitle {
dontCheckPid = 1
tables = tx_news_domain_model_news
source.data = GP:tx_news_pi1|news
source.intval = 1
conf.tx_news_domain_model_news = TEXT
conf.tx_news_domain_model_news {
field = title
htmlSpecialChars = 1
}
wrap = |
}
temp.newsTeaser < temp.newsTitle
temp.newsTeaser {
conf.tx_news_domain_model_news {
field = teaser
htmlSpecialChars = 1
}
wrap = |
}
temp.newsDate < temp.newsTitle
temp.newsDate {
conf.tx_news_domain_model_news {
field = datetime
}
wrap = |
}
config.pageTitle.stdWrap.override.cObject < temp.newsTitle
page.10.variables {
pageTitle >
pageTitle < temp.newsTitle
teaserNews = TEXT
teaserNews < temp.newsTeaser
newsDate = TEXT
newsDate < temp.newsDate
}
[global]
/Configuration/Typoscript/Library/lib.newsdetail.setupts
SITE PACKAGE - BACKEND LAYOUTS
07/24/2023 T3DD23
News Detail is the most complex sophisticated from the frontend point of view
Once the page with News Detail as Backend Layout has been
configured, its metadata will be modified accordingly to extract
them from the news instead of from the page…
18. SITE PACKAGE - BACKEND LAYOUTS
07/24/2023 T3DD23
News Detail is the most complex sophisticated from the frontend point of view
Once the page with News Detail as Backend Layout has been
configured, its metadata will be modified accordingly to extract
them from the news instead of from the page…
…and the news plugin that renders the detail will automatically be
loaded in its content lib.newsdetail = USER
lib.newsdetail {
userFunc = TYPO3CMSExtbaseCoreBootstrap->run
extensionName = News
pluginName = Pi1
vendorName = GeorgRinger
switchableControllerActions {
News {
1 = detail
}
}
settings =< plugin.tx_news.settings
settings {
singleNews.field = uid
useStdWrap = singleNews
insertRecord = 1
listPid = {$id_archivio_news}
backPid = {$id_archivio_news}
templateLayout = 99
}
view =< plugin.tx_news.view
}
/Configuration/Typoscript/Library/lib.newsdetail.setupts
22. SITE PACKAGE - TCA STANDARD CTYPE
07/24/2023 T3DD23
Small customizations have been made in the TCAs of the default CTypes
The columns in the Bootstrap Italia image galleries is based on the Bootstrap grids, so the
number of columns that can be configured are only 1, 2, 3, 4 and 6
23. $GLOBALS['TCA']['tt_content']['columns']['imagecols']['config']['items'] = array (
['1',1,],
['2',2,],
['3',3,],
['4',4,],
['6',6,],
);
Configuration/TCA/Overrides/tt_content.php
SITE PACKAGE - TCA STANDARD CTYPE
07/24/2023 T3DD23
Small customizations have been made in the TCAs of the default CTypes
The columns in the Bootstrap Italia image galleries is based on the Bootstrap grids, so the
number of columns that can be configured are only 1, 2, 3, 4 and 6
24. SITE PACKAGE - TCA STANDARD CTYPE
07/24/2023 T3DD23
Small customizations have been made in the TCAs of the default CTypes
Added the field Layout to sys_file_reference table
to allow choosing the “thumbnail” layout for images
25. $customSysFileReferenceColumns = [
'layout' => [
'exclude' => true,
'label' => 'LLL:EXT:bit3/Resources/Private/Language/locallang_db.xlf:image.layout',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'items' => [
['LLL:EXT:bit3/Resources/Private/Language/locallang_db.xlf:image.layout.default', 0, ‘'],
['LLL:EXT:bit3/Resources/Private/Language/locallang_db.xlf:image.layout.thumbnail', 1, ''],
],
'default' => 0,
],
],
];
TYPO3CMSCoreUtilityExtensionManagementUtility::addTCAcolumns('sys_file_reference', $customSysFileReferenceColumns);
TYPO3CMSCoreUtilityExtensionManagementUtility::addFieldsToPalette('sys_file_reference', 'imageoverlayPalette', ‘layout');
Configuration/TCA/Overrides/sys_file_reference.php
SITE PACKAGE - TCA STANDARD CTYPE
07/24/2023 T3DD23
Small customizations have been made in the TCAs of the default CTypes
Added the field Layout to sys_file_reference table
to allow choosing the “thumbnail” layout for images
26. SITE PACKAGE - TCA STANDARD CTYPE
07/24/2023 T3DD23
Small customizations have been made in the TCAs of the default CTypes
Added the field Layout to sys_file_reference table
to allow choosing the “thumbnail” layout for images
CREATE TABLE sys_file_reference (
layout tinyint(4) DEFAULT '0' NOT NULL
);
ext_table.sql
27. SITE PACKAGE - TCA STANDARD CTYPE
07/24/2023 T3DD23
Small customizations have been made in the TCAs of the default CTypes
Added Masonry Layout to
image, textpic and textmedia CTypes
28. SITE PACKAGE - TCA STANDARD CTYPE
07/24/2023 T3DD23
Small customizations have been made in the TCAs of the default CTypes
Added Masonry Layout to
image, textpic and textmedia CTypes
Configuration/TSconfig/tt_content.pagets
TCEFORM.tt_content {
layout {
types {
image {
addItems {
201 = Masonry
}
}
textpic {
addItems {
201 = Masonry
}
}
textmedia {
addItems {
201 = Masonry
}
}
}
}
}
29. SITE PACKAGE - CUSTOM CTYPE
07/24/2023 T3DD23
We have added the custom CTypes provided by Bootstrap Italia
30. SITE PACKAGE - CUSTOM CTYPE
07/24/2023 T3DD23
We have added the custom CTypes provided by Bootstrap Italia
mod.wizards.newContentElement.wizardItems.custom {
elements {
bit3_accordion {
iconIdentifier = accordion
title = LLL:EXT:bit3/Resources/Private/Language/locallang_db.xlf:accordion
description = LLL:EXT:bit3/Resources/Private/Language/locallang_db.xlf:accordion.description
tt_content_defValues {
CType = bit3_accordion
}
}
}
show := addToList(bit3_accordion)
}
/Configuration/TSconfig/Contents/Accordion.pagets
mod.wizards.newContentElement.wizardItems.custom {
elements {
bit3_callout {
iconIdentifier = callout
title = LLL:EXT:bit3/Resources/Private/Language/locallang_db.xlf:callout
description = LLL:EXT:bit3/Resources/Private/Language/locallang_db.xlf:callout.description
tt_content_defValues {
CType = bit3_callout
}
}
}
show := addToList(bit3_callout)
}
/Configuration/TSconfig/Contents/Callout.pagets
31. SITE PACKAGE - CUSTOM CTYPE
07/24/2023 T3DD23
We have added the custom CTypes provided by Bootstrap Italia
mod.wizards.newContentElement.wizardItems.custom {
elements {
bit3_card {
iconIdentifier = card
title = LLL:EXT:bit3/Resources/Private/Language/locallang_db.xlf:card
description = LLL:EXT:bit3/Resources/Private/Language/locallang_db.xlf:card.description
tt_content_defValues {
CType = bit3_card
}
}
}
show := addToList(bit3_card)
}
/Configuration/TSconfig/Contents/Card.pagets
mod.wizards.newContentElement.wizardItems.custom {
elements {
bit3_tab {
iconIdentifier = tab
title = LLL:EXT:bit3/Resources/Private/Language/locallang_db.xlf:tab
description = LLL:EXT:bit3/Resources/Private/Language/locallang_db.xlf:tab.description
tt_content_defValues {
CType = bit3_tab
}
}
}
show := addToList(bit3_tab)
}
/Configuration/TSconfig/Contents/Tab.pagets
32. SITE PACKAGE - CUSTOM CTYPE
07/24/2023 T3DD23
We have added the custom CTypes provided by Bootstrap Italia
mod.wizards.newContentElement.wizardItems.custom {
elements {
bit3_timeline {
iconIdentifier = timeline
title = LLL:EXT:bit3/Resources/Private/Language/locallang_db.xlf:timeline
description = LLL:EXT:bit3/Resources/Private/Language/locallang_db.xlf:timeline.description
tt_content_defValues {
CType = bit3_timeline
}
}
}
show := addToList(bit3_timeline)
}
/Configuration/TSconfig/Contents/Timeline.pagets
53. SITE PACKAGE - CUSTOM CTYPE -ACCORDION
07/24/2023 T3DD23
Accordion - JS Filter
Bootstrap Italia provides a specific FAQ page that municipalities must make
available to citizens
https://italia.github.io/design-comuni-pagine-statiche/sito/domande-frequenti.html
We also have added a specific layout to the CType Accordion to show the filter at
the top of the accordion elements
Configuration/TSconfig/tt_content.pagets
TCEFORM.tt_content {
layout {
types {
bit3_accordion {
addItems {
101 = Top Filter
}
}
}
}
}
54. SITE PACKAGE - CUSTOM CTYPE -ACCORDION
07/24/2023 T3DD23
Accordion - JS Filter
Bootstrap Italia provides a specific FAQ page that municipalities must make
available to citizens
https://italia.github.io/design-comuni-pagine-statiche/sito/domande-frequenti.html
We also have added a specific layout to the CType Accordion to show the filter at
the top of the accordion elements
Configuration/TSconfig/tt_content.pagets
TCEFORM.tt_content {
layout {
types {
bit3_accordion {
addItems {
101 = Top Filter
}
}
}
}
}
When the Accordion content is set up with Top Filter layout the
widget for filtering the FAQs is shown on top of the accordion
elements
63. SITE PACKAGE - CUSTOM CTYPE - TIMELINE
07/24/2023 T3DD23
64. SITE PACKAGE - TSCONFIG - LAYOUTS
07/24/2023 T3DD23
More layouts added to different CTypes Configuration/TSconfig/tt_content.pagets
TCEFORM.tt_content {
layout {
types {
menu_categorized_content {
addItems {
101 = List Box
102 = Bottoni
103 = Footer Menu
}
}
menu_categorized_pages {
addItems {
101 = List Box
102 = Bottoni
103 = Footer Menu
}
}
menu_pages {
addItems {
101 = List Box
102 = Bottoni
103 = Footer Menu
}
}
menu_recently_updated {
addItems {
101 = List Box
102 = Bottoni
103 = Footer Menu
}
}
menu_related_pages {
addItems {
101 = List Box
102 = Bottoni
Menus
65. SITE PACKAGE - TSCONFIG - LAYOUTS
07/24/2023 T3DD23
More layouts added to different CTypes
Sitemap
Configuration/TSconfig/tt_content.pagets
TCEFORM.tt_content {
layout {
types {
menu_sitemap {
addItems {
104 = Site Map
105 = Site Map Orizzontale
}
}
}
}
}
66. SITE PACKAGE - TSCONFIG - LAYOUTS
07/24/2023 T3DD23
More layouts added to different CTypes
Uploads (File Links)
Configuration/TSconfig/tt_content.pagets
TCEFORM.tt_content {
layout {
types {
uploads {
addItems {
101 = Card
}
}
}
}
}
67. SITE PACKAGE - COREAND THIRD PARTY EXTENSIONS
07/24/2023 T3DD23
To implement the Bootstrap Italia design we have also overwritten the templates of the extensions used
lib.contentElement {
templateRootPaths {
100 = EXT:bit3/Resources/Private/CoreExtensions/fluid_styled_content/Templates/
}
partialRootPaths {
100 = EXT:bit3/Resources/Private/CoreExtensions/fluid_styled_content/Partials/
}
layoutRootPaths {
100 = EXT:bit3/Resources/Private/CoreExtensions/fluid_styled_content/Layouts/
}
}
/Configuration/Typoscript/Library/CoreExtensions/fluidstyledcontent.setupts
68. SITE PACKAGE - COREAND THIRD PARTY EXTENSIONS
07/24/2023 T3DD23
To implement the Bootstrap Italia design we have also overwritten the templates of the extensions used
page.config.index_enable = 1
plugin.tx_indexedsearch {
settings {
displayRules = 0
displayAdvancedSearchLink = 0
targetPid = {$pages.id_search_page}
}
view {
templateRootPaths {
100 = EXT:bit3/Resources/Private/CoreExtensions/indexed_search/Templates/
}
partialRootPaths {
100 = EXT:bit3/Resources/Private/CoreExtensions/indexed_search/Partials/
}
layoutRootPaths {
100 = EXT:bit3/Resources/Private/CoreExtensions/indexed_search/Layouts/
}
}
}
/Configuration/Typoscript/Library/CoreExtensions/indexedsearch.setupts
69. SITE PACKAGE - COREAND THIRD PARTY EXTENSIONS
07/24/2023 T3DD23
To implement the Bootstrap Italia design we have also overwritten the templates of the extensions used
plugin.tx_news {
settings {
detail.media.image.maxWidth = 400
list.media {
dummyImage = EXT:bit3/Resources/Public/Images/news-no-img.jpg
image.maxWidth = 443
image.maxHeight = 245
}
listPid = {$pages.id_archivio_news}
startingpoint = {$containers.id_folder_news}
}
view {
templateRootPaths {
100 = EXT:bit3/Resources/Private/Extensions/news/Templates/
}
partialRootPaths {
100 = EXT:bit3/Resources/Private/Extensions/news/Partials/
}
layoutRootPaths {
100 = EXT:bit3/Resources/Private/Extensions/news/Layouts/
}
}
}
/Configuration/Typoscript/Library/Extensions/news.setupts
75. Configuration/Typoscript/Library/rte.setupts
lib.parseFunc_RTE {
externalBlocks {
table{
stdWrap{
HTMLparser.tags.table.fixAttrib.class.list := addToList(table, table-primary,
table-secondary, table-success, table-danger, table-warning, table-info, table-light, table-dark,
table-striped, table-bordered, table-borderless, table-sm)
wrap = <div class="table-responsive">|</div>
}
}
}
}
Bootstrap and consequently Bootstrap Italia make tables responsive by
wrapping them in a div with class table-responsive. We then added
typoscript to the lib.parseFunc_RTE object to add this feature.
SITE PACKAGE - CKEDITOR
07/24/2023 T3DD23
We have configured CKEditor to use the styles provided by Bootstrap Italia
76. SITE PACKAGE - FORMS
07/24/2023 T3DD23
Bootstrap Italia provides an accessibility evaluation form on each page to receive feedback from users
77. SITE PACKAGE - FORMS
07/24/2023 T3DD23
Bootstrap Italia provides an accessibility evaluation form on each page to receive feedback from users
78. SITE PACKAGE - FORMS
07/24/2023 T3DD23
Bootstrap Italia provides an accessibility evaluation form on each page to receive feedback from users
79. SITE PACKAGE - FORMS
07/24/2023 T3DD23
Bootstrap Italia provides an accessibility evaluation form on each page to receive feedback from users
BIT3 implements a preconfigured form, the editor only needs to add the emails of the feedback recipients
/Resources/Private/Form/formFeedbackAccessibilita.form.yaml
renderingOptions:
submitButtonLabel: 'Invia la valutazione'
type: Form
identifier: feedbackForm
label: FeedbackForm
prototypeName: standard
finishers:
-
options:
subject: 'Feedback Accessibilità'
recipients:
abramotesoro@gmail.com: ''
senderAddress: metsmtpsender@archicoop.it
senderName: 'Feedback dal sito'
addHtmlPart: true
attachUploads: true
useFluidEmail: false
title: ''
identifier: EmailToSender
-
options:
message: 'Grazie, il tuo parere ci aiuterà a migliorare il servizio!'
contentElementUid: ''
identifier: Confirmation
renderables:
-
renderingOptions:
previousButtonLabel: ''
80. SITE PACKAGE - FORMS
07/24/2023 T3DD23
Bootstrap Italia provides an accessibility evaluation form on each page to receive feedback from users
BIT3 implements a preconfigured form, the editor only needs to add the emails of the feedback recipients
/Resources/Private/Form/formFeedbackAccessibilita.form.yaml
previousButtonLabel: ''
nextButtonLabel: ''
type: Page
identifier: page-1
label: ''
renderables:
-
properties:
options:
1: '1'
2: '2'
3: '3'
4: '4'
5: '5'
type: RadioButton
identifier: radiobutton-1
label: 'Quanto sono chiare le informazioni su questa pagina?'
-
properties:
options:
'A volte le indicazioni non erano chiare': 'A volte le indicazioni non erano chiare'
'A volte le indicazioni non erano complete': 'A volte le indicazioni non erano complete'
'A volte non capivo se stavo procedendo correttamente': 'A volte non capivo se stavo
procedendo correttamente'
'Ho avuto problemi tecnici': 'Ho avuto problemi tecnici'
Altro: Altro
type: RadioButton
identifier: radiobutton-2
81. SITE PACKAGE - FORMS
07/24/2023 T3DD23
Bootstrap Italia provides an accessibility evaluation form on each page to receive feedback from users
BIT3 implements a preconfigured form, the editor only needs to add the emails of the feedback recipients
/Resources/Private/Form/formFeedbackAccessibilita.form.yaml
type: RadioButton
identifier: radiobutton-2
label: 'Dove hai incontrato maggiori difficoltà?'
-
properties:
options:
'Le indicazioni erano chiare': 'Le indicazioni erano chiare'
'Le indicazioni erano complete': 'Le indicazioni erano complete'
'Capivo sempre che stavo procedendo correttamente': 'Capivo sempre che stavo procedendo
correttamente'
'Non ho avuto problemi tecnici': 'Non ho avuto problemi tecnici'
Altro: Altro
type: RadioButton
identifier: radiobutton-3
label: 'Quali sono stati gli aspetti che hai preferito? '
-
defaultValue: ''
type: Text
identifier: text-1
label: 'Vuoi aggiungere altri dettagli?'
82. FUTURE DEVELOPMENTS
07/24/2023 T3DD23
Publication on Reuse Catalogue, TER, Github
Module development to improve usability and add
features (contrast check, ability to add services
dynamically…)
Form Segnala Disservizio
(report service disruption)
SCSS implementation
…
Listen Page Button
83. THANK YOU!
BIT3
WCAG-compliant TYPO3
site package for
Italian public administrations
@abramoteso
Abramo Tesoro
tesoro@archicoop.it
github.com/Nostrabramus
www.linkedin.com/in/abramotesoro/