Productcatalogus¶
De Atraxion-webshop verkoopt drie hoofdproducttypen aan professionele klanten (B2B):
banden, velgen en accessoires. Daarnaast bestaat er het conceptuele type sets
(band + velg gecombineerd) en diensten. Categorisatie loopt uitsluitend via ArticleCategory;
het verouderde Warengruppe/ArticleGroup-veld op het artikel is een legacy-overblijfsel dat
niet gebruikt wordt voor categorie-logica.
Producttypen en categorieën¶
De productcategorieën zijn gedefinieerd als constanten in
_core/model/classes/atx/articles/ArticleCategory.php:
// _core/model/classes/atx/articles/ArticleCategory.php:14
public const ACCESSORY = 1; // Accessoires
public const TYRE = 2; // Banden
public const WHEEL = 3; // Velgen
public const KIT = 5; // Sets (band+velg)
public const SERVICE = 9; // Diensten
Op het Article-model zit dezelfde numerieke set als CATEGORY_ACCESSORY, CATEGORY_TYRE,
CATEGORY_WHEEL (_core/model/classes/atx/articles/Article.php:36–40). Het veld Artcat
op het artikel slaat het categorienummer op.
ArticleCategory is een Doctrine-entiteit met een name, een odooId en koppelingen aan
voertuigcategorieën (ArticleCategoryVehicle) en tags (Tag). Hulpmethoden:
| Methode | Bestand:regel | Betekenis |
|---|---|---|
isTyres() |
ArticleCategory.php:117 |
odooId === '01' → bandengroep |
isWheels() |
ArticleCategory.php:113 |
odooId === '11' → velgengroep |
translateId(int $id) |
ArticleCategory.php:121 |
geeft NL-label voor category-int |
Het verouderde veld ArticleGroup (klasse Warengruppe) op het artikel mag genegeerd worden
voor categorisatie (_core/model/classes/atx/articles/Article.php:108).
Subtypen per categorie¶
Banden¶
Banden (atx\articles\tyres\Tyre) hebben een TyreType-entiteit die eigenschappen op
typeniveau vastlegt. Relevante typekenmerken staan op de basisklasse Type
(_core/model/classes/atx/articles/Type.php):
| Veld | Betekenis |
|---|---|
Season |
Seizoen (zomer / winter / allseason) |
Oldtimer |
Oldtimer-band — op typeniveau (Type.php:65) |
Offroad |
Offroad-type |
Slick |
Slick |
SEO-tekst-criteriarecords voor banden (TyreSearch)¶
TyreSearch (_core/model/classes/atx/articles/tyres/TyreSearch.php, extends AbstractArticleSearch extends atx\Generic)
is geen gebruikersgerichte zoekfilter. Het zijn opgeslagen criteria-records die
bandeigenschappen beschrijven en dienen als matchingsleutel voor SEO-teksten op de
artikeldetailpagina. De velden op een TyreSearch-record zijn matchingscriteria:
| Veld | Matchingscriterium |
|---|---|
Breedte |
Breedte in mm |
Serie |
Hoogte-breedteverhouding |
Inch |
Velgdiameter in inches |
Season |
Seizoen |
Oldtimer |
Oldtimer-band (type-niveau) |
Runflat |
Runflat |
Offroad |
Offroad |
Slick |
Slick |
Roll |
Rollweerstand (EU-label) |
Wetgrip |
Natteweg-grip (EU-label) |
Noise |
Geluidsniveau (EU-label) |
Zie _core/model/classes/atx/articles/tyres/TyreSearch.php:10–65 voor de volledige lijst.
TyreFilterService (_core/model/classes/atx/articles/TyreFilterService.php) matcht het
getoonde artikel via een reeks strategieën (TyreFilterService::Methodes, :16–45) aan het
best passende TyreSearch-record. Vervolgens laadt TyreSeoTextDAO de bijbehorende
TyreSeoText (extends AbstractSeoText) met de meertalige beschrijving en optioneel een
pictogram. ArticleDetailView::_renderTyreSeoText() (:3234) rendert de tekst.
Beheer van TyreSearch-records (aanmaken/wijzigen/koppelen aan SEO-teksten) loopt via de
backoffice.
Storefront-zoeken en -filteren voor banden¶
De werkelijke storefront-zoek- en filterlogica voor banden loopt via
TyreSearchController (_core/controller/classes/atx/articles/tyres/TyreSearchController.php,
extends ArticleSearchController). Gebruikersparameters (breedte, serie, inch, seizoen,
merk, …) komen binnen als request-array search[...] en worden verwerkt via findArticles()
en processArticles(). Facetten (beschikbare filterwaarden op de resultatenlijst) worden
opgebouwd door atx\SearchFilter (_core/model/classes/atx/SearchFilter.php) via
$searchFilter->add(...) (:151–152). Voertuig-fitment verfijnt de zoekopdracht via
voertuigdata — zie Voertuigdata & fitment.
Velgen¶
Velgen (atx\articles\wheels\Wheel) worden doorzocht via WheelSearchController
(_core/controller/classes/atx/articles/wheels/WheelSearchController.php,
extends ArticleSearchController).
SEO-tekst-criteriarecords voor velgen (WheelSearch)¶
WheelSearch (_core/model/classes/atx/articles/wheels/WheelSearch.php, extends AbstractArticleSearch)
zijn opgeslagen criteria-records voor het matchen van velgartikelen aan SEO-teksten op de
artikeldetailpagina. Matchingscriteria:
| Veld | Matchingscriterium |
|---|---|
Breedte |
Breedte in inch |
Inch |
Diameter in inch |
Gaten |
Aantal bevestigingsgaten |
DiamGaten |
Steekdiameter (PCD) |
Offset |
ET-waarde |
CenterGat |
Naafgat-diameter |
Kleurnr |
Kleur |
Materiaalnr |
Materiaal |
Homologation |
Homologatie |
WheelFilterService (_core/model/classes/atx/articles/WheelFilterService.php) matcht het
getoonde velgartikel via WheelFilterService::Methodes (:15–37) aan het best passende
WheelSearch-record en laadt de bijbehorende WheelSeoText via WheelSeoTextDAO.
ArticleDetailView::_renderWheelSeoText() (:3194) rendert de tekst.
Accessoires¶
Accessoires (atx\articles\acc\Acc) worden doorzocht via AccSearchController
(_core/controller/classes/atx/articles/acc/AccSearchController.php,
extends ArticleSearchController). Ze kunnen gelinkt worden aan een AccType (type accessoire).
SEO-tekst-criteriarecords voor accessoires (AccSearch)¶
AccSearch (_core/model/classes/atx/articles/acc/AccSearch.php, extends AbstractArticleSearch)
zijn opgeslagen criteria-records voor het matchen van accessoireartikelen aan SEO-teksten
op de artikeldetailpagina. Matchingscriteria zijn basisvelden (Artnr, BrandId, Typenr,
CategoryId, Eancode, Fabcode). AccFilterService matcht het artikel en laadt de
bijbehorende AccSeoText. ArticleDetailView::_renderAccSeoText() (:3154) rendert de
tekst.
Sets¶
Sets zijn combinaties van banden en velgen. Ze zijn aanwezig als extra channel-optie
(Channel::allowSets(), _core/model/classes/atx/channels/Channel.php:1405) en worden
beheerd via SetController en SetSearchController
(_core/controller/classes/atx/articles/sets/).
Zoeken en filteren¶
Elk producttype heeft een eigen zoek-controller die ArticleSearchController uitbreidt:
| Producttype | Controller |
|---|---|
| Banden | TyreSearchController |
| Velgen | WheelSearchController |
| Accessoires | AccSearchController |
| Sets | SetSearchController (extends TyreSearchController) |
De storefront-zoeklogica verloopt via ArticleSearchController::findArticles() en per type
processArticles(). Beschikbare filterwaarden (facetten) worden dynamisch opgebouwd door
atx\SearchFilter (_core/model/classes/atx/SearchFilter.php) op basis van de
gevonden artikelen.
Het Oldtimer-veld voor de bandenmatch wordt opgehaald via
$tyre->getType()->getOldtimer() (TyreFilterService.php:136) — van het TyreType,
niet van het individuele artikel.
Artikeldetailpagina's worden bediend door ArticleDetailController
(_core/controller/classes/atx/articles/ArticleDetailController.php).
Prijsweergave per klantcategorie¶
Basisprijs (Akprijs)¶
Elk artikel heeft een Akprijs (nettoprijs / aankoopprijs), opgeslagen in de
atx_www-database (_core/model/classes/atx/articles/Article.php:225). De Akprijs wordt per
klantcategorie ingeladen vanuit de artikeltabel — de DAO kiest het juiste kolom-postfix op basis van
de klantcategorie (CustomerCat, veld Customer::Klantcat) van de ingelogde klant
(_core/model/dbclasses/atx/articles/ArticleDAO.php:329–384).
Prijslijsten (Pricelist)¶
Naast de klantspecifieke Akprijs kan een artikel meerdere Pricelist-rijen hebben
(_core/model/classes/atx/articles/Pricelist.php), elk met:
| Veld | Betekenis |
|---|---|
Nummer |
Prijslijstnummer; speciale waarden: EXPORT_PRICE = -2, GARAGE_PRICE = -4 |
StandardVK |
Standaard verkoopprijs |
AktionVK |
Actieprijs |
AktionVon / AktionBis |
Geldigheidsperiode actieprijs |
Het EXPORT_PRICE en GARAGE_PRICE zijn vaste businessnummers die bepaalde klantgroepen
aanspreken (Pricelist.php:12–13).
Mini-shop marges bovenop de prijs¶
Wanneer een artikel via een mini-shop wordt getoond, past CustomerMarginCalculator de
basisprijs aan met de marge van de klant-eigenaar. Zie
Mini-shops voor de calculatielogica.
Zichtbaarheidsregels voor SEO-teksten per kanaal¶
De criteria-records (TyreSearch / WheelSearch / AccSearch) bevatten
doelgroepvlaggen op AbstractArticleSearch
(_core/model/classes/atx/articles/AbstractArticleSearch.php:23–25):
| Vlag | Betekenis |
|---|---|
hideForMiniShop |
SEO-tekst tonen aan mini-shop-bezoekers (isShowForMiniShop() = !hideForMiniShop) |
hideForMiniShopBeerens |
SEO-tekst tonen aan bezoekers van de Beerens-mini-shop |
hideForNotLoggedIn |
SEO-tekst tonen aan ingelogde gebruikers |
Deze vlaggen bepalen niet of een artikel zichtbaar is in de zoekresultaten. Ze sturen
uitsluitend welke doelgroep de bijbehorende SEO-tekst te zien krijgt op de
artikeldetailpagina. Als geen van de drie vlaggen actief is, wordt de tekst aan iedereen
getoond (ArticleDetailView::_renderAccSeoText()/:_renderWheelSeoText()/:_renderTyreSeoText(),
ArticleDetailView.php:3174–3188).
Categorie-voertuigkoppeling¶
ArticleCategory heeft een collectie vehicleCategories van het type
ArticleCategoryVehicle, waarmee een productcategorie aan een of meer voertuigcategorieën
gekoppeld kan worden
(_core/model/classes/atx/articles/ArticleCategory.php:75).
Hierdoor weet het systeem welke producttypen relevant zijn voor welk voertuigtype.
Diagram¶
flowchart TD
AC[ArticleCategory\nACCESSORY / TYRE / WHEEL / KIT / SERVICE] --> A[Article\nArtcat veld]
A --> T[Tyre\nTyreType: Season, Oldtimer, Runflat…]
A --> W[Wheel\nBreedte, Inch, Gaten…]
A --> ACC[Acc\nAccType…]
A --> PL[Pricelist\nStandardVK / AktionVK\nNummer = prijslijstnummer]
A --> AK[Akprijs\nper klantcategorie-kolom]
PL -->|mini-shop| CM[CustomerMarginCalculator\nmarge + toeslag]
T -->|TyreFilterService\nmatching| TS[TyreSearch\ncriteria-record]
W -->|WheelFilterService\nmatching| WS[WheelSearch\ncriteria-record]
ACC -->|AccFilterService\nmatching| AS[AccSearch\ncriteria-record]
TS --> ST[TyreSeoText\nDescriptionNl/Fr/En/Du + Icon]
WS --> SW[WheelSeoText\nDescriptionNl/Fr/En/Du + Icon]
AS --> SA[AccSeoText\nDescriptionNl/Fr/En/Du + Icon]
ST & SW & SA -->|ArticleDetailView\n:3154 / :3194 / :3234| DP[Artikeldetailpagina\nSEO-tekst blok]
Zie ook¶
- Mini-shops — marges en zichtbaarheidsregels per kanaal
- Voertuigdata & fitment — koppelingen tussen producten en voertuigen
- Technisch: Datamodel & databases —
atx_www-schema