Products megamenu as a data-driven catalog with a Solr product type-ahead

- evo_megamenu_json stays project-neutral: new panel layout "catalog";
  for such entries the MenuBuilder dispatches the new PSR-14 event
  BuildCatalogEvent and emits whatever a listener sets as `catalog`
  (null without a listener). The entry's teaser cards serve as the
  featured tiles; the teaser inline field now also shows for "catalog",
  and the entry form reloads when the layout changes. README section
  "Layout catalog"
- VITEC listener ProvideProductCatalog fills it, modelled on the Ross
  Video products menu: main categories below the "Product" root, their
  subcategories as groups, products with a plain-text one-line teaser;
  same visibility rules as the product list, Product Finder links
  (/products?cat=&subcat=), empty categories and groups left out, three
  queries for the whole catalog
- Product type-ahead GET /_json/?type=7385&q= (USER_INT page type,
  ProductMenuSearchJsonRenderer): Solr restricted to products, last term
  completed as a prefix, up to six product cards plus their titles as
  autocomplete suggestions; endpoint announced in catalog.search
- Spec v1.23 (clause 7.16: product type-ahead)
This commit is contained in:
orasche committed 2026-10-09 13:40:23 +02:00
1 parent b5fcdb2b5a
commit 887caed2aa
8 files changed
+502 -6

No files matched your search

@@ -974,6 +974,24 @@ tx_solr_suggest {
}
}
# =============================================================================
# Product type-ahead of the megamenu catalog panel (2026-10-09):
# GET /_json/?type=7385&q=<input> -> { query, suggestions[], products[] }
# (ProductMenuSearchJsonRenderer). USER_INT for the same reason as 7384:
# every keystroke is a new query. `q` is excluded from cHash (ext_localconf).
# =============================================================================
vitec_product_menu_search = PAGE
vitec_product_menu_search {
typeNum = 7385
config {
disableAllHeaderCode = 1
additionalHeaders.10.header = Content-Type: application/json; charset=utf-8
}
10 = USER_INT
10.userFunc = Evomedien\Vitec\UserFunc\ProductMenuSearchJsonRenderer->render
}
plugin.tx_solr.suggest = 1
plugin.tx_solr.suggest {
numberOfSuggestions = 8