Salta al contenuto principale

Practical Web Development

Build websites. Guides, ebooks and technical resources. Drupal vs WP.

Formazione tecnica per sviluppo web professionale

Imparare attraverso progetti reali

Impara il web development attraverso progetti concreti.

Le mie guide non partono soltanto dalla tecnologia, ma da ciò che vuoi realizzare: un sito per un'attività, un ecommerce, un progetto professionale o una soluzione a un problema tecnico.

L'obiettivo è semplice:

imparare qualcosa che puoi realmente usare.


Esplora gli argomenti:

Drupal

Per chi vuole fare un salto di qualità nello sviluppo web e andare oltre il semplice assemblaggio di un sito.

Drupal permette di progettare in modo più strutturato contenuti, funzionalità e utenti, sviluppando una maggiore consapevolezza di come è costruito un sito professionale.

Guide pratiche su Content Types, Views, utenti e permessi, immagini, theming, configurazione, hosting e problem solving.

Non si tratta di scegliere tra Drupal e WordPress (Drupal vs WordPress). Si tratta di imparare a progettare il web con maggiore controllo e consapevolezza.

inoltre anche...

WordPress

Guide pratiche per realizzare siti web con WordPress attraverso progetti concreti.

Attività locali, professionisti, aziende e altri progetti che un webmaster può incontrare realmente nel proprio lavoro.

WooCommerce

Guide pratiche per realizzare ecommerce con WordPress e WooCommerce.

Dalla gestione dei prodotti alla struttura del negozio, fino alla realizzazione di soluzioni di vendita online.

Web Development

PHP, MySQL e tecnologie web per chi vuole comprendere meglio ciò che sta costruendo, risolvere problemi e avere maggiore controllo sui propri progetti.


Costruire siti per attività reali

Un sito web non è soltanto un insieme di pagine. Può servire a presentare un'attività, acquisire clienti, ricevere richieste e prenotazioni, vendere prodotti o migliorare un servizio esistente. Per questo le guide saranno costruite anche intorno a progetti concreti:

Attività locali, Professionisti, Aziende, Ecommerce

Risolvere problemi tecnici reali - Non tutti i progetti iniziano da zero.

A volte bisogna risolvere un problema:

  • un'installazione Drupal che non funziona;
  • una configurazione errata;
  • un sito da aggiornare o migliorare;
  • una migrazione;
  • un problema di hosting;
  • una funzionalità da implementare;
  • un sito che deve essere più efficace.

Per questo una parte importante delle guide è dedicata al problem solving tecnico.


Inizia da un progetto

Vuoi costruire un sito?

Devi risolvere un problema tecnico?

Vuoi imparare una nuova tecnologia?

Trova una guida pratica e inizia da lì.

[Sfoglia la sezione EBOOK su Amazon] 

Daniele Venditti è autore tecnico e formatore nel settore dello sviluppo web. Attraverso ebook, articoli e contenuti video aiuta webmaster e professionisti del web a sviluppare competenze solide su Drupal, PHP, MySQL, WordPress e Intelligenza Artificiale.


Blog (ultimi 6 articoli)


Installare Drupal su un hosting condiviso può trasformarsi in una sfida tecnica inaspettata. Segui la documentazione ufficiale, utilizzi Composer e tutto sembra procedere correttamente. Poi arriva il problema: la directory web non è accessibile come dovrebbe, il server impone restrizioni sui percorsi e il sito non si avvia.Devi necessariamente rinunciare a Drupal o cambiare hosting?Non necessariamente.Questo ebook affronta uno dei problemi più concreti dell'installazione di Drupal negli ambienti di hosting condiviso: la difficoltà di utilizzare la struttura standard del progetto quando non puoi configurare liberamente la document root e devi rispettare i limiti imposti dal server.La soluzione proposta è la struttura FLAT, un approccio pratico che consente di adattare l'organizzazione del progetto alle caratteristiche dell'hosting, continuando a utilizzare Composer per gestire Drupal e le sue dipendenze.  Cosa impareraiCon questa guida scoprirai come:Superare il vincolo della directory web, quando la document root del server è fissa su public_html/.Affrontare le restrizioni di open_basedir, organizzando i file in modo compatibile con i limiti di accesso dell'ambiente condiviso.Configurare Drupal Scaffold per adattare la struttura del progetto alle esigenze del tuo hosting.Modificare composer.json per gestire correttamente la struttura FLAT.Gestire i collegamenti simbolici (symlink) e comprenderne il ruolo nell'organizzazione dei file.Affrontare gli hosting più restrittivi, attraverso una variante basata su una sandbox interna.Mantenere Composer al centro del progetto, per gestire dipendenze, moduli e aggiornamenti senza affidarti a procedure manuali improvvisate.Una guida operativa, con esempi e videoNon troverai soltanto una sequenza di comandi da eseguire. L'obiettivo è comprendere perché si verificano determinati problemi e come intervenire in modo consapevole.I passaggi sono accompagnati da indicazioni operative, configurazioni ed esempi pratici. Alcune fasi fondamentali sono inoltre supportate da video dimostrativi, per osservare direttamente le operazioni sul terminale e seguire più facilmente le procedure.La guida affronta anche i limiti degli installer automatici in un clic, mettendo a confronto la loro praticità con il controllo offerto da un'installazione basata su Composer.A chi è rivoltoQuesto ebook è pensato per sviluppatori, web designer e professionisti che desiderano installare Drupal su un hosting condiviso, soprattutto quando la struttura standard del progetto entra in conflitto con le limitazioni del server.È particolarmente utile se hai già incontrato errori di percorso, problemi di accesso alla directory vendor/ o difficoltà legate alla configurazione della document root.È consigliata una conoscenza di base di Drupal, Composer e del terminale.Non lasciare che la directory web diventi un ostacolo al tuo progetto. Scopri come affrontare i vincoli dell'hosting condiviso e costruire un'installazione Drupal organizzata per una gestione più consapevole, professionale e aggiornabile nel tempo.IN ATTIVZIONE

