Come avviare un progetto in Drupal 7

Una volta che si iniziano a fare diversi progetti in Drupal ci si accorge che molti moduli vengono sempre utilizzati, che molte funzionalità devono essere sempre ricreate: da qui nasce la necessità di standardizzare i nostri progetti, per risparmiare tempo e per creare uno standard che tutto il team di sviluppo possa condividere. In questa guida andrò a mostrare come inizializzare un progetto in Drupal 7 nel modo corretto, andando ad utilizzare i profili di Drupal, il comando drush make di drush (http://www.drush.org/en/master/) e i moduli contrib features e strongarm. I profili di installazione di Drupal permettono la configurazione di molte funzionalità come moduli, temi, ruoli, etc. Di default Drupal fornisce due profili, standard e minimal, ma sulle varie distribuzioni di Drupal troviamo altri profili ad hoc e anche noi possiamo creare il nostro profilo personale, come andremo a fare. Partendo da un progetto vuoto andiamo a creare una struttura di cartelle del tipo: profiles/nome_profilo Al suo interno creiamo due file, nome_profilo.info e nome_profilo.profile Il primo ci permette di definire il nostro profilo e aggiungere dipendenze come un modulo normale di Drupal: name = “Nome profilo“ description = “Descrizione“ core = “7.x“ dependencies[] = field Il secondo file ci permette di effettuare tutta una serie di configurazioni del profilo come per esempio selezionare di default il nostro profilo durante l’installazione: if (!function_exists(“system_form_install_select_profile_form_alter“)) { function system_form_install_select_profile_form_alter(&$form, $form_state) { foreach ($form['profile'] as $key => $element) { $form['profile'][$key]['#value'] = ‘nome_profilo'; } } } Prima di procedere con la creazione delle configurazioni del nostro profilo andiamo a configurare dei file .make, che sono dei file utilizzati dal comando drush make e che ci permetteranno di scaricare tutti i moduli, temi, librerie e patch che andremo poi ad abilitare nel nostro profilo. All’interno del nostro profilo andiamo a creare una cartella makefiles e dentro creiamo il file nome_profilo.make così configurato: ; This file is the main build file for your project api = 2 core = 7.x ; Core projects[] = “drupal“ ; It's possible to fetch a specific version of Drupal or it's modules ;projects[drupal][download][type] = git ;projects[drupal][download][url] = http://git.drupal.org/project/drupal.git ;projects[drupal][download][branch] = 7.x ;projects[drupal][download][tag] = ;projects[drupal][download][revision] = ; Include all contrib modules includes[] = “modules.make“ ; Include all development modules includes[] = “development.make“ ; Include patches to apply to core and contrib ;includes[] = “patches.make“ ; Include external libraries includes[] = “libraries.make“ ; Include themes includes[] = “themes.make“ In questo modo andiamo a dire al comando drush make di scaricare l’ultima versione di Drupal 7 da git, e poi attraverso l’inclusione degli altri make file andrà a gestire e varie sezioni, che andiamo ad analizzare. Nei file modules.make e development.make andiamo a scaricare i moduli, abbiamo pensato a una suddivisione logica tra quelli che servono realmente al sito e quelli per lo sviluppo. La sintassi per indicare a drush make di scaricare un modulo è molto semplice, si definisce con due righe, per esempio per scaricare il modulo features definiamo: projects[features][version] = “2.7“ projects[features][subdir] = “contrib“ La prima indica la versione del modulo da scaricare, la seconda la sottocartella, noi usiamo lo standard Drupal che divide i moduli in cartelle contrib per i plugin esistenti, custom per i nostri moduli custom e features per le nostre features. In maniera analoga in themes.make andiamo a indicare i temi da scaricare, solitamente però è solo uno: projects[bootstrap][type] = “theme“ projects[bootstrap][version] = “3.0“ projects[bootstrap][subdir] = “contrib“ L’unica differenza coi moduli è che indichiamo appunto che è un tema. Oltre a moduli e temi possiamo anche scaricare librerie: libraries[ckeditor][directory_name] = “ckeditor“ libraries[ckeditor][type] = “library“ libraries[ckeditor][destination] = “libraries“ libraries[ckeditor][download][type] = “get“ libraries[ckeditor][download][url] = “http://download.cksource.com/CKEditor/CKEditor/CKEditor%204.5.4/ckeditor_4.5.4_standard.zip“ In questo caso indichiamo come deve essere rinominata la cartella della libreria e il metodo per il download. Possiamo inoltre applicare delle patch durante l’esecuzione di drush make, sia creandola noi projects[modulo_da_patchare][patch][] = ‘../patches/my-patch.patch’ che importandola da drupal.org projects[field_collection][patch][] = “https://www.drupal.org/files/issues/field-collection-2599248-2.patch“ Quindi ricapitolando, abbiamo creato un profilo con dentro un numero molto limitato di file, con all’interno tutti i moduli, temi, librerie e patch da scaricare, con il grande vantaggio che se vogliamo versionare il codice avremo un repository molto leggero (ovviamente configurando il file gitignore a includere solo la cartella col nostro profilo). Ora se proviamo a lanciare il comando: drush make profiles/nome_profilo/makefiles/nome_profilo.make vediamo che verrà scaricato il core di Drupal e tutte le configurazioni che siamo andati a definire le troviamo sotto la cartella sites/all come nei soliti progetti Drupal. Prima di passare allo step successivo possiamo indicare nel nome_profilo.info tutti i moduli da abilitare di default definendo le dipendenze. Fatto ciò installiamo Drupal con il wizard standard selezionando il nostro profilo, in modo da installare tutte le dipendenze definite nel .info. Arrivati a questo punto possiamo fare tutte le configurazioni che vogliamo, come per esempio definire ruoli e permessi, creare content type standard come per esempio news, banner, creare profili CKeditor e text formats, etc. Io consiglio un set di features da creare: 1. Module loader, feature dove andare ad aggiungere dipendenze su nuovi moduli di qualsiasi tipo che verranno creati/aggiunti nel corso del progetto 2. User, feature dove andare a salvare ruoli e permessi. 3. Core, feature dove salvare tramite strongarm variabili di configurazione, come per esempio i pattern di pathauto, text formats, CKeditor profiles e in generale tutte le configurazioni che ci servono. 4. i18n, feature simile a module loader che include tutti i moduli necessari per le traduzioni. Preferisco tenerla separata perché non tutti i progetti ne hanno bisogno. Una volta create le features e copiati i moduli custom andiamo ad aggiungere la dipendenza della feature module loader nel profilo, per poi aggiungere tutti i restanti moduli come dipendenza in questa feature. Oltre alle feature possiamo anche includere nel nostro profilo un tema base, con tool come sass o gulp già impostati, oppure moduli custom che consideriamo utili su tutti i progetti. Quindi ricapitolando gli step per creare il nostro profilo sono: 1. Creare file .info e .profile 2. Creare i file make che ci permettono di scaricare moduli, temi, librerie e patch 3. Abilitare tutte le dipendenze necessarie nel file .info 4. Installare il nostro profilo 5. Creare feature, moduli custom, un tema base in base alle nostre esigenze 6. Versionare solo la cartella profiles/nome_profilo sul nostro repository. In questo modo dal prossimo progetto scaricando il vostro profilo, lanciando drush make e installando Drupal con il vostro profilo avrete tutte le configurazioni base di cui avete bisogno.