Drupal CMS

Drupal è uno tra i CMS più diffusi al mondo, insieme a JOOMLA e WordPress (anche se quest’ultimo in realtà nasce come piattaforma di blogging). L’idea di base di Drupal, e che ne ha determinato il successo, è quella di realizzare una piattaforma orientata più allo sviluppatore che all’utilizzatore finale. Di conseguenza il target di riferimento è costituito da utenti mediamente esperti, che sono in grado di realizzare, a partire da quello che hanno a disposizione, più o meno qualunque cosa riducendo al minimo la parte di programmazione. In pratica, piuttosto che fornire il più grande insieme di soluzioni possibili, Drupal fornisce un set di funzionalità di base che permettono di costruirsi praticamente tutto tramite interfaccia grafica. I concetti di base che sottende drupal sono:

  • User: All’interno del bundle Drupal viene inclusa per intero la gestione dell’autenticazione, l’anagrafe degli utenti, dei ruoli e dei permessi. Tali funzionalità stanno alla base del sistema garantendone la sicurezza e il data trimming.
  • Fields: Attraverso la definizione dei “Fields” è possibile definire l’elenco dei campi impiegabili all’interno dei vari content type.
    Content Type: Ogni content type rappresenta le entità coinvolte nel sito. Tali entità possono essere di qualunque tipo e contenere un insieme indefinito di Fields. Di base, l’aggiunta di un content type genera anche l’insieme di view e form necessarie per gestire l’inserimento, la modifica e la cancellazione delle istanze del determinato content type.
    View: Tramite questo concetto si vuole rappresentare la trasformazione grafica di un istanza di un content type, una lista di elementi o altre view. La parte di rendering può avvenire tramite un set di tipologie prefissate oppure definito dall’utente tramite template php direttamente dall’interfaccia grafica.
  • Form: Definisce una maschera di inserimento, che può essere utilizzata per gestire un content type o per funzioni totalmente custom.
  • Themes: È possibile realizzare un tema grafico tramite la costruzione di un modulo e di determinati file di configurazione, che ne descrivono le varie componenti. Il linguaggio di templating supportato è php.
  • Hook: Le hook in drupal sono una risorsa polimorfa e che sostanzialmente consiste nell’implementazione di una funzione php all’interno di un modulo. Tale funzione può essere invocata al verificarsi di un determinato evento o utilizzata per un determinato scopo. Ad ogni richiesta l’insieme dei moduli installati viene scansionato includendo tutti i file di codice che li compongono. Su tutti questi file vengono controllate le varie funzioni presenti, e qualora una di queste soddisfi determinate condizioni, viene eletta come possibile implementazione per una determinata hook. Di conseguenza implementando l’insieme corretto di funzioni è possibile alterare il comportamento del sito o aggiungere nuove funzionalità. Alla base della convenzione per le hook c’è il concetto di chiamare la funzione con il nome del modulo seguito dal nome della hook. Ad esempio, per effettuare un’operazione all’inizio dell’elaborazione di una richiesta http va implementata la hook init, ovvero all’interno del proprio modulo va creata una funzione che si chiami _init(). Va da se che ciascuna funzione deve implicitamente essere conforme ad un dato prototipo, accettando in ingresso tutti gli input previsti e dando in output esattamente l’oggetto previsto (questo non è sempre banale poiché in php non esistono oggetti strongly-typed).
  • Modules: Rappresenta un contenitore per le funzionalità implementate dall’utente. In termini pratici consiste in una cartella su file system contente alcuni file di metadati (.info) e un file php che si chiama con lo stesso nome del modulo ed ha estensione .module. All’interno di tale file possono essere implementate tutte le hook richieste per realizzare l’obiettivo preposto. Ciascun modulo può essere installato, disinstallato e configurato da interfaccia.

Ciascuna installazione drupal è intrinsecamente multi-site. Tale risultato si ottiene per naming convention. All’interno della cartella “sites” viene posta una sottocartella che deve chiamarsi con lo stesso nome del dominio del sito che si vuole gestire. All’interno di queste sottocartelle è sufficiente porre solo le personalizzazioni specifiche del sito, mentre le parti comuni sono implementate direttamente nel sito principale.

I PRO di Drupal

• Struttura orientata alla personalizzazione
• Enorme community
• Tantissimi moduli già pronti delle tipologie più disparate
• Utilizza tecnologie open source gratuite
• Con l’aggiunta di qualche modulo integrativo ha tutto il necessario per soddisfare tutte le esigenze di business logic
• Si riesce a fare quasi tutto da interfaccia
• La programmazione da interfaccia si presta male ad essere versionata

I Contro di Drupal

• Difficile da integrare all’interno di un flusso SDLC
• Le personalizzazioni avvengono in maniera procedurale
• Manca un vero e proprio linguaggio di templating orientato alla grafica
• Il meccanismo dei content type funziona bene solo per un numero limitato di elementi
• Difficile da clusterizzare
• Necessita di APC per avere prestazioni accettabili
• Il meccanismo di cache interno funziona solo per utenti anonimi
• Utilizza il database per gestire il contesto applicativo
• Non dispone di un vero e proprio ORM

danielefontani

Actually CTO in Sintra Consulting s.r.l, I'm senior developer and architect specialized on portals, intranets, and others business applications. Particularly interested in Agile developing and open source projects, I worked on some of this as project manager and developer. My experience include: Frameworks \Technlogies: .NET Framework (C# & VB), ASP.NET, Java, php, Spring Client languages: XML, HTML, CSS, JavaScript, Angular.js,Angular. jQuery Platforms: Sharepoint,Liferay, Drupal Databases: MSSQL, ORACLE, MYSQL, Postgres

Lascia un commento