Faccio un sito oppure scrivo un libro della mia storia?Se mi avessero posto questa domanda vent'anni fa, non avrei avuto dubbi: avrei risposto che il sito web era l'unica risposta sensata. Per anni è stato il centro della presenza digitale di qualsiasi attività, il luogo dove raccontarsi, presentare i servizi, farsi trovare.Oggi continuo a considerarlo uno strumento importante. Ma negli ultimi tempi mi sono fatto una domanda diversa:se volessi lasciare un segno davvero duraturo della mia esperienza professionale, sceglierei un sito oppure un libro?Il problema dei contenuti digitali di oggiViviamo in un'epoca in cui tutti comunicano e quasi nessuno viene ricordato.Post sui social, video, newsletter, siti web, ogni giorno milioni di contenuti vengono pubblicati e dimenticati nel giro di ore.E ora si è aggiunta l'intelligenza artificiale, che ha accelerato ulteriormente questo processo: chiunque può generare testi, articoli e contenuti in pochi secondi. Il risultato è un flusso continuo di materiale che si assomiglia tutto, scritto da nessuno e diretto a tutti.Perfino un sito web, in questo contesto, tende a diventare una brochure online che nessuno va a cercare.E allora nasce la domanda: cosa resta davvero della nostra esperienza?Il paradosso dell'era AIC'è qualcosa di curioso in quello che sta succedendo. Più gli strumenti digitali diventano veloci, automatici e accessibili, più le persone sembrano rivalutare ciò che è lento, fatto a mano, personale. Il libro funziona esattamente così. In un momento in cui qualsiasi testo può essere generato da una macchina in trenta secondi, un libro scritto da una persona reale, con la sua storia, i suoi errori, la sua visione, diventa qualcosa di raro.Un libro cambia la percezioneImmagina di incontrare un professionista, un avvocato, un commercialista, un architetto, un imprenditore, che durante il vostro primo incontro ti consegna il proprio libro. Non un volantino, non un catalogo: un libro.Nella mente di chi lo riceve scatta qualcosa di quasi automatico. Si pensa:questa persona ha qualcosa da raccontare, ha accumulato esperienza, ha investito tempo per lasciare qualcosa di utile agli altri.Un libro comunica autorevolezza senza bisogno di dichiararlo. E in un'epoca in cui chiunque può pubblicare qualsiasi cosa in pochi minuti, questo peso specifico è aumentato, non diminuito.Oggi pubblicare è possibile per tuttiPer molto tempo pubblicare era un privilegio riservato a pochi: bisognava convincere una casa editrice, aspettare mesi, spesso affrontare costi importanti. Oggi non è più così. Grazie al self publishing ogni professionista può trasformare la propria esperienza in un libro senza essere uno scrittore e senza aver pubblicato nulla in precedenza.Serve soprattutto una cosa: avere qualcosa da raccontare. E ogni attività che esiste da anni possiede una storia.Chi potrebbe scrivere un libro?Molte più persone di quanto si pensi. Un avvocato potrebbe scrivere una guida pratica per affrontare una successione o spiegare in modo semplice aspetti legali che le famiglie faticano a capire con la caratteristica e il supporto della propria esperienza. Un commercialista potrebbe aiutare chi apre una partita IVA a orientarsi tra obblighi e opportunità. Un architetto potrebbe raccogliere anni di esperienza cantieristica in un manuale sugli errori più comuni nelle ristrutturazioni.Le strutture turistiche e i luoghi di cultura hanno forse il materiale più ricco di tutti: la storia di una dimora, il racconto di un territorio, una guida che accompagni il visitatore ben oltre la visita stessa. E gli imprenditori potrebbero lasciare qualcosa di ancora più personale, le sfide, i fallimenti, i valori che hanno permesso all'azienda di crescere.Cosa fa la differenzaI social attirano attenzione. Il sito web presenta l'attività. Il libro costruisce autorevolezza. È una differenza sostanziale, e non è solo una questione di immagine.Un libro può essere regalato a un cliente, consegnato durante un incontro, esposto in uno studio professionale, venduto su Amazon. Continua a parlare di noi anche quando non siamo presenti. Dentro quelle pagine non ci sono soltanto informazioni, ci sono esperienze, errori, visioni. In un certo senso stai consegnando una parte di te stesso, e questo crea una connessione che nessun post o sito web riesce a replicare. Tantomeno un testo generato da un'AI.Quindi cosa sceglierei?Se dovessi promuovere un'attività oggi sceglierei ancora un sito web. Ma se dovessi scegliere uno strumento per lasciare una traccia duratura della mia esperienza, sceglierei un libro, perché un sito racconta cosa faccio, mentre un libro racconta chi sono, cosa ho imparato e perché la mia esperienza può essere utile agli altri.Paradossalmente, è proprio l'avanzata dell'intelligenza artificiale a rendere questo più vero oggi di quanto non fosse dieci anni fa. In un mondo in cui i contenuti costano zero e si producono in automatico, ciò che ha ancora valore è ciò che viene da una persona reale, con una storia reale. Un libro è esattamente questo.Daniele Venditti Clicca qui per approfondire

