Show success stories below the product lists, linked on the category
sys_category gains a story selection and a layout (Options tab, alongside the images field EXT:news puts there), so one editorial decision serves every product list that renders the category. ProductListJsonRenderer emits them beside the products in the 7.3 list envelope; each card carries forCategories - the product categories it came from - so the front end hides it with the same ?cat=/?subcat= filter it applies to the products. Stories are collected over the category and its descendants and deduplicated. Story links follow the existing rule (detail page's parent path plus slug, which SuccessStoryPathRewrite maps back), taking the page from the element's FlexForm or the new site setting vitec.storyDetailPid. Spec raised to 1.17 with clause 7.15.2.1; the header had been left at 1.12 although entries up to 1.15 already existed, so today's two entries were renumbered to 1.16 and 1.17.
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
| | |
|
||||
|---|---|
|
||||
| **Document identifier** | EVO‑VITEC‑HL‑001 |
|
||||
| **Version** | 1.15 |
|
||||
| **Version** | 1.17 |
|
||||
| **Status** | Released |
|
||||
| **Date** | 2026‑09‑11 |
|
||||
| **Applies to** | `evomedien/vitec` on TYPO3 v14.3 (headless) |
|
||||
@@ -26,9 +26,10 @@
|
||||
| 1.10 | 2026‑08‑18 | **Interface change (additive).** `tx_vitec_domain_model_product` gained five fields: `heroimage` (multiple FAL images, detail payload only), the richtext fields `description2`, `capabilities` and `textrelatedproducts`, and `portfolio` (TCA `link`) — emitted as a **resolved URL** through the new `LinkResolver::typolinkUrl()`. The product payloads are specified for the first time (7.15). Links in `contentelement` / `contentelementcta` that point at a **container** now resolve its children (`items`, page‑level shape) and `background` (7.4). Two record link handlers (`download`, `product`) added to the link browser, resolved server‑side per the new Clause 9.12; new middleware `vitec/download-file` streams `/download/file/<uid>` as a forced download (5.3), file lookup consolidated into `DownloadFileResolver` — first step towards the B‑4 target (10.2). Backend‑only: `relatedprodukt` moved from the Misc tab to General. Editorial: the document footer had been stuck at v1.7 since v1.8. |
|
||||
| 1.11 | 2026‑08‑21 | **New interface: site search.** Apache Solr 10 (dedicated VPS behind an HTTPS reverse proxy) with `apache-solr-for-typo3/solr` 14.0.0-RC1. The EXT:solr results plugin `solr_pi_results` on the search page is rendered headless by `SearchJsonRenderer` (payload key `search`) - request/response contract in the new Clause 7.16. Indexed corpus: pages plus product, market (`detail_page` only), use-case, news and download records; result `type` vocabulary `page\|product\|market\|story\|news\|download`. Downloads gained the canonical route `/download/<slug>` (uid route kept for the record links) and `private_download` is now enforced by `DownloadFileResolver` (5.3, 9.12). The VITEC Set now declares the solr set as a dependency - overriding a foreign set’s TypoScript requires loading after it (5.2). Editorial: the header table had been stuck at v1.9 since v1.10. |
|
||||
| 1.12 | 2026‑08‑24 | **Interface change (additive).** The search endpoint (7.16) gained a type filter and facet counts: request parameter `filter` (a value from the `type` vocabulary; the natural name `type` is unavailable - it is TYPO3’s reserved page-type parameter), response keys `filter` (active filter or null) and `facets.type` (per-type document counts with `active` flags; counts stay complete while a filter is active, except when the filtered result is empty). Editorial baseline of 76 managed synonyms imported into `core_en` (codecs, acquired-brand names such as `exterity => avedia`, UK/US spellings, common misspellings) - synonyms apply at query time, no re-index. New autocomplete endpoint: the EXT:solr suggest plugin as lean JSON page type 7384, deliberately USER_INT (7.16). |
|
||||
| 1.13 | 2026‑09‑11 | **New plugin** `vitec_productfinder` (`ProductFinderJsonRenderer`, payload key `productfinder`): the product category hierarchy on its own, as the data source for the filter selects above the product lists (7.15.3, 8). No change to `vitec_productlist` — filtering happens client side over the products already delivered, keyed on the category uids this payload carries. |
|
||||
| 1.14 | 2026‑09‑11 | **Interface change (additive).** Secondary search facets: stories index their market titles (`market_stringM`, MM relation), products their sys_category titles (`category_stringM`); the search endpoint accepts `market` and `category` GET parameters (values verbatim from `facets.<name>[].value`; an unknown value simply yields zero results) and echoes them as `activeFacets`. Visibility fix: the usecases queue now honours `no_index`/`hideonwebsite`, products defensively `hideonwebsite` - and the excluded story’s document was removed explicitly, because re-indexing never deletes. |
|
||||
| 1.15 | 2026‑09‑11 | **Corpus change (additive, index side).** Download documents now carry the extracted file text: Solr 10 has no ExtractingRequestHandler, so a dedicated Apache Tika container on the Solr VPS (Caddy route `/tika/*`, own basic-auth credential) extracts PDF/Office contents during indexing (`TikaDownloadContentIndexer` on `BeforeDocumentIsProcessedForIndexingEvent`, fail-soft per 9.5, cached in `var/tika-cache` keyed on path+size+mtime). Datasheet specifications are now searchable ("625i", "genlock"). No interface change. |
|
||||
| 1.16 | 2026‑09‑11 | **New plugin** `vitec_productfinder` (`ProductFinderJsonRenderer`, payload key `productfinder`): the product category hierarchy on its own, as the data source for the filter selects above the product lists (7.15.3, 8). No change to `vitec_productlist` — filtering happens client side over the products already delivered, keyed on the category uids this payload carries. |
|
||||
| 1.17 | 2026‑09‑11 | **Interface change (additive).** The product list payload gained `successStories` (7.15.2.1): stories an editor attaches to a `sys_category` (tab *Options*, with its own layout), emitted in the list envelope beside `products`. Each card carries `forCategories` — the product categories it came from — so the front end can hide it with the same `?cat=`/`?subcat=` filter it applies to the products. Story links reuse the 7.5 rule, with the detail page taken from the element or the new site setting `vitec.storyDetailPid`. |
|
||||
|
||||
This document is drafted in the style of, and adopts the terminology conventions of,
|
||||
ISO/IEC/IEEE 42010 (architecture description), ISO/IEC/IEEE 26514 (information for
|
||||
@@ -907,6 +908,51 @@ rarely shows. The `layout` vocabulary remains `0`–`3` (see the v1.9 note).
|
||||
|
||||
---
|
||||
|
||||
#### 7.15.2.1 Success stories below a product list
|
||||
|
||||
The list payload carries a second array beside `products`: the success stories
|
||||
an editor attached to the categories this element renders. The link lives on
|
||||
`sys_category` (tab *Options*), not on the plugin, so one decision serves every
|
||||
list that shows the category.
|
||||
|
||||
```json
|
||||
"successStories": {
|
||||
"layout": "grid",
|
||||
"stories": [
|
||||
{
|
||||
"uid": 12,
|
||||
"title": "Abu Dhabi Islamic Bank",
|
||||
"detailUrl": "/success-stories/abu-dhabi-islamic-bank",
|
||||
"cardImage": { },
|
||||
"categories": [ ],
|
||||
"forCategories": [58]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Envelope per 7.3 (`layout` plus the array); `layout` uses the story-list
|
||||
vocabulary `grid|list|carousel|50-50` and comes from the first category that
|
||||
contributes stories. Cards are the shared story shape of 7.5, so the same
|
||||
front-end component renders them.
|
||||
|
||||
`forCategories` is the addition: the **product** categories the story was
|
||||
attached to — not to be confused with `categories`, which stays the story's own
|
||||
topic categories. The front end filters on it, using the same `?cat=` /
|
||||
`?subcat=` parameters the product finder (7.15.3) writes: a card stays visible
|
||||
while one of its categories is selected. Stories are collected over the
|
||||
configured categories **and their descendants**, deduplicated, each carrying
|
||||
every category it came from. An element configured to show all products has no
|
||||
category context and returns the empty envelope.
|
||||
|
||||
`detailUrl` follows 7.5: the story's own `detail_page` wins; otherwise the URL
|
||||
is built from the detail page's parent path plus the story slug — the form
|
||||
`SuccessStoryPathRewrite` maps back. That page is taken from the element's
|
||||
FlexForm, falling back to the site setting `vitec.storyDetailPid`, and
|
||||
`detailUrl` is `null` when neither is set.
|
||||
|
||||
---
|
||||
|
||||
#### 7.15.3 Product Finder payload (`vitec_productfinder`, key `productfinder`)
|
||||
|
||||
The filter above the product lists is fed by its own element. It carries the
|
||||
|
||||
Reference in New Issue
Block a user