Skip to main content

Il piano mensile dell’adesione DPM

Unisciti al più grande e dinamico collettivo di professionisti della gestione di progetti digitali e supera ogni aspettativa nell’era dell’AI per soli 24,99 $ USD / mese.

Oppure, risparmia oltre il 25% con il nostro piano annuale.

I soci DPM sono sempre un passo avanti grazie a:

  • La nostra comunità Slack vivace e di supporto
  • Sessioni di formazione dal vivo con cadenza regolare
  • Oltre 90 mini corsi e webinar registrati
  • Più di 100 modelli e risorse
  • Gruppi Mastermind di mentorship tra pari
  • 25% di sconto sul nostro programma di certificazione approvato dal PMI

Iscrivere un team?

Allinea i tuoi team e risparmia fino al 40% con il nostro programma di sviluppo per team
.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; } /* Line between steps */ .form-steps-nav ul::before { content: ''; position: absolute; top: 15px; /* Allineamento con il centro dei cerchi */ 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; /* Larghezza fissa per una spaziatura uniforme */ text-align: center; } /* Cerchi numerati */ .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; } /* Stato attivo */ .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; } /* Regolazioni responsive */ @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; } } /* Classi funzionali per step critici */ .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); } /* Stile campi modulo */ .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; } /* Stile link coupon */ .have-coupon-link { color: var(--color-primary); text-decoration: none; font-weight: 500; display: inline-block; margin-top: 16px; } /* Layout a due colonne per il primo step */ .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() { // Attende che sia pronto sia il DOM che Stripe const waitForStripe = new Promise((resolve) => { if (window.MeprStripeGateway) { resolve(); } else { // Attende l'inizializzazione di Stripe 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; // Nasconde inizialmente il modulo durante la configurazione form.style.display = 'none'; // Conserva il pulsante di invio originale prima di qualsiasi manipolazione const originalSubmitBtn = form.querySelector('input[type="submit"]'); const submitBtnValue = originalSubmitBtn ? originalSubmitBtn.value : 'Invia'; const submitBtnClasses = originalSubmitBtn ? originalSubmitBtn.className : ''; // Rimuove eventuale navigazione esistente const existingNav = document.querySelector('.form-steps-nav'); if (existingNav) existingNav.remove(); // Crea la navigazione dei passaggi const stepsNav = document.createElement('div'); stepsNav.className = 'form-steps-nav'; stepsNav.innerHTML = `
  • Informazioni personali
  • Dettagli di accesso
  • Pagamento
`; form.parentNode.insertBefore(stepsNav, form); // Crea i contenitori per ciascun passaggio 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'; // Crea nuovo pulsante di invio con le proprietà originali const submitBtn = document.createElement('input'); submitBtn.type = 'submit'; submitBtn.value = submitBtnValue; submitBtn.className = submitBtnClasses + ' next-btn'; submitBtn.style.display = 'none'; // Conserva riferimenti ai campi email e nome utente prima di spostarli const emailInput = form.querySelector('[name="user_email"]'); const usernameInput = form.querySelector('[name="user_login"]'); // Sposta la logica di sincronizzazione email-nome utente più in alto, prima di spostare i campi if (emailInput && usernameInput) { // Nasconde l'intero contenitore del nome utente const usernameContainer = usernameInput.closest('.mp-form-row'); if (usernameContainer) { usernameContainer.style.display = 'none'; } // Aggiorna nome utente quando cambia l'email (su input e blur) emailInput.addEventListener('input', (e) => { usernameInput.value = e.target.value; }); emailInput.addEventListener('blur', (e) => { usernameInput.value = e.target.value; }); } // Sposta i campi nei rispettivi contenitori 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(',')); // Sposta i campi nei rispettivi contenitori 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); }); // Nascondi la tabella dei prezzi 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, // Osserva modifiche negli elementi figli subtree: true, // Osserva modifiche più profonde nell'albero DOM attributes: true, // Osserva modifiche agli attributi }); } // Aggiungi i passaggi al modulo nell'ordine corretto formSteps.appendChild(step1); // Informazioni personali formSteps.appendChild(step2); // Dettagli di accesso formSteps.appendChild(step3); // Pagamento // Pulisce il contenuto originale del modulo eccetto i campi hidden const hiddenFields = Array.from(form.querySelectorAll('input[type="hidden"]')); form.innerHTML = ''; hiddenFields.forEach(field => form.appendChild(field)); form.appendChild(formSteps); // Crea i pulsanti di navigazione 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); // Funzionalità di navigazione 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 = 'Questo campo è obbligatorio'; 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"]'); // Nell'ultimo passaggio, nasconde il tasto avanti e mostra il tasto di invio 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(); // Aggiorna navigazione dei passaggi 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); } } }); // Mostra il modulo dopo l'inizializzazione form.style.display = 'block'; // Da aggiungere dopo l'inizializzazione del modulo form.addEventListener('keypress', function(e) { if (e.key === 'Enter') { e.preventDefault(); return false; } }); } });