Guida per migrare il modulo image ad imagefield

Guida per migrare il modulo image ad imagefield

Il modulo Drupal image è il plugin storico per la gestione delle immagini e delle gallerie fotografiche per il CMS Drupal. Con il passare del tempo però, sono nate delle soluzioni alternative per gestire degli album di foto all'interno di un sito web. La soluzione che attualmente preferisco è l'uso combinato di CCK con i moduli imagefield, imagecache e l'immancabile views.

Capita spesso che però vecchi siti usino ancora il modulo drupal image, questa è una semplice guida per convertire i nodi di tipo "image" in nodi gestiti con CCK.

Aggiornare i moduli Drupal

La prima operazione è di aggiornare tutti i moduli Drupal installati, in particolar modo il modulo image. La procedura è facile: basta sostituire le cartelle dei moduli con le versioni aggiornate e successivamente eseguire lo script update.php per eventuali aggiornamenti del database.

Installare i moduli Drupal necessari alla gallery

I moduli necessari per la conversione della struttura base sono:

  • CCK
  • imagefield

Mentre gli altri moduli consigliati per la visualizzazione della gallery sono:

  • views
  • imagecache
  • imageapi

Effettuare il backup del database di Drupal

La terza fase è il backup del database Drupal. Raccomando vivamente di non tralasciare questo passaggio. La procedura non sempre funziona al primo tentativo, a volte sono necessari degli aggiustamenti per la propria specifica configurazione oppure si potrebbe sbagliare un passaggio durante il procediemento. Solitamente uso il modulo backup_migrate che permette di salvare velocemente il database man mano che si procede con le varie operazioni.

Creare il tipo di contenuto per le immagini

A questo punto possiamo creare un nuovo tipo di contenuto che, ad esempio, possiamo chiamarlo foto. Al tipo di contenuto foto dobbiamo aggiungere un solo campo di tipo "imagefield" che chiameremo field_image. La cartella (directory) di salvataggio delle immagini dovrà essere la stessa che è stata specificata nella configurazione del modulo image ed il campo deve poter accettare più valori.

Eseguire lo script di migrazione

Dopo aver configurato Drupal si deve eseguire lo script di migrazione che si può scaricare dal sito di Drupal. Questo script va salvato nella radice del sito. Inoltre lo script necessita di una semplice configurazione: è necessario specificare il nome del tipo di contenuto ed il nome del campo che si è creato nel passaggio precedente.

Eseguendo lo script verrà effettuata la migrazione.

Non sempre però lo script funziona correttamente. A volte è necessario ri-eseguire manualmente un paio di query SQL:

INSERT INTO content_type_foto (vid, nid)
  SELECT n.vid, n.nid FROM node n
  INNER JOIN image i ON n.nid = i.nid
  INNER JOIN files f ON i.fid = f.fid
  WHERE n.type = 'foto' AND i.image_size = '_original'

e

INSERT INTO content_field_image
  (vid, nid, delta, field_image_fid, field_image_list, field_imagefield_data)
  SELECT n.vid, n.nid, 0, f.fid, 1,
    CONCAT('a:1:{s:11:\"description\";s:', CHAR_LENGTH(n.title), ':\"', n.title, '\";}')
  FROM node n
  INNER JOIN image i ON n.nid = i.nid
  INNER JOIN files f ON i.fid = f.fid
  WHERE n.type = 'foto' AND i.image_size = '_original'

Possiamo verificare l'esito della migrazione aprendo i vecchi contenuti di tipo image che sono stati trasformati in foto.

Disinstallare il modulo Drupal image

Dopo aver effettuato la migrazione e verificato che tutto sia funzionato correttamente, possiamo disinstallare il modulo Drupal image.

Nel caso sia abilitato anche il modulo Image gallery, prima di disinstallarlo è consigliabile modificare il file image_gallery.install rimuovendo il codice relativo alla cancellazione del vocabolario assegnato alla galleria fotografica. Altrimenti verranno cancellati tutti i termini usati per taggare le immagini.

Il codice PHP da cancellare è:

if ($vid = variable_get('image_gallery_nav_vocabulary', FALSE)) {
  module_invoke('taxonomy', 'del_vocabulary', $vid);
}

Ultimi ritocchi

La migrazione ora è completata completamente. Manca solamente da configurare l'output della gallery configurando ad esempio delle viste che magari sfruttino imagecache per ridimensionare le immagini.

Fare sempre i backup

Il mio consiglio è di fare un backup del database prima di ogni passaggio in modo da non dover ricominciare dall'inizio in caso di errori.

complimenti, questa è la spiegazione più chiara che fin'ora ho trovato della differenza tra un modo di creare gallery di immagini con il modulo Image o utilizzando un sistema diverso di creazione e gestione dei contenuti con CCK, prima di questo vagavo un pò nel buio cercando di capire a cosa potesse servire ImageField a Image...è forse ora di sviluppare una vera e propria guida a Drupal in italiano? ci sto pensando seriamente...

Grazie Elena :-) Ho solo cercato di riportare nel blog in maniera ordinata alcuni appunti che mi ero segnato in passato. Da quando ho visto il modulo ImageField l'ho subito sfruttato per sviluppare questo tipo di gallerie, mi è sembrato naturale vista la sua integrazione con il modulo views. Spesso con un po' di fantasia i moduli si possono ricombinare per ottenere un sacco di risultati che magari non erano inizialmente previsti.

Ciao!

grazie per la spigazione, è molto interessante. Ho una curiosità al riguardo. Mi trovo nella situazione in cui, tempo fa, scelsi Image per la gestione di alcuni campi immagine, prima di venire a conoscenza di Imagefield. Mi sono reso conto col tempo, però, che Image non è facile da gestire per quanto Imagecache e anche per altre piccole cose.
È possibile, secondo te, convertire i vecchi fields, creti nei vari tipi di contenuto, gestiti da Image in Imagefield?

@Mauro: forse dovresti rileggere l'articolo... parla proprio di quell'argomento :-)