Aluminium puntdraadkop/ prikkeldraadhouder 2 draads recht
Aluminium puntdraadkop/ prikkeldraadhouder 2 draads recht
€9,95
€8,22
Incl. btw
Excl. btw
Aluminium prikkeldraadhouder gecoat voor op universele hekwerkstaander rond 60 mm, met doorvoergat voor bovenbuis rond 42 mm.
Lees meer.
- Gratis verzending vanaf €700,-
- Altijd 5 jaar garantie
- Levering met eigen bezorgservice
- Achteraf betalen mogelijk
Ergens anders goedkoper gezien?
Vragen over dit product of hulp nodig bij je bestelling?
Vragen over dit product of hulp nodig bij je bestelling?
Recent bekeken
0/5
0 sterren op basis van 0 beoordelingen
0 beoordelingen
© Copyright 2026 Hekwerk Direct
Kies uw taal
Kies uw valuta
€
Recent toegevoegd
Bestel nog voor €700,00 en de verzending is gratis
Beoordeel Aluminium puntdraadkop/ prikkeldraadhouder 2 draads recht
Dit artikel is toegevoegd aan uw winkel wagen!
(function () {
const API_BASE = "https://hd-spijlen.michel-abchekwerk.workers.dev";
const TARGET_SLUG = "/spijlendirect-compleet-pakket";
// Alleen op deze pagina (robust: met/zonder .html, met trailing slash)
if (!location.pathname.includes(TARGET_SLUG)) return;
console.log("[HD] init", location.pathname);
// --------- kleine CSS fix tegen layout shift ----------
(function injectCss() {
const css = `
/* Zorg dat ons blok geen grid/float in de war brengt */
#hd-configurator { display:block; width:100%; clear:both; }
#hd-configurator .hd-wrap { width:100%; }
#hd-configurator .hd-wrap * { box-sizing:border-box; }
`;
const s = document.createElement("style");
s.textContent = css;
document.head.appendChild(s);
})();
function ready(fn) {
if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", fn);
else fn();
}
// --------- Helpers ----------
const fmtEUR = (n) => {
try {
return new Intl.NumberFormat("nl-NL", { style: "currency", currency: "EUR" }).format(n);
} catch {
return "€ " + (Math.round(n * 100) / 100).toFixed(2).replace(".", ",");
}
};
function getVatPref() {
try {
const v = localStorage.getItem("vat_type_pref") || "";
if (/excl/i.test(v)) return "excl";
if (/incl/i.test(v)) return "incl";
} catch {}
const c = document.cookie || "";
if (/vat_type_pref=excl/i.test(c)) return "excl";
if (/vat_type_pref=incl/i.test(c)) return "incl";
return "incl";
}
function roundingNote(m) {
if (!isFinite(m) || m <= 0) return "";
const vakken = Math.ceil(m / 2.2);
const eff = vakken * 2.2;
return `Wordt afgerond naar ${vakken} vak(ken) = ${eff.toFixed(1).replace(".", ",")}m`;
}
// --------- Koopblok vinden & verbergen ----------
function findAddToCartSpan() {
// 1) Specifiek op class (jij gaf die door)
const candidates = Array.from(
document.querySelectorAll("span.flex-grow-1.align-self-center.px-3")
);
// 2) Tekst check (niet strict gelijk — includes is veiliger)
const hit = candidates.find((s) =>
(s.textContent || "").trim().toLowerCase().includes("toevoegen aan winkelwagen")
);
if (hit) return hit;
// fallback: zoek op tekst in alle spans
const any = Array.from(document.querySelectorAll("span")).find((s) =>
(s.textContent || "").trim().toLowerCase().includes("toevoegen aan winkelwagen")
);
return any || null;
}
function findPurchaseContainerFromButton(btn) {
// We zoeken de “kleinste” ancestor die:
// - een select heeft (variant)
// - een qty input/spinner heeft OF een hoeveelheid veld
// - de add-to-cart button bevat
let el = btn;
for (let i = 0; i < 10 && el; i++) {
const hasSelect = !!el.querySelector("select");
const hasQty =
!!el.querySelector('input[type="number"]') ||
!!el.querySelector(".qty, .quantity, .quantity-selector, .input-group");
const hasBtn = !!el.querySelector("button, input[type=submit]");
if (hasSelect && hasBtn && hasQty) return el;
el = el.parentElement;
}
// fallback: verberg gewoon het form of parent
return btn.closest("form") || btn.parentElement;
}
function hideBuyBox() {
// sticky koopknop (als aanwezig)
const sticky = document.querySelector("#addtocart-sticky, .addtocart-sticky, .add-to-cart-sticky");
if (sticky) sticky.style.display = "none";
const span = findAddToCartSpan();
if (!span) return;
const btn = span.closest("button") || span.closest('[role="button"]');
if (!btn) return;
const container = findPurchaseContainerFromButton(btn);
if (container) {
container.style.display = "none";
container.setAttribute("data-hd-hidden", "1");
}
// Ook de “Maak een keuze” label-block wegdrukken als die elders staat
const labels = Array.from(document.querySelectorAll("label, .label"));
const choiceLabel = labels.find((l) => (l.textContent || "").toLowerCase().includes("maak een keuze"));
if (choiceLabel) {
const block =
choiceLabel.closest(".form-group, .product-options, .product__options, .row, .field") ||
choiceLabel.parentElement;
if (block) block.style.display = "none";
}
}
// Houd het weg als Lightspeed her-rendered
const mo = new MutationObserver(() => hideBuyBox());
mo.observe(document.documentElement, { childList: true, subtree: true });
// --------- Main ----------
ready(async () => {
// 1) koopblok alvast wegdrukken (kan later opnieuw verschijnen)
hideBuyBox();
// 2) mount
const mount = document.getElementById("hd-configurator");
if (!mount) {
console.warn("[HD] #hd-configurator niet gevonden. Zet
in productomschrijving.");
return;
}
// Defaults (later uitbreidbaar met extra velden)
const DEFAULTS = {
soortSpijlen: "Spijlen 25x25 vlak",
hoeken: "0",
muuraansluiting: "Geen",
soortPalen: "Grondpalen",
soortPaaldop: "Paalkap kunststof",
};
// 3) opties ophalen
let opt;
try {
opt = await fetch(API_BASE + "/api/options").then((r) => r.json());
} catch (e) {
opt = { ok: false, error: String(e) };
}
if (!opt.ok) {
mount.innerHTML = `
Configurator error
${opt.error || "Opties konden niet geladen worden."}
`;
return;
}
const kleuren = (opt.options.kleuren || []).filter((k) => /7016|9005/.test(k));
const hoogtes = opt.options.hoogtes || [];
// 4) UI renderen (neutraal, breekt layout niet)
mount.innerHTML = `
Configureer je spijlenpakket
`;
const elKleur = mount.querySelector("#hd-kleur");
const elHoogte = mount.querySelector("#hd-hoogte");
const elLengte = mount.querySelector("#hd-lengte");
const elRound = mount.querySelector("#hd-round");
const elBtn = mount.querySelector("#hd-calc");
const elPrice = mount.querySelector("#hd-price");
kleuren.forEach((k) => elKleur.add(new Option(k, k)));
hoogtes.forEach((h) => elHoogte.add(new Option(h, h)));
const updateRound = () => {
elRound.textContent = roundingNote(Number(elLengte.value || 0));
};
elLengte.addEventListener("input", updateRound);
updateRound();
async function quote() {
elBtn.disabled = true;
elBtn.style.opacity = "0.7";
const cfg = {
...DEFAULTS,
kleur: elKleur.value,
hoogte: elHoogte.value,
lengthM: Number(elLengte.value || 0),
};
let res;
try {
res = await fetch(API_BASE + "/api/quote", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ config: cfg }),
}).then((r) => r.json());
} catch (e) {
res = { ok: false, error: String(e) };
}
elBtn.disabled = false;
elBtn.style.opacity = "1";
if (!res.ok) {
elPrice.innerHTML = `
Prijs ophalen mislukt: ${res.error || "onbekend"}
`;
return;
}
const pref = getVatPref();
const main = pref === "excl" ? res.totalExcl : res.totalIncl;
elPrice.innerHTML = `
${fmtEUR(main)}
Incl. ${fmtEUR(res.totalIncl)} · Excl. ${fmtEUR(res.totalExcl)} · ${res.lengthLabel}
`;
// koopblok nogmaals wegdrukken (LS kan terugzetten)
hideBuyBox();
}
elBtn.addEventListener("click", quote);
quote();
// en nogmaals verbergen na init
hideBuyBox();
});
})();