- Rebuild the widget server-backed: it renders only when GET state allows (logged-in FE user of the configured group), so the script tag is safe on public pages; form with mini rich text (bold/italic/ list), file attachment chips and Ctrl+V image paste - a paste lazily creates the draft feedback, uploads and inserts the image inline - Note pad badge mirrors the server item count; the pad button links to the overview page via new extension setting overviewPid, exposed as overviewUrl in GET state (slug lookup) - Embed /fileadmin images of notes into the feedback mail as CID parts: relative srcs are dead in mail clients and dev sits behind basic auth; attachment links stay absolute URLs - public/widget-test.html: dev test page, doubles as the reference implementation of the React login flow (fetch felogin JSON form incl. __RequestToken, urlencoded POST to /_json + form.action) - Docs section 5x (fe_comment v2 incl. CSRF login lesson, templateRootPaths.10 collision, cache:flush before extension:setup)
EXT:fe_comment — page feedback widget
A floating button at the right edge of every page lets reviewers (e.g. the customer) comment on the page they are looking at. Notes collect on a local note pad (localStorage, survives navigation and SPA route changes); the pad lists every note with its URL and editable text and submits them all in one mail.
Framework-agnostic: the whole UI is one vanilla-JS file served by the extension itself — it works on a React/SPA front end and on classic TYPO3-rendered pages alike.
Endpoints (middleware, active on every site with the extension installed)
| URL | Purpose |
|---|---|
/api/fe-comment/widget.js |
the widget (injects its own CSS) |
/api/fe-comment/widget.css |
widget styles |
/api/fe-comment/submit |
POST {"entries":[{"url","comment"}]} → sends the mail |
Configuration (Settings → Extension Configuration → fe_comment)
- mailTo (required) / mailCc / mailBcc — comma-separated lists.
Without a valid
mailTo, submissions are rejected (HTTP 503), nothing is lost silently. - subject — subject line, host and entry count are appended.
- jsonOutput —
1(default): headless mode, TYPO3 injects nothing; the front end embeds the widget itself:<script src="/api/fe-comment/widget.js" defer></script>0: classic TYPO3 site, the extension injects the script into every rendered frontend page automatically (AssetCollector, no TypoScript).
The sender address is TYPO3's system default
($GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress']).
Notes for SPA setups
- The page URL is read at SAVE time (
location.pathname + search), so client-side route changes are captured correctly. - If page URLs are rewritten to an SPA fallback (like the vitec
.htaccessphase B block),/api/paths must stay excluded from the fallback so the endpoints keep reaching TYPO3.
Labels
UI labels are German and live in the T object at the top of
Resources/Public/JavaScript/fe-comment.js.