Per anni il percorso per diventare webmaster è stato sempre lo stesso.Prima HTML. Poi CSS. Poi JavaScript. Poi PHP. Poi WordPress, Drupal o qualche altro CMS. Centinaia di ore di studio, manuali, tutorial e notti passate a cercare soluzioni nei forum.Oggi qualcosa è cambiato.L'intelligenza artificiale ha introdotto un nuovo modo di sviluppare siti web e applicazioni: il Vibe Coding.Cos'è il Vibe CodingIl termine indica un approccio completamente diverso alla programmazione.Invece di scrivere ogni riga di codice manualmente, si descrive all'AI ciò che si vuole ottenere. L'intelligenza artificiale genera il codice, che può poi essere corretto, migliorato e adattato alle proprie esigenze.Con strumenti come ChatGPT, Claude, DeepSeek, Qwen e Copilot è possibile realizzare in pochi minuti attività che fino a poco tempo fa richiedevano ore di lavoro.Ad esempio:Creare una landing page completaGenerare componenti HTML e CSS personalizzatiSviluppare plugin WordPress su misuraScrivere moduli DrupalAutomatizzare operazioni ripetitiveQuesto non significa che la programmazione sia morta.Significa che il modo di programmare sta cambiando.Il problema dei plugin WordPressChi lavora con WordPress conosce bene la situazione.Serve una funzione? Si installa un plugin.Serve una modifica? Un altro plugin.Serve un'integrazione? Ancora un plugin.Dopo qualche anno ci si ritrova con siti pieni di estensioni che rallentano le prestazioni, aumentano i rischi di incompatibilità e rendono più complessa la manutenzione.L'intelligenza artificiale offre una possibile alternativa.Molte personalizzazioni che prima richiedevano un plugin dedicato oggi possono essere realizzate con poche righe di codice generate dall'AI e adattate alle esigenze del progetto.Non sempre è la scelta giusta, ma spesso permette di ottenere soluzioni più leggere e controllabili.E Drupal?Per molti professionisti Drupal è sempre stato percepito come un CMS difficile.In parte è vero.Drupal richiede una mentalità diversa rispetto a WordPress e una curva di apprendimento più impegnativa.Tuttavia l'AI sta abbassando notevolmente questa barriera.Oggi è possibile chiedere all'intelligenza artificiale di generare esempi di codice, spiegare API complesse, creare moduli personalizzati e guidare passo dopo passo lo sviluppo di funzionalità avanzate.Questo rende Drupal molto più accessibile anche per chi proviene dal mondo WordPress.Perché ho scritto questo ebookNegli ultimi anni ho pubblicato diversi manuali dedicati al web development, a WordPress e a Drupal.Osservando l'evoluzione degli strumenti di AI mi sono reso conto che stava nascendo una nuova figura professionale.Un webmaster che non si limita a installare plugin o configurare CMS, ma che utilizza l'intelligenza artificiale per creare soluzioni personalizzate, automatizzare attività e aumentare la propria produttività.Da questa riflessione è nato il nuovo ebook:"Mamma voglio fare il Vibe Coder"Un percorso pratico che parte dalle basi del web e arriva all'utilizzo dell'AI per lavorare con WordPress e Drupal.Cosa troverai nel libroL'ebook è diviso in quattro parti principali.Le basi del webUna panoramica essenziale su HTML, CSS, JavaScript e SEO per comprendere cosa accade dietro le quinte di un sito web.WordPress 2026Temi moderni, block editor e prime applicazioni pratiche del vibe coding per creare funzionalità personalizzate.Drupal 11Tipi di contenuto, Views, Layout Builder e sviluppo assistito dall'intelligenza artificiale.Da WordPress a Drupal con l'AIUn laboratorio finale dedicato alla migrazione e alla trasformazione di progetti esistenti utilizzando prompt e strumenti di AI.A chi è rivoltoQuesto ebook è pensato per:Webmaster WordPressSviluppatori webFreelance digitaliStudentiCuriosi che vogliono capire come sta cambiando il mondo dello sviluppo webNon è necessario essere programmatori esperti.Serve soltanto la voglia di imparare e sperimentare.Prossimamente disponibileL'obiettivo di questo libro non è sostituire lo studio tradizionale.L'obiettivo è mostrare come utilizzare l'intelligenza artificiale in modo concreto e professionale per lavorare meglio, più velocemente e con maggiore autonomia.Il futuro del web non appartiene a chi conosce più comandi.Appartiene a chi sa collaborare con l'intelligenza artificiale senza smettere di capire ciò che sta facendo.E forse il momento migliore per iniziare è proprio adesso.

