Templating & frontend¶
De view-laag van de Atraxion-webshop bestaat uit twee systemen naast elkaar: een legacy PHP-view-laag voor de storefront en de backoffice-kern, en Twig voor specifieke onderdelen (admin-interface, e-mailsjablonen, losse front-end templates).
Legacy PHP-views (storefront)¶
De storefront rendert HTML via PHP-klassen in _core/view/classes/atx/. De klassehiërarchie:
atx\Base
└── atx\View (_core/view/classes/atx/View.php)
└── atx\WebView (_core/view/classes/atx/WebView.php)
└── atx\PageView (_core/view/classes/atx/PageView.php)
PageView is de centrale view voor pagina's op de storefront. Hij rendert de volledige HTML-structuur: <!DOCTYPE html>, <head>, stylesheets, JavaScript-blokken, navigatie, header, winkelmand, en de paginabody (_core/view/classes/atx/PageView.php:453). De HTML wordt direct via PHP echo/<?= ?> uitgestuurd — er is geen template-engine betrokken.
Elke controller koppelt zijn eigen view-subklasse aan zichzelf. Viewklassen per domein staan in:
| Submap | Inhoud |
|---|---|
_core/view/classes/atx/articles/ |
Productweergaven (banden, velgen, accessoires) |
_core/view/classes/atx/customers/ |
Klantenaccounts, inlogschermen, mini-shopinstellingen |
_core/view/classes/atx/orders/ |
Bestellingenoverzichten |
_core/view/classes/atx/channels/ |
Channelspecifieke weergaven |
_core/view/classes/atx/vehicles/ |
Voertuigselectie en fitmentweergaven |
_core/view/classes/atx/cms/ |
CMS-pagina's en blogposts |
_core/view/classes/atx/pages/ |
Speciale pagina's (homepage, …) |
Twig (admin, e-mail en front-end partials)¶
Twig wordt gebruikt op drie plaatsen:
1. Admin control panel _cp/ (templates/admin/)¶
De shop heeft twee afzonderlijke admin-oppervlakken:
_admin/— de legacy backoffice met hetzelfde custom MVC als de storefront (routing via_admin/config/pages.xml/menu.php/routing.php; controllers in_admin/view/classes/atx/). Geen Slim, geen Twig. Bereikbaar opmanage.atraxion.com._cp/— een aparte Slim 4-app (_cp/index.php:Slim\Factory\AppFactory::create()), met controllers insrc/Atraxion/Admin/Controller/en Twig-templates intemplates/admin/. Bereikbaar opadmin.atraxion.com.
Het is dus _cp/ (niet _admin/) dat Slim en Twig gebruikt. De TwigServiceProvider (src/Atraxion/Common/ServiceProvider/TwigServiceProvider.php) registreert de Twig-omgeving in de service container:
// TwigServiceProvider.php:33–34
$container->add('Twig\\Loader\\FilesystemLoader')->addArgument(APP_PROJECT_DIR . '/templates');
$container->add('Twig\\Environment')
->addArgument('Twig\\Loader\\FilesystemLoader')
->addArgument($twigConfig)
De templateroot is templates/ in de projectroot. _cp/-templates staan in templates/admin/:
templates/admin/_layouts/base.twig— basislay-outtemplates/admin/_layouts/sidebar.twig— zijmenutemplates/admin/customers/,orders/,products/,channels/,suppliers/,asset-groups/,dashboard/,users/,errors/,invoices/,qweon/,vehicles/templates/admin/_macros.twig— herbruikbare macro's
2. Front-end partials (templates/front/)¶
Losse Twig-templates voor specifieke onderdelen van de storefront:
templates/front/_layouts/base.twig— minimalistische HTML-basis (wordt gebruikt voor standalone pagina's)templates/front/offline.twig— offline-paginatemplates/front/errors/404.twig— 404-foutpaginatemplates/front/vehicles/chassis-options-table.twig— voertuigchassistabeltemplates/front/two-factor/verify.twig— 2FA-verificatieformuliertemplates/front/order-documents/portal.twig— orderdocumentenportal
3. Distributeur-e-mails (templates/distributors/)¶
Twig-templates voor e-mails die specifiek naar distributeursklanten worden gestuurd staan in templates/distributors/emails/. Momenteel bevat deze map de beerens/-submap met sjablonen voor ordermeldingen en offertes: new-order.twig, new-simple-order.twig, order-approved.twig, order-rejected.twig, quote.twig.
4. E-mailsjablonen (database)¶
E-mailsjablonen die als Twig-syntax zijn opgeslagen (in de database, tabel email_templates) worden gerenderd door TwigEmailTemplateRenderer (src/Atraxion/Module/EmailTemplate/Renderer/TwigEmailTemplateRenderer.php). De renderer laadt de sjabloontekst als string via Twig\Loader\ArrayLoader en rendert deze met de variabelen uit de context.
Daarnaast staat er een globale twig()-helperfunctie in src/functions.php:613 voor ad-hoc Twig-rendering van strings.
Asset-pipeline¶
De statische assets (CSS, JavaScript) worden gebouwd via twee afzonderlijke gulpfiles en Webpack.
Root gulpfile.js — minificatie van bestaande assets¶
Het root gulpfile.js (projectroot) minificeert bestaande JavaScript- en CSS-bestanden en compileert SCSS-bronnen in _static*/sass/:
js-taak: minificeert_static*/js/*.jsen_static*/js/**/*.js(via Terser) naar.min.js-bestanden op dezelfde locatie.sass-taak: compileert_static*/sass/*.s[ac]ss→ CSS en minificeert die vervolgens.css-taak: minificeert bestaande CSS-bestanden.default: voert sass + cssMinify en jsMinify parallel uit.
_static/assets/gulpfile.js — SCSS → CSS voor de assets-build¶
# _static/assets/gulpfile.js:10–16
gulp
Gulp compileert alle .scss-bestanden in _static/assets/sass/ naar gecomprimeerde CSS in _static/assets/dist/css/ (glob: ['sass/*.scss', 'sass/**/*.scss'] — enkel .scss, geen .sass). Elke SCSS-file levert een aparte .min.css op. Voorbeelden: banners.scss, blog-posts.scss, …
Webpack (JavaScript-bundels)¶
# _static/assets/package.json:42
webpack
Webpack bundelt JavaScript-modules uit _static/assets/js/ naar _static/assets/dist/js/. Entry points (zie _static/assets/webpack.config.js:2–13):
| Bundle | Bron |
|---|---|
marginEditor.min.js |
Mini-shopmarges-editor (Vue 3) |
wheelSpinner.min.js |
360°-velgensimulator |
assetsManagement.min.js |
Asset-beheer admin |
products.min.js |
Productenlijst |
dealers.min.js |
Dealerskaart (Leaflet) |
dealersDetail.min.js |
Dealerdetailpagina |
swiper.min.js |
Swiper-carousel |
countUp.min.js |
CountUp-animaties |
countdown.min.js |
Afteller |
codeMirror.min.js |
Code-editor (CMS) |
Installatie¶
# INSTALL.md:19–21
npm i
cd _static/assets && npm i && npm run build
npm run build = gulp && webpack (zie _static/assets/package.json:42).
Statische mappen¶
| Map | Inhoud |
|---|---|
_static/css/ |
Gecompileerde CSS-bestanden (naast _static/assets/dist/css/) |
_static/js/ |
Legacy JavaScript-bestanden |
_static/images/ |
Productafbeeldingen, logo's, banners |
_static/assets/dist/ |
Webpack/Gulp-buildoutput |
_static/sass/ |
SCSS-bronbestanden voor de kernstijlen |
_static/minishop/ |
Mini-shop-specifieke assets |
_static/channel/ |
Channelspecifieke assets |
Frontend-bibliotheken¶
De belangrijkste JavaScript/CSS-bibliotheken in gebruik (uit _static/assets/package.json):
| Bibliotheek | Gebruik |
|---|---|
| Bootstrap 5 | Layoutraster, modals, dropdowns |
| jQuery 3 | DOM-manipulatie, AJAX |
| Vue 3 | Marge-editor (mini-shop) |
| Swiper | Producten-carousels |
| Leaflet | Dealerskaart |
| Chosen.js | Select-dropdowns |
| Chart.js | Statistiekgrafieken |
| Trumbowyg | WYSIWYG-editor in het CMS |
| CodeMirror | Code-editor voor sjablonen |
| Slick Carousel | Slider-componenten |
Samenvatting: hoe een pagina gerenderd wordt¶
sequenceDiagram
participant C as Browser
participant Idx as _www/index.php
participant Ctrl as atx\\...Controller
participant View as atx\\PageView
C->>Idx: GET /nl/banden
Idx->>Ctrl: route → execAction()
Ctrl->>View: new View(); view->show()
View->>C: echo HTML (PHP inline)
Note over View: CSS uit _static/css/<br>JS uit _static/js/ & dist/js/
Voor _cp/-pagina's vervangt Twig de PHP-view:
sequenceDiagram
participant C as Browser
participant CP as _cp/ (Slim 4)
participant Ctrl as Atraxion\\Admin\\Controller
participant Twig as Twig\\Environment
C->>CP: GET /admin/customers
CP->>Ctrl: route → action()
Ctrl->>Twig: render('admin/customers/index.twig', data)
Twig->>C: HTML response