Alles wat je GreenBook compleet maakt. Ringen om je boek uit te breiden, uitwisbare pennen om op te schrijven en spray en doekje om weer met een schone pagina te beginnen.
De uitwisbare F pen schrijft dun en fijn, de M pen wat dikker en voller. Beide zijn met water uit te wissen en laten geen grijze waas achter.
Hoe wis ik een pagina weer schoon?
Met een vochtig microvezel doekje of het uitwis sponsje. Zit er iets hardnekkigs op, gebruik dan een spuit spray en veeg het na.
Passen de ringen op elk GreenBook?
Ja, de aluminium ringen passen op alle GreenBook formaten. Zo breid je je boek uit met extra pagina’s wanneer je die nodig hebt.
Kan ik met een gewone whiteboardmarker schrijven?
Dat kan, maar onze eigen pennen zijn erop afgestemd. Ze drogen snel, blijven zitten tot je ze bewust uitwist en gaan lang mee.
dit is wat onze klanten van ons vinden
kleine switch enorme impact op zoek naar zakelijke bestellingen?
lees meer over onze B2B acties
zojuist toegevoegd
/* GreenStory - GA4 e-commerce events die het thema zelf niet levert.
Het thema doet zijn eigen add-to-cart, rendert eigen productkaarten en heeft een
winkelwagenlade in plaats van een winkelwagenpagina. Daardoor slaat GTM4WP een aantal
events over. Deze code vult ze aan:
add_to_cart / remove_from_cart - verschil tussen de vorige en de huidige mandje-inhoud
view_cart - bij het openen van de lade
view_item_list / select_item - op categorie-, winkel- en zoekpagina's
De gegevens komen uit twee JSON-blokjes die de mu-plugin ogs-ga4-events.php plaatst.
Het mandje-blokje is een WooCommerce-fragment en is dus altijd actueel, ook op pagina's
die uit de cache van Kinsta komen. Dat is bewust: de vorige versie las het mandje uit
`cartContent` in de dataLayer, en dat staat op een gecachete pagina altijd op leeg,
waardoor add_to_cart een tweede keer vuurde zodra de bezoeker weer op een ongecachete
pagina kwam (de checkout).
De bestelknop en het afrekenpad worden niet aangeraakt. Uitzetten mag altijd: dan
verdwijnen alleen deze events. Bijgewerkt 13-08-2026. */
(function () {
var SNAP = 'ogs_gtm_cart_snapshot';
var listSent = false;
function dl() {
window.dataLayer = window.dataLayer || [];
return window.dataLayer;
}
/* Leest een JSON-blokje. Geeft null zolang het blokje nog de lege, gecachete versie is:
dan weten we niets over het mandje en meten we liever niets dan iets verkeerds. */
function readJSON(id) {
var el = document.getElementById(id);
if (!el || el.getAttribute('data-cached') === '1') {
return null;
}
try {
return JSON.parse(el.textContent || 'null');
} catch (e) {
return null;
}
}
function push(event, items, munteenheid, extra) {
if (!items || !items.length) {
return;
}
var value = 0;
items.forEach(function (it) {
value += (Number(it.price) || 0) * (Number(it.quantity) || 1);
});
var ecommerce = {
munteenheid: munteenheid || 'EUR',
value: Math.round(value * 100) / 100,
items: items
};
if (extra) {
for (var k in extra) {
if (Object.prototype.hasOwnProperty.call(extra, k)) {
ecommerce[k] = extra[k];
}
}
}
dl().push({ ecommerce: null });
dl().push({ event: event, ecommerce: ecommerce });
}
function clean(it, quantity) {
var copy = {};
for (var p in it) {
if (Object.prototype.hasOwnProperty.call(it, p) && p !== 'quantity' && p !== 'cart_item_key' && p !== 'permalink') {
copy[p] = it[p];
}
}
if (quantity) {
copy.quantity = quantity;
}
return copy;
}
/* ---------- mandje ---------- */
function cartKey(it) {
return String(it.item_id) + '|' + String(it.item_variant || '');
}
function snapshotOf(items) {
var map = {};
items.forEach(function (it) {
var k = cartKey(it);
if (!map[k]) {
map[k] = { qty: 0, item: clean(it) };
}
map[k].qty += Number(it.quantity) || 0;
});
return map;
}
function qtyOf(entry) {
if (!entry) {
return 0;
}
return typeof entry === 'number' ? entry : (Number(entry.qty) || 0);
}
function syncCart() {
var cart = readJSON('ogs-ga4-cart');
if (!cart || !cart.items) {
return;
}
var now = snapshotOf(cart.items);
var prevRaw;
try {
prevRaw = sessionStorage.getItem(SNAP);
sessionStorage.setItem(SNAP, JSON.stringify(now));
} catch (e) {
return;
}
if (!prevRaw) {
return; // eerste keer in deze sessie: alleen vastleggen, niets melden
}
var prev;
try {
prev = JSON.parse(prevRaw) || {};
} catch (e) {
return;
}
var added = [];
var removed = [];
Object.keys(now).forEach(function (k) {
var diff = now[k].qty - qtyOf(prev[k]);
if (diff > 0) {
added.push(clean(now[k].item, diff));
}
});
Object.keys(prev).forEach(function (k) {
var diff = qtyOf(prev[k]) - (now[k] ? now[k].qty : 0);
// Snapshots van vóór deze versie bewaarden alleen aantallen; daar kunnen we
// geen remove_from_cart van maken. Vanaf de volgende wijziging wel.
if (diff > 0 && prev[k] && prev[k].item) {
removed.push(clean(prev[k].item, diff));
}
});
push('add_to_cart', added, cart.munteenheid);
push('remove_from_cart', removed, cart.munteenheid);
}
function viewCart() {
var cart = readJSON('ogs-ga4-cart');
if (!cart || !cart.items || !cart.items.length) {
return;
}
push('view_cart', cart.items.map(function (it) {
return clean(it, Number(it.quantity) || 1);
}), cart.munteenheid);
}
/* ---------- productlijsten ---------- */
function listData() {
var el = document.getElementById('ogs-ga4-list');
if (!el) {
return null;
}
try {
return JSON.parse(el.textContent || 'null');
} catch (e) {
return null;
}
}
function viewItemList() {
var list = listData();
if (listSent || !list || !list.items || !list.items.length) {
return;
}
listSent = true;
push('view_item_list', list.items.map(function (it) {
return clean(it);
}), list.munteenheid, { item_list_name: list.item_list_name });
}
function selectItem(event) {
var list = listData();
if (!list || !list.items) {
return;
}
var link = event.target && event.target.closest ? event.target.closest('a[href]') : null;
if (!link) {
return;
}
var href = link.href.split('?')[0].split('#')[0];
var match = null;
list.items.forEach(function (it) {
if (!match && it.permalink && it.permalink.split('?')[0] === href) {
match = it;
}
});
if (!match) {
return;
}
push('select_item', [clean(match)], list.munteenheid, { item_list_name: list.item_list_name });
}
/* ---------- aanhaken ---------- */
function onCartToggle(event) {
var toggle = event.target && event.target.closest ? event.target.closest('[data-cart-toggle]') : null;
if (!toggle) {
return;
}
// Het thema zet aria-expanded pas na de klik; even wachten en dan pas kijken of
// de lade daadwerkelijk opengaat.
setTimeout(function () {
if (toggle.getAttribute('aria-expanded') === 'true') {
viewCart();
}
}, 120);
}
function bindFragments() {
var tries = 0;
(function wait() {
if (window.jQuery) {
window.jQuery(document.body).on(
'wc_fragments_loaded wc_fragments_refreshed added_to_cart removed_from_cart',
function () { syncCart(); }
);
return;
}
if (tries++ < 40) {
setTimeout(wait, 250);
}
})();
}
function start() {
syncCart();
viewItemList();
bindFragments();
document.addEventListener('click', onCartToggle, true);
document.addEventListener('click', selectItem, true);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', start);
} else {
start();
}
})();