Se stai leggendo questa guida, probabilmente hai già provato a installare Drupal 11 su un hosting condiviso e hai avuto problemi. Oppure hai seguito il tutorial ufficiale di Drupal e ti sei scontrato con un muro.Nessun problema: questa guida ti spiegherà perché c'è un problema tecnico di fondo e come risolverlo in modo semplice e definitivo (Guida realizzata per Drupal 11 Core e non per Drupal cms ex Starshot).🤔 Il problema di base: perché la struttura standard di Drupal NON funziona su molti hosting condivisi?Partiamo dall'inizio. Drupal 11, quando viene installato con Composer (il gestore di pacchetti PHP ufficiale), crea una struttura di cartelle come questa:progetto-drupal/ ├── composer.json ├── composer.lock ├── vendor/ ← tutte le librerie PHP (Symfony, Twig, ecc.) └── web/ ← la ROOT pubblica (document root) ├── index.php ├── core/ ├── modules/ ├── themes/ └── sites/Questa struttura è perfetta dal punto di vista della sicurezza perché tutto il codice PHP sensibile (le librerie in vendor/, le configurazioni, ecc.) si trova fuori dalla cartella accessibile al web. Solo la cartella web/ è esposta pubblicamente.Per far funzionare questa struttura, l'hosting deve permetterti di impostare la document root (la cartella che il server web mostra ai visitatori) su web/. In pratica, devi poter dire ad Apache/Nginx: "quando qualcuno visita il mio sito, mostra i file che stanno dentro la cartella web/, non quelli nella cartella principale".🚫 Il problema sugli hosting condivisiLa maggior parte degli hosting condivisi NON ti permette di cambiare la document root. La document root è fissa e bloccata su public_html/ (o httpdocs/ o www/). Non puoi modificarla. Punto.Ma c'è anche un secondo problema, ancora più subdolo: la direttiva open_basedir.🔒 Cos'è open_basedir?È una direttiva di sicurezza di PHP che limita i file che PHP può aprire a una specifica cartella e alle sue sottocartelle. Su molti hosting condivisi, open_basedir è impostata proprio su public_html/. Questo significa che PHP non può "vedere" né accedere a file che stanno fuori da public_html/.Facciamo un esempio concreto. Se provassi a installare Drupal con la struttura standard su un hosting condiviso:public_html/ ← document root fissa (open_basedir punta qui) ├── web/ ← qui dentro ci sono index.php, core, modules... │ └── ... vendor/ ← FUORI da public_html! PHP non può accederci!Il risultato? PHP non riesce a caricare le librerie in vendor/ perché si trovano fuori dai limiti imposti da open_basedir. Drupal non si avvia nemmeno, o dà errori inspiegabili.Morale: sugli hosting condivisi, tutto il codice deve stare dentro public_html/. Non puoi avere nulla fuori. Ecco perché serve la struttura FLAT.📜 Un po' di storia: come si installava Drupal "una volta"?Prima dell'avvento di Composer (che è diventato lo standard ufficiale da Drupal 8 in poi), Drupal si installava in modo molto più semplice: scaricavi un pacchetto .zip o .tar.gz dal sito ufficiale, lo decomprimevi direttamente in public_html/, e il gioco era fatto.Quelle si chiamano installazioni "legacy" (o "tradizionali"). Funzionavano così:public_html/ ← tutto dentro qui ├── index.php ├── core/ ├── modules/ ├── themes/ ├── sites/ ├── vendor/ ← già incluso nel pacchetto └── ...Semplice, no? Nessun problema con open_basedir, nessuna storia di document root. E funzionava perfettamente.Ma c'era un problema enorme: la gestione delle dipendenze. Drupal moderno usa decine di librerie PHP esterne (Symfony, Guzzle, Twig, Psr, ecc.). Nel pacchetto scaricabile, queste librerie erano già incluse nella cartella vendor/. Ma come si aggiornavano? Come si gestivano le versioni? Era un caos. Spesso le installazioni legacy finivano con versioni mixate, librerie mancanti o in conflitto.Per questo motivo, dal 2018 circa, il team di Drupal ha abbandonato ufficialmente le installazioni "legacy" con pacchetto scaricabile. Oggi l'unico metodo supportato è Composer.📌 Nota storica: Ancora oggi trovi in giro vecchi tutorial che ti dicono di scaricare un file .zip da drupal.org. Ignorali. Per Drupal 10 e 11, quel metodo non è più supportato e può dare problemi di sicurezza e compatibilità.Ma Composer crea la struttura con web/... e noi non possiamo usarla sugli hosting condivisi. Sembra un paradosso, vero? Fortunatamente esiste una soluzione geniale: il plugin Scaffold.Cos'è il plugin Scaffold di Drupal (e perché è rivoluzionario)Gli sviluppatori di Drupal erano ben consapevoli del problema degli hosting condivisi. Per questo hanno creato un plugin Composer chiamato drupal/scaffold.🔧 Cos'è Scaffold?Scaffold (in inglese "impalcatura") è un plugin che permette a Composer di copiare i file pubblici (index.php, .htaccess, robots.txt, ecc.) dove vuoi tu, non necessariamente dentro web/.Quando lanci composer create-project per installare Drupal, Scaffold viene eseguito automaticamente e copia i file "scaffold" nella cartella che tu gli indichi. Di default, li copia in web/. Ma grazie a Scaffold, puoi decidere tu la cartella di destinazione, modificando il file composer.json.In poche parole, Scaffold disaccoppia la posizione dei file pubblici dal resto del progetto. Questo significa che possiamo dire a Scaffold: "copia index.php, .htaccess e tutti i file pubblici direttamente nella root del progetto, non dentro web/".Ed è esattamente quello che faremo in questa guida: useremo Scaffold per generare una struttura FLAT, dove tutto (inclusi i file pubblici) sta dentro public_html/, risolvendo così i problemi di document root fissa e open_basedir.Il bello è che manteniamo tutti i vantaggi di Composer: composer.json, composer.lock, aggiornamenti sicuri, gestione perfetta delle dipendenze. Il meglio di entrambi i mondi.🔧 Cosa significa "struttura FLAT"?La struttura FLAT è semplicemente l'installazione di Drupal in cui non esiste la cartella web/. Tutto è nella stessa cartella root.Struttura standard (NON funziona su hosting condivisi):public_html/ └── web/ ├── core/ ├── modules/ ├── themes/ ├── vendor/ └── index.phpStruttura FLAT (funziona su hosting condivisi):public_html/ ├── core/ ├── modules/ ├── themes/ ├── vendor/ ├── index.php ├── .htaccess ├── composer.json ├── composer.lock └── sites/ └── default/ └── files/In pratica, prendiamo tutto ciò che starebbe dentro web/ e lo "spostiamo su" di un livello, eliminando la cartella intermedia.Questa struttura risolve entrambi i problemi:✅ La document root può rimanere public_html/ (nessun problema con hosting che non permettono di cambiarla)✅ Tutto il codice (compreso vendor/) sta dentro public_html/, quindi open_basedir non blocca nulla✅ Manteniamo Composer e il plugin Scaffold per la gestione dei file pubblici📋 RequisitiAccesso SSH al tuo hostingComposer installato (la maggior parte degli hosting lo ha, altrimenti chiedi al supporto)Dominio puntato alla cartella public_html/PHP 8.1 o superiore📌 Scegli la tua Variante di HostingPrima di iniziare, devi sapere che non tutti gli hosting condivisi sono uguali. A seconda delle restrizioni del tuo provider, esistono tre scenari possibili:Variante A (Hosting Flessibile con SSH): Permette di creare cartelle al di fuori della cartella pubblica (public_html o htdocs).Variante B (Hosting Restrittivo con SSH): Ti blinda all'interno dell'unica cartella pubblica (public_html o htdocs) e non ti permette di creare nulla al di sopra di essa.Variante C (Hosting senza SSH): Non offre l'accesso al terminale. Richiede lo sviluppo interamente sul tuo PC (tramite DDEV o Composer in locale) e il送 trasferimento dei file via FTP. Questo scenario sarà l'oggetto della nostra prossima guida dedicata!🎯 Oggetto di questa guida: In questa sede tratteremo esclusivamente la Variante B. Vedremo come aggirare le restrizioni dell'hosting condiviso più rigido sul mercato, creando una "Sandbox Interna a Imbuto" direttamente dentro lo spazio pubblico, per poi trasformare il tutto in un'installazione Drupal "Flat" e pulita.🧭 GUIDA PASSO PASSO .guida-drupal pre { background-color: #2d3139 !important; color: #f8f8f2 !important; padding: 15px !important; border-radius: 6px !important; border: 1px solid #3e4451 !important; overflow-x: auto !important; font-family: 'Courier New', Courier, monospace !important; font-size: 14px !important; line-height: 1.5 !important; margin: 15px 0 !important; } .guida-drupal code { font-family: 'Courier New', Courier, monospace !important; color: #e06c75 !important; background-color: #f5f5f5 !important; padding: 2px 6px !important; border-radius: 4px !important; font-size: 90 !important; } .guida-drupal pre code { color: #f8f8f2 !important; background-color: transparent !important; padding: 0 !important; border-radius: 0 !important; font-size: 100% !important; } .guida-drupal .code-title { font-weight: bold !important; color: #4b5263 !important; font-size: 14px !important; } .guida-drupal .code-block { margin-top: 15px !important; margin-bottom: 15px !important; } 1️⃣ Prepara l'ambiente e ripulisci public_htmlPer eseguire questa guida è fondamentale avere un hosting con accesso SSHPrima di iniziare, dobbiamo assicurarci che la cartella del tuo sito sia completamente vuota e che la cache globale del server sia azzerata per evitare conflitti con vecchi file orfani o precedenti installazioni fallite.Collegati al terminale ed esegui questi comandi per ripulire tutto l'ambiente in modo profondo:📋 Copy via SSH# Move to the target public folder cd ~/domains/tuodominio.it/public_html # Purge all visible files and folders rm -rf * # Purge all hidden files and system dotfiles rm -rf .[^.]* 2>/dev/null # Clear Composer's physical global user cache to prevent metadata conflicts rm -rf ~/.composer/cache composer clear-cacheIMPORTANTE: sostituisci in tutta la guida "tuodominio.it" con il sito reale ad esempio "test26.sviluppo.host"2️⃣ Scarica la struttura di Drupal con installazione congelata (--no-install)Creiamo il progetto scaricando i file in una cartella temporanea isolata. Rimanendo all'interno della cartella pubblica appena ripulita, generiamo una sandbox interna per evitare interferenze con le cache del server durante la fase iniziale:📋 Copy via SSH# Download the initial Drupal configuration files into a nested sandbox directory composer create-project drupal/recommended-project drupal11tmp --no-install # Enter the newly generated sandbox directory cd drupal11tmpPerché usiamo il parametro --no-install? Questo flag dice a Composer di scaricare solo la struttura iniziale dei file di configurazione base, senza avviare subito il download dei pacchetti effettivi del core. In questo modo, congeliamo l'installazione per avere il tempo di modificare i percorsi nel file composer.json nei passaggi successivi. Solo così Composer saprà fin dal primo secondo che si tratta di una struttura FLAT, evitando di generare cartelle errate che poi risulterebbero impossibili da spostare in modo pulito.3️⃣  Sposta i file per la struttura FLATSpostiamo tutto il contenuto strutturale ereditato dalla cartella predefinita web/ direttamente nella radice corrente della nostra sandbox, rimuovendo poi la vecchia directory vuota:📋 Copia via SSH# Copy all visible contents from the web folder to the current directory (silencing empty warnings) cp -R web/* . 2>/dev/null # Copy all hidden files (dotfiles) from the web folder to the current directory cp -R web/.[^.]* . 2>/dev/null # Remove the empty web directory rm -rf web🔍 Nota di trasparenza (Cosa sta succedendo?): Se dopo aver eseguito questo comando controlli la cartella tramite il File Manager dell'hosting, noterai che sono presenti solo tre file: composer.json, composer.lock e LICENSE.txt. È del tutto normale!Poiché al Punto 2 abbiamo usato il comando --no-install, Composer ha scaricato solo il modello di base (template). In questa fase iniziale, la cartella web/ non conteneva ancora i file veri e propri di Drupal (come la cartella core/, index.php, moduli o temi), ma ospitava solo pochissimi file di configurazione nascosti. Con questo passaggio abbiamo spostato quei pochi elementi e rimosso la cartella web/ per preparare il terreno. I veri file di Drupal compariranno solo tra poco, quando lanceremo l'installazione effettiva.4️⃣ Modifica il file composer.json per la struttura FLATApri il file composer.json presente nella cartella temporanea (utilizzando l'editor del tuo hosting o un editor di testo via SSH come nano composer.json) e configuralo per la struttura FLAT.Dobbiamo effettuare tre modifiche chirurgiche: impostare la web-root su ./, rimuovere il prefisso web/ da tutte le voci presenti in installer-paths e, soprattutto, inserire la direttiva per disattivare i collegamenti simbolici.Il file deve apparire esattamente così:📋 Struttura corretta del file composer.json{ "name": "drupal/recommended-project", "type": "project", "repositories": { "drupal": { "type": "composer", "url": "https://packages.drupal.org/8" } }, "require": { "composer/installers": "^2.3", "drupal/core-composer-scaffold": "^11.4", "drupal/core-recipe-unpack": "^11.4", "drupal/core-project-message": "^11.4", "drupal/core-recommended": "^11.4", "drupal/metatag": "^2.2" }, "config": { "allow-plugins": { "composer/installers": true, "drupal/core-composer-scaffold": true, "drupal/core-recipe-unpack": true, "drupal/core-project-message": true, "symfony/runtime": true } }, "extra": { "drupal-scaffold": { "//2": "Force core entry scripts (index.php, .htaccess) to populate directly on current root", "locations": { "web-root": "./" }, "//3": "Disable symbolic links generation to bypass restricted hosting server rules", "symlinks": false, "//3b": "Authorize scaffold plugin to generate files safely on the root folder", "allowed-packages": [ "*" ] }, "installer-paths": { "core": ["type:drupal-core"], "libraries/{$name}": ["type:drupal-library"], "modules/contrib/{$name}": ["type:drupal-module"], "profiles/contrib/{$name}": ["type:drupal-profile"], "themes/contrib/{$name}": ["type:drupal-theme"], "drush/Commands/contrib/{$name}": ["type:drupal-drush"], "modules/custom/{$name}": ["type:drupal-custom-module"], "profiles/custom/{$name}": ["type:drupal-custom-profile"], "themes/custom/{$name}": ["type:drupal-custom-theme"], "recipes/{$name}": ["type:drupal-recipe"] } } }🔍 Focus Tecnico: Cosa sono i Symlink e perché li disattiviamo? I symlink (collegamenti simbolici) sono file "finti" che funzionano come scorciatoie, rimandando a un file reale memorizzato altrove. Di default, Drupal crea dei symlink nella cartella pubblica per file critici come index.php o .htaccess. Tuttavia, molti hosting condivisi bloccano la creazione di symlink per rigide regole di sicurezza. Inserendo la riga "symlinks": false, ordiniamo a Composer di non creare scorciatoie, ma di copiare fisicamente i file reali e indipendenti nella cartella. È proprio questo comando che trasforma l'installazione in una struttura FLAT a prova di errore.⚠️ Nota di controllo: Assicurati di non dimenticare le virgole quando inserisci la riga "symlinks": false. Un errore di sintassi nel file JSON bloccherà l'esecuzione dei comandi successivi di Composer.5️⃣ Abilita i plugin ed esegui lo Scaffold nella SandboxAutorizziamo il plugin dello Scaffold, avviamo il download dei pacchetti ed eseguiamo la generazione dei file di avvio direttamente all'interno della sandbox temporanea:📋 Copy via SSH# Step 1: Whitelist and authorize the core composer scaffold plugin explicitly composer config allow-plugins.drupal/core-composer-scaffold true # Step 2: Update dependencies and generate a clean unified lock file bypassing proxy filters composer update --no-plugins # Step 3: Extract core packages, modules, and themes physically onto the filesystem composer install # Step 4: Run the scaffold with native plugins enabled to generate root entry files composer drupal:scaffold # Step 5: Build a clean mapping file for the PHP class loader composer dump-autoload6️⃣ Svuota la sandbox a "imbuto" nella cartella pubblica principaleOra che l'installazione FLAT è pronta nella sandbox ed è completa di tutti i file vitali (come index.php, .htaccess e la cartella vendor/), dobbiamo portare tutto fuori e riversarlo nella directory pubblica finale del dominio.Rimani all'interno della cartella drupal11tmp ed esegui il comando di spostamento a imbuto verso la cartella superiore (..):📋 Copy via SSH# Move all visible deployment files and folders up to public_html mv * .. # Move all hidden configuration files and dotfiles up to public_html mv .[^.]* .. 2>/dev/nullNota: Il secondo comando serve a spostare i file nascosti fondamentali (come il file .htaccess o i file di configurazione con il punto iniziale). L'errore finale restituito dal terminale è del tutto normale, poiché il sistema ti avviserà che non può spostare la cartella corrente in sé stessa o la cartella superiore.7️⃣ Entra nella directory pubblica finale e crea la cartella files per i mediaSpostati nella cartella principale del tuo sito ed elimina la sandbox temporanea (che ora è rimasta vuota). Successivamente, generiamo la directory in cui Drupal gestirà le immagini e i caricamenti pubblici degli utenti, assegnandole i permessi di scrittura adatti all'ambiente condiviso:📋 Copy via SSH# Step back up into your main web document root (public_html / httpdocs) cd .. # Remove the empty sandbox directory safely rmdir drupal11tmp # Provision the system uploads folder and set directory permissions for shared hosting mkdir -p sites/default/files chmod 775 sites/default/files8️⃣ Finalizza l'autoloader di ComposerSiamo giunti all'ultimo passaggio sul terminale. Eseguiamo la rigenerazione finale dell'autoloader di Composer direttamente dalla radice del sito per registrare in modo definitivo la posizione piatta di tutti i file di Drupal 11:📋 Copy via SSH# Regenerate the autoloader configuration targeting the final FLAT filesystem map composer dump-autoload🎉 Complimenti! La tua installazione di Drupal 11 in modalità interamente FLAT è completata con successo ed è a prova di blocchi del server. Puoi aprire il tuo browser, digitare l'indirizzo del tuo sito web e procedere con la classica configurazione guidata di Drupal sullo schermo (scelta della lingua, inserimento dei dati del database e creazione dell'utente amministratore).9️⃣ Installa Drupal dal browserApri il tuo browser preferito e digita l'indirizzo del tuo sito internet:🌐 Indirizzo del sitohttps://tuodominio.itSegui la normale procedura guidata di configurazione sullo schermo inserendo le credenziali del database. La tua installazione FLAT di Drupal 11 su hosting condiviso è terminata e perfettamente funzionante! .guida-drupal .note, .guida-drupal .danger, .guida-drupal .warning { padding: 15px !important; border-radius: 6px !important; margin: 20px 0 !important; font-size: 15px !important; line-height: 1.5 !important; } .guida-drupal .note { background-color: #ecf3fe !important; border-left: 5px solid #1a73e8 !important; color: #1e293b !important; } .guida-drupal .danger { background-color: #fde8e8 !important; border-left: 5px solid #e02424 !important; color: #9b1c1c !important; } .guida-drupal .warning { background-color: #fef3c7 !important; border-left: 5px solid #d97706 !important; color: #92400e !important; } .guida-drupal .comparison { display: flex !important; gap: 20px !important; margin: 20px 0 !important; flex-wrap: wrap !important; } .guida-drupal .comparison-col { flex: 1 !important; min-width: 280px !important; background-color: #f8fafc !important; padding: 20px !important; border-radius: 8px !important; border: 1px solid #e2e8f0 !important; } .guida-drupal .comparison-col h4 { margin-top: 0 !important; font-size: 16px !important; border-bottom: 2px solid #e2e8f0 !important; padding-bottom: 8px !important; } .guida-drupal .comparison-col ul { padding-left: 20px !important; margin-bottom: 0 !important; } .guida-drupal .comparison-col li { margin-bottom: 8px !important; font-size: 14px !important; } ⚠️ Problema comune dopo l'installazione: interfaccia admin "monca"Su alcuni hosting condivisi, dopo l'installazione potrebbe capitare che:La toolbar di amministrazione sia ridotta o incompleta.Manchino voci di menu vitali.L'interfaccia sembri "tagliata" o i fogli di stile non funzionino correttamente.Causa: Un file .htaccess generato automaticamente da Drupal all'interno di sites/default/files/ che fa uso di alcune direttive Apache (Options) non sempre permesse dagli hosting condivisi. Spesso Apache non restituisce un errore 500 esplicito, ma blocca l'accesso ad alcuni script impedendo a Drupal di caricare gli asset.✅ SoluzioneApri il file posizionato in questo percorso:📁 Percorso del filepublic_html/sites/default/files/.htaccessTrova al suo interno questa riga esatta:🔍 Riga da individuareOptions -Indexes -ExecCGI -Includes -MultiViewsCommentala inserendo il simbolo del cancelletto all'inizio del testo:📝 Modifica da salvare#Options -Indexes -ExecCGI -Includes -MultiViewsSalva il file sul server e procedi immediatamente a ricostruire la cache di Drupal lanciando questo comando da terminale:📋 Copia via SSHcd ~/domains/tuodominio.it/public_html php core/scripts/drupal cache:rebuildAlternativa: Se riesci comunque a navigare nei menu rimasti, puoi andare su /admin/config/development/performance e cliccare sul pulsante "Svuota tutte le cache". L'interfaccia grafica tornerà immediatamente alla normalità.📌 Nota: Ricorda che alcuni aggiornamenti importanti di Drupal (eseguibili tramite composer update) potrebbero rigenerare da zero il file .htaccess nella cartella files/. Se il problema della grafica monca si ripresenta in futuro, ti basterà ripetere questa rapida modifica.🚫 Perché evitare gli installer automatici (tipo "installazione in 1 click")⚠️ ATTENZIONE: Molti hosting commerciali offrono all'interno del pannello dei pulsanti pronti del tipo "Installa Drupal in 1 click". Sebbene possa sembrare una scelta comoda ed immediata, si rivela quasi sempre una trappola strutturale. Ecco i motivi principali per cui dovresti evitarli.❌ I problemi delle installazioni automaticheNessuna gestione delle dipendenze: Il core moderno di Drupal si appoggia a decine di librerie PHP esterne di alto livello (come Symfony, Guzzle, Twig). Un installer automatico si limita a fornirti questi componenti già "impacchettati" e statici, privandoti di un vero sistema di controllo.Il file composer.lock non esiste o è incompleto: Questo è il punto più critico. Il file composer.lock ha il compito fondamentale di congelare con precisione chirurgica la versione di ogni singola libreria e modulo installato nel sistema. Senza questo file, non hai alcuna certezza su cosa sia realmente in esecuzione sul tuo spazio web.Nessuna mappatura delle versioni: Quando utilizzi Composer, ogni singolo pacchetto dichiara una versione definita (ad esempio symfony/http-foundation: v6.4.0). Con gli installer ad un click ti ritrovi una "zuppa" di file mescolati senza tracciabilità del software.Aggiornamenti disastrosi: Quando proverai ad aggiornare una versione di Drupal installata automaticamente, il sito molto probabilmente smetterà di funzionare poiché mancano i file storici che indicano a Composer quali versioni di librerie terze fossero presenti prima del processo.Impossibile aggiungere moduli moderni: La sintassi composer require drupal/nome_modulo rappresenta lo standard assoluto per espandere il CMS. Negli installer automatici questa funzione è spesso bloccata o genera conflitti distruttivi.Struttura e percorsi fragili: Questi sistemi alterano i percorsi predefiniti di Drupal creando configurazioni anomale sui server condivisi che rompono la compatibilità con i futuri moduli di terze parti.📊 Il cuore del problema: composer.lock e la mappatura delle dipendenzeQuando installi Drupal utilizzando Composer in modo nativo, il sistema si appoggia su due file di testo essenziali:📄 Ruoli dei file di configurazionecomposer.json → Specifica cosa desideri installare (es. "drupal/core": "^11") composer.lock → Registra cosa hai installato ESATTAMENTE (es. "twig/twig": "3.8.0")Il file composer.lock funge da vera e capita "mappa catastale" del tuo intero applicativo web, catalogando ogni dipendenza e sottodipendenza insieme al rispettivo hash crittografico di integrità. Gli installer in un click rompono questo equilibrio perché:❌ Il file composer.lock è completamente assente.❌ Oppure viene inserito un file fasullo generato in modo artificiale.❌ La cartella vendor/ diventa un ammasso statico di codice non tracciabile.✅ Con Composer (questa guida)File composer.json e composer.lock reali e coerenti.Ogni pacchetto ha una versione specifica e sicura.Mappatura completa e nativa di tutte le sottodipendenze.Aggiornamenti stabili e rapidi con il comando composer update.Moduli aggiuntivi installabili in pochi secondi.Possibilità di ricostruire l'intero progetto da zero in qualsiasi momento.Piena compatibilità con le strutture degli hosting condivisi.Standard di sviluppo pulito e professionale.❌ Con installer automaticoFile composer.lock assente, incompleto o corrotto.Versioni reali delle librerie interne del tutto sconosciute.Nessuna mappatura nativa o sicura delle dipendenze PHP.Rischio altissimo di rompere il database durante gli aggiornamenti.Gestione dei moduli obsoleta via FTP come nel 2005.Impossibilità di replicare l'installazione su altri server di test.Frequenti problemi e blocchi di permessi con i server condivisi.Approccio limitato a utilizzi puramente hobbistici.🎯 Cosa fare se hai già usato un installer automatico?Se sul tuo spazio web è già attiva un'installazione di Drupal creata tramite un tool automatico ad un click, ti trovi davanti a due opzioni:Rimuovere tutto e reinstallare seguendo questa guida: È la scelta che ti consiglio caldamente. Richiede pochissimo tempo e ti garantisce fin da subito una piattaforma web professionale, sicura, robusta e aggiornabile per gli anni a venire.

Hai cercato "come installare Drupal", hai trovato tre guide diverse, hai provato a seguirle e qualcosa si è rotto.Non sei tu il problema. È che nessuno te lo ha mai spiegato nel modo giusto.Questo libro fa una cosa sola: ti fa avere Drupal funzionante sul tuo computer in meno di 10 minuti, usando gli strumenti che usano i professionisti, DDEV e Composer, senza perdere una giornata intera su errori incomprensibili.Cosa imparerai:- Come installare DDEV su Windows in particolare, Mac e Linux- La procedura esatta per installare Drupal con Composer, quella che tutti sbagliano- Come gestire moduli, database e aggiornamenti da terminale con pochi comandi- La struttura delle cartelle che Drupal richiede per essere sicuro e professionale- Come risolvere gli errori più comuni in 5 minuti invece di cercare per ore su GooglePer chi è questo libro:Per chi arriva da WordPress e vuole capire come funziona davvero lo sviluppo Drupal. Per chi ha già provato a installare Drupal e si è bloccato. Per chi vuole imparare a usare gli strumenti standard del mercato, non soluzioni artigianali.Apri il libro, segui i passaggi, e dopo 10 minuti hai Drupal che gira nel browser. Poi puoi approfondire. Ma prima devi partire.Leggi l'anteprima del libro su Amazon KDPAcquistalo su Amazon KDP oppure leggilo GRATIS su Kindle unlimited https://www.amazon.it/dp/B0GHWZS9LQEnglish versionhttps://www.amazon.com/dp/B0GRTL7ZRH   

Quando si parla di realizzare un sito web professionale, una delle prime domande da porsi è: quale CMS scegliere? In questo articolo mettiamo a confronto due dei sistemi di gestione dei contenuti più popolari al mondo: Drupal e WordPress.Entrambi sono strumenti potenti, ma molto diversi tra loro. Vediamo insieme le principali differenze e scopriamo qual è il più adatto in base alle tue esigenze.INDICE– Introduzione ai due CMS– Le due anime di Drupal– Tipi di contenuto: flessibilità al massimo– Il pannello di controllo a confronto– La potenza delle Viste in Drupal– WordPress: semplicità prima di tutto– Drupal o WordPress? Dipende da cosa ti serve– Video Youtube– Ebook consigliatoIntroduzione ai due CMS[Menù]WordPress nasce nel 2003 come piattaforma per blog, ma oggi è utilizzato anche per la creazione di qualsiasi tipo di sito web. È conosciuto per la sua semplicità e per l'ampia disponibilità di plugin e temi.Drupal, invece, ha origini ancora più lontane: nasce nel 2001 ed è pensato per progetti più complessi e strutturati, come portali aziendali o siti per enti e pubbliche amministrazioni. È ideale quando si ha bisogno di una struttura solida, flessibile e altamente personalizzabile.Le due anime di Drupal[Menù]Dal gennaio 2025, Drupal si è "sdoppiato" in due versioni:Drupal Core, pensato per utenti esperti;Drupal CMS, orientato a chi ha meno esperienza e vuole iniziare in modo più semplice grazie a un'interfaccia più user-friendly e moduli preinstallati.In questo articolo ci concentriamo principalmente su Drupal Core.Tipi di contenuto: flessibilità al massimo[Menù]Una delle principali differenze tra WordPress e Drupal riguarda il modo in cui vengono gestiti i contenuti.In Drupal, troviamo due concetti fondamentali: il contenuto e il tipo di contenuto.Il contenuto è, ad esempio, l'articolo che vogliamo pubblicare.Il tipo di contenuto è invece la struttura che definisce quali campi avrà quel contenuto: titolo, immagine, testo, link, file, date, ecc.La potenza di Drupal sta proprio qui: possiamo creare tipi di contenuto personalizzati con tutti i campi che ci servono, direttamente dal pannello di controllo, senza dover installare moduli aggiuntivi. Questo livello di flessibilità è difficile da trovare in altri CMS.In WordPress, invece, esistono due tipi di contenuto predefiniti: articoli e pagine. Per ottenere una flessibilità simile a quella di Drupal, è necessario installare plugin di terze parti, come ad esempio ACF (Advanced Custom Fields).Il pannello di controllo a confronto[Menù]WordPress presenta un'interfaccia più semplice e immediata. Le voci di menu si trovano sulla sinistra e l'editor Gutenberg (editor a blocchi) rende la creazione di contenuti molto intuitiva, anche per chi è alle prime armi.Drupal ha un'interfaccia meno immediata, ma decisamente più potente. La curva di apprendimento è più ripida, ma permette di costruire soluzioni su misura già a partire dal core.La potenza delle Viste in Drupal[Menù]Un'altra caratteristica unica di Drupal è il modulo Views (viste). Grazie a questo modulo possiamo elaborare i dati presenti nel database e mostrarli sul sito nel formato desiderato, senza scrivere una sola riga di codice SQL.Il modulo Views è una vera arma in più: consente di visualizzare contenuti filtrati, ordinati o raggruppati in modo dinamico, e può essere configurato tramite interfaccia grafica.Nessun altro CMS, ad oggi, offre un sistema così completo e potente per gestire la visualizzazione dei dati.WordPress: semplicità prima di tutto[Menù]WordPress resta comunque la scelta ideale per chi cerca un sistema più semplice e immediato, adatto a:Blog personaliSiti vetrinaPiccoli e-commerceProgetti dove la velocità di sviluppo conta più della complessità strutturaleCon l'aiuto di plugin e page builder, come Gutenberg o altri strumenti visuali, WordPress può coprire molte esigenze, anche se con limiti maggiori nella personalizzazione avanzata rispetto a Drupal.Drupal o WordPress? Dipende da cosa ti serve.[Menù]Scegli WordPress se vuoi partire subito, con una curva di apprendimento bassa e un'interfaccia intuitiva.Scegli Drupal se hai bisogno di un CMS robusto, scalabile, estremamente flessibile e sei disposto a investire un po' di tempo per impararne la logica.Entrambi i sistemi hanno punti di forza e possono essere utilizzati con successo per costruire siti professionali. La vera domanda è: quale CMS si adatta meglio al tuo progetto?Video Youtube[Menù]Guarda il video Drupal vs WordPress su YoutubeIn questo video approfondisco i concetti e le differenze più importanti tra Drupal e WordPress. Questo articolo è parte dell'ebook:📘 DRUPAL Opens Minds... Oltre i limiti di WordPressQuesto ebook è pensato per chi proviene dal mondo WordPresse vuole capire Drupal senza complicarsi la vita. Clicca qui o sull'immagine per accedere all'ebook e acquistarlo su Amazon di Daniele Venditti   

SCRIVIMI

Contatti e supporto tecnico

Il sito di Progettimultimediali.com raccoglie contenuti tecnici su Drupal e sviluppo web in diversi formati:

  • Ebook su Amazon KDP - guide e approfondimenti strutturati
  • Articoli sul sito - guide e approfondimenti
  • YouTube - contenuti selezionati e dimostrativi

Se hai domande sui contenuti trattati, puoi contattarmi descrivendo brevemente la tua situazione

Scrivimi →