Skip to main content

Het maandabonnement van DPM Membership

Sluit je aan bij het grootste en meest toonaangevende collectief van digitale projectprofessionals ter wereld en overtref de verwachtingen in het tijdperk van AI voor slechts $24.99 USD / maand.

Of bespaar meer dan 25% met ons jaarabonnement.

DPM-leden blijven de concurrentie voor met:

  • Onze levendige en ondersteunende Slack-community
  • Onze regelmatige reeks live leersessies
  • Meer dan 90 min cursussen en opgenomen webinars
  • Meer dan 100 sjablonen en hulpmiddelen
  • Mastermindgroepen voor peermentorschap
  • 25% korting op ons door PMI goedgekeurde certificeringsprogramma

Schrijf je een team in?

Breng je teams op één lijn en bespaar tot 40% via ons teamontwikkelingsprogramma
.page-id-110718 { background-color: var(--color-background-light) !important; } .page-id-110718 .mp_wrapper { margin: 0 !important; padding: 0 !important; } .page-id-110718 .mepr-form { margin: 0 !important; } .page-id-110718 .special-title { font-size: var(--font-size-heading-small) !important; font-weight: var(--font-weight-semibold) !important; } .page-id-110718 .price-highlight { margin-top: 20px !important; font-size: 16px !important; display: flex; justify-content: space-between; gap: var(--spacer-20); padding: var(--spacer-20) !important; background: var(--color-white); border-radius: var(--border-radius-media); } .page-id-110718 .mepr-transaction-invoice-wrapper { padding-top: 0 !important; } .page-id-110718 .special-form .wp-block-list { padding-left: 24px !important; } @media (min-width: 768px) { .page-id-110718 .special-form .wp-block-list { padding-left: 4px !important; } } .page-id-110718 .site-header__search-wrap, .page-id-110718 .site-header__button, .page-id-110718 .site-header__navigation-wrap, .page-id-110718 .site-header__utility-nav, .page-id-110718 .membership-navigation, .page-id-110718 .site-header__scroll-nav-cta-wrapper, .page-id-110718 footer { display: none !important; } .page-id-110718 .site-header__logo-wrap { padding-top: 0; } .page-id-110718 [data-js=site-wrap] { margin-top: 0 !important; } @media (min-width: 768px) { .page-id-110718 .special-title { font-size: 24px !important; font-weight: var(--font-weight-semibold) !important; margin-bottom: var(--spacer-30) !important; } .page-id-110718 .special-form p, .page-id-110718 .special-form li { font-size: 16px; margin-bottom: var(--spacer-20); } .page-id-110718 .special-form ul { margin-top: var(--spacer-20); margin-bottom: var(--spacer-20); } .page-id-110718 .special-form li { margin-left: var(--spacer-20); } .page-id-110718 .site-header__logo-wrap { padding-top: 15px !important; } .page-id-110718 .l-sink>.wp-block-group { padding-top: 90px !important; padding-bottom: 90px !important; } } @media (min-width: 1200px) { .page-id-110718.scroll-down .site-header { padding-top: 0 !important; padding-bottom: 0 !important; } } .mp_wrapper { padding: 0 !important; margin: 0 !important; } @media (min-width: 960px) { .b-columns__grid--2-cols { grid-template-columns: 0.43fr 0.57fr !important; grid-column-gap: var(--spacer-70) !important; } } .form-steps-nav { margin-bottom: 48px; } .form-steps-nav ul { display: flex; justify-content: space-evenly; align-items: start; list-style: none; padding: 0; margin: 0; gap: 0; position: relative; padding-left: 0 !important; } /* Lijn tussen stappen */ .form-steps-nav ul::before { content: ''; position: absolute; top: 15px; /* Uitlijnen met het midden van de cirkels */ left: 50%; transform: translateX(-50%); width: 100%; height: 1px; background: #E5E7EB; z-index: 0; } .form-steps-nav li { display: flex; flex-direction: column; align-items: center; gap: 8px; color: var(--color-neutral-90); font-size: 14px; font-weight: 500; z-index: 1; width: 120px; /* Vaste breedte voor gelijkmatige tussenruimte */ text-align: center; } /* Cirkels met nummers */ .form-steps-nav li::before { content: attr(data-step); width: 30px; height: 30px; border-radius: 8px; background: #fff; border: 2px solid var(--color-neutral-90); display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 16px; margin-bottom: 4px; } /* Actieve status */ .form-steps-nav li.active::before { background: var(--color-primary); border-color: var(--color-primary); color: white; } .form-steps-nav li.active { color: var(--color-neutral-90); font-weight: 700; } /* Responsieve aanpassingen */ @media (max-width: 768px) { .step-1, .step-2 .mp-form-row:has([type="password"]) { grid-template-columns: 1fr; } .form-steps-nav ul { } .form-steps-nav ul::before { top: 22px; } .form-steps-nav li { font-size: 12px; padding: 6px 12px; } } /* Klassen voor essentiële stapfunctionaliteit */ .form-steps-wrapper { position: relative; min-height: 300px; } .form-step { display: none; opacity: 0; transition: opacity 0.3s ease; width:100%; margin: 0 auto; } .form-step.active { display: block; opacity: 1; } .form-steps-navigation { margin-top: 40px; } .nav-buttons { display: flex; justify-content: space-between; gap: 16px; } .prev-btn, .next-btn, input[type="submit"] { padding: 12px 32px; border: none; border-radius: 24px; cursor: pointer; font-weight: 500; font-size: 16px; transition: all 0.2s ease; } .prev-btn { background: transparent; border: 1px solid var(--color-primary); color: var(--color-primary); } .next-btn, input[type="submit"] { background: var(--color-primary); color: white; margin-left: auto; } .prev-btn:hover, .next-btn:hover, input[type="submit"]:hover { opacity: 0.9; transform: translateY(-1px); } /* Stijlen voor formuliervelden */ .mp-form-row { margin-bottom: 24px; } .mp-form-label { display: block; margin-bottom: 8px; font-weight: 500; } .mepr-form-input { width: 100%; padding: 12px; border: 1px solid #e1e1e1; border-radius: 8px; font-size: 16px; } input.invalid { border-color: #ff3d5b !important; } .validation-error { color: #ff3d5b; font-size: 14px; margin-top: 4px; } /* Stijl voor kortingsbonlink */ .have-coupon-link { color: var(--color-primary); text-decoration: none; font-weight: 500; display: inline-block; margin-top: 16px; } /* Indeling met twee kolommen voor de eerste stap */ .step-1.active { display: grid; grid-template-columns: 1fr; gap: 24px; row-gap: 0; @media (min-width: 960px) { grid-template-columns: 1fr 1fr; } } .mp_invoice .mp-table thead { display: none !important; } .mp_invoice { background: var(--color-neutral-0); padding: 16px !important; border-radius: 8px; overflow: hidden; } .mp_invoice .mp-table, .mp_invoice .mp-table * { background: var(--color-neutral-0); border: 0 !important; font-size: 16px !important; } .mp_invoice .mp-table { padding: 0 !important; margin: 0 !important; } .price-highlight .mepr-invoice-loader { display: none !important; } document.addEventListener('DOMContentLoaded', function() { // Wacht tot zowel de DOM als Stripe gereed zijn const waitForStripe = new Promise((resolve) => { if (window.MeprStripeGateway) { resolve(); } else { // Wacht tot Stripe is geïnitialiseerd const stripeCheck = setInterval(() => { if (window.MeprStripeGateway) { clearInterval(stripeCheck); resolve(); } }, 100); } }); waitForStripe.then(() => { initializeMultiStepForm(); }); function initializeMultiStepForm() { const form = document.querySelector('.mepr-signup-form'); if (!form) return; // Verberg het formulier aanvankelijk tijdens de configuratie form.style.display = 'none'; // Sla de oorspronkelijke verzendknop op voordat er wijzigingen worden aangebracht const originalSubmitBtn = form.querySelector('input[type="submit"]'); const submitBtnValue = originalSubmitBtn ? originalSubmitBtn.value : 'Verzenden'; const submitBtnClasses = originalSubmitBtn ? originalSubmitBtn.className : ''; // Verwijder eventuele bestaande navigatie const existingNav = document.querySelector('.form-steps-nav'); if (existingNav) existingNav.remove(); // Maak de navigatie voor de stappen const stepsNav = document.createElement('div'); stepsNav.className = 'form-steps-nav'; stepsNav.innerHTML = `
  • Persoonlijke gegevens
  • Inloggegevens
  • Betaling
`; form.parentNode.insertBefore(stepsNav, form); // Maak containers voor elke stap const formSteps = document.createElement('div'); formSteps.className = 'form-steps-wrapper'; const step1 = document.createElement('div'); step1.className = 'form-step step-1 active'; const step2 = document.createElement('div'); step2.className = 'form-step step-2'; const step3 = document.createElement('div'); step3.className = 'form-step step-3'; // Maak een nieuwe verzendknop met de oorspronkelijke eigenschappen const submitBtn = document.createElement('input'); submitBtn.type = 'submit'; submitBtn.value = submitBtnValue; submitBtn.className = submitBtnClasses + ' next-btn'; submitBtn.style.display = 'none'; // Sla verwijzingen naar de e-mail- en gebruikersnaamvelden op voordat ze worden verplaatst const emailInput = form.querySelector('[name="user_email"]'); const usernameInput = form.querySelector('[name="user_login"]'); // Verplaats de synchronisatielogica voor e-mail en gebruikersnaam naar voren, voordat de velden worden verplaatst if (emailInput && usernameInput) { // Verberg de volledige gebruikersnaamcontainer const usernameContainer = usernameInput.closest('.mp-form-row'); if (usernameContainer) { usernameContainer.style.display = 'none'; } // Werk de gebruikersnaam bij wanneer het e-mailadres verandert (bij invoer en wanneer de focus vervalt) emailInput.addEventListener('input', (e) => { usernameInput.value = e.target.value; }); emailInput.addEventListener('blur', (e) => { usernameInput.value = e.target.value; }); } // Verplaats velden naar de bijbehorende containers const personalFields = form.querySelectorAll([ '[id*="user_first_name"]', '[id*="user_last_name"]', '[id*="mepr-address-one"]', '[id*="mepr-address-two"]', '[id*="mepr-address-city"]', '[id*="mepr-address-country"]', '[id*="mepr-address-state"]', '[id*="mepr-address-zip"]' ].join(',')); const paymentFields = form.querySelectorAll([ '.mepr-transaction-invoice-wrapper', '.mepr-payment-methods-wrapper', '.have-coupon-link', '.mp-form-row.mepr_coupon', '.mp-form-row.mepr_tos' ].join(',')); const accountFields = form.querySelectorAll([ '[name="user_email"]', '[name="mepr_user_password"]', '[name="mepr_user_password_confirm"]', '[name="user_login"]' ].join(',')); // Verplaats velden naar de bijbehorende containers personalFields.forEach(field => { const row = field.closest('.mp-form-row'); if (row) step1.appendChild(row); }); accountFields.forEach(field => { const row = field.closest('.mp-form-row'); if (row) step2.appendChild(row); }); paymentFields.forEach(field => { step3.appendChild(field); }); // Verberg de prijstabel const pricingNewPosition = document.querySelector('.price-highlight'); const pricingTable = step3.querySelector('.mepr-transaction-invoice-wrapper'); console.log(pricingTable); if (pricingTable) { const clonedPricingTable = pricingTable.cloneNode(true); pricingNewPosition.appendChild(clonedPricingTable); pricingTable.style.display = 'none'; const observer = new MutationObserver(() => { clonedPricingTable.innerHTML = pricingTable.innerHTML; }); observer.observe(pricingTable, { childList: true, // Observeer wijzigingen in onderliggende elementen subtree: true, // Observeer diepere wijzigingen in de DOM-structuur attributes: true, // Observeer wijzigingen aan attributen }); } // Voeg de stappen in de juiste volgorde toe aan het formulier formSteps.appendChild(step1); // Persoonlijke gegevens formSteps.appendChild(step2); // Inloggegevens formSteps.appendChild(step3); // Betaling // Wis de oorspronkelijke formulierinhoud, behalve verborgen velden const hiddenFields = Array.from(form.querySelectorAll('input[type="hidden"]')); form.innerHTML = ''; hiddenFields.forEach(field => form.appendChild(field)); form.appendChild(formSteps); // Maak navigatieknoppen const navigation = document.createElement('div'); navigation.className = 'form-steps-navigation'; const navButtons = document.createElement('div'); navButtons.className = 'nav-buttons'; navButtons.innerHTML = ` `; navButtons.appendChild(submitBtn); navigation.appendChild(navButtons); form.appendChild(navigation); // Functionaliteit voor navigatie let currentStep = 1; const prevBtn = navigation.querySelector('.prev-btn'); const nextBtn = navigation.querySelector('.next-btn'); function validateStep(step) { const currentStepElement = form.querySelector(`.step-${step}`); const requiredFields = currentStepElement.querySelectorAll('.mepr-form-input:required, .mp-form-row.required input:not([type="hidden"]), .mp-form-row.required select'); let isValid = true; requiredFields.forEach(field => { if (!field.value.trim()) { isValid = false; field.classList.add('invalid'); const row = field.closest('.mp-form-row'); if (row && !row.querySelector('.validation-error')) { const error = document.createElement('div'); error.className = 'validation-error'; error.textContent = 'Dit veld is verplicht'; row.appendChild(error); } } else { field.classList.remove('invalid'); const row = field.closest('.mp-form-row'); const error = row?.querySelector('.validation-error'); if (error) error.remove(); } }); return isValid; } function updateNavigation() { prevBtn.style.display = currentStep === 1 ? 'none' : 'block'; const submitBtn = navigation.querySelector('input[type="submit"]'); // Verberg op de laatste stap de knop Volgende en toon de verzendknop if (currentStep === 3) { nextBtn.style.display = 'none'; if (submitBtn) { submitBtn.style.display = 'inline-block'; } } else { nextBtn.style.display = 'block'; if (submitBtn) { submitBtn.style.display = 'none'; } } document.querySelector('#register').scrollIntoView(); // Werk de stappenavigatie bij document.querySelectorAll('.form-steps-nav li').forEach(li => { li.classList.remove('active'); if (parseInt(li.dataset.step) === currentStep) { li.classList.add('active'); } }); } function showStep(step) { document.querySelectorAll('.form-step').forEach(s => { s.classList.remove('active'); }); document.querySelector(`.step-${step}`).classList.add('active'); currentStep = step; updateNavigation(); } prevBtn.addEventListener('click', () => { if (currentStep > 1) { showStep(currentStep - 1); } }); nextBtn.addEventListener('click', () => { if (validateStep(currentStep)) { if (currentStep < 3) { showStep(currentStep + 1); } } }); // Toon het formulier nadat de configuratie is voltooid form.style.display = 'block'; // Voeg dit toe na het initialiseren van het formulier form.addEventListener('keypress', function(e) { if (e.key === 'Enter') { e.preventDefault(); return false; } }); } });