Database - Ritoccare i contenuti da query
Capita se mettete mano ai contenuti di siti fatti da altri con l'ausilio di un CMS (Joomla! o WordPress) che sia, che siate costretti di mettere mano a ciò che ha fatto nel corso del tempo l'ultimo utente.
A me è capitato con il sito planetkoi.com (ora non più online) di dover mettere mano a contenuti vecchi di 2 anni, accumulati all'interno della precedente versione del del CMS Joomla!, cioè la 2.5.
Dopo aver aggiornato il sito a Joomla! 3 e aver sostituito il vecchio template con uno più moderno e appetibile dal punto di vista dell'utenza, mi sono imbattuto in errori grossolani, come ad esempio l'uso errato di codice HTML nell'inserimento delle descrizioni dei prodotti del componente e-commerce JoomShopping.
Alcuni tag "DIV" erano stati aperti e non chiusi, probabilmente a causa di uno sciagurato copia/incolla: il risultato? I prodotti a frontend si sormontavano rendendo in alcuni casi indistinguibile il contenuto del prodotto stesso.
Tenuto conto che il cliente aveva utilizzato lo stesso modello per almeno un centinaio di prodotti, se avessi dovuto agire prodotto per prodotto sarei impazzito e magari avrei commesso anche io errori grossolani che poi mi sarebbero costati moltissimo in termini di tempo nella ricerca e correzzione...
Di certo, per quanto il computer sia stupido (e lo è), se gli si dice esattamente cosa fare lui lo fa in modo preciso e senza compiere errori. Tutto sta nel dare le giuste istruzioni, altrimenti vi potreste trovare con qualche spiacevole sorpresa.
Questo articolo è dunque dedicato al ritocco, aggiornamento e modifica di contenuti multipli e che seguono uno schema comune all'interno di un database attraverso le query.
Ovviamente, potete applicare queste informazioni a qualunque CMS che utilizzi MySql, visto che si tratta di entrare in qualsiasi database manager come phpMyAdmin e digitare l'istruzione per la tabella specifica per poi mandarla in esecuzione (incrociando le dita).
Backup del sito web e del database
Prima di inziare, come sempre, consiglio caldamente di fare il backup, se non dell'intero sito, almeno del database. Così se non ottenete ciò che volete e ne rovinate i contenuti almeno avrete l'opportunità di ripristinarlo e tornare indietro senza dover ricorrere a manovre impossibili.
Per Joomla! esiste lo strumento Akeeba Backup pratico, semplice e gratuito.
Anche per WordPress Akeeba ha creato uno strumento ad-hoc cioé Akeeba Backup for Wordpress. Tuttavia esistono altri tools come Duplicator che fanno la stessa identica cosa egregiamente e gratuitamente.
Ma ora torniamo a noi, ossia:
Come fare a trovare e sostituire testo in un campo di una tabella MySQL
Il mio caso specifico era quello di ritoccare il contenuto descrittivo di centinaia di prodotti all'interno di un componente e-commerce. Ma i campi di applicazione di questo tipo di query sono molteplici. Pensate all'aggiornamento di sigle o codici aziendali, la ragione sociale di un'azienda, delle url o email cambiate e da aggiornare, errori ortografici o tag usati impropiamente (il mio caso), etc.
Con questo metodo potreste anche ritoccare i contenuti di articoli e post di Joomla! (tabella content) o WordPress.
funzione REPLACE
Per sostituire solo una parte del testo contenuto in uno dei campi di una tabella di un database MySql, esiste l'utilissima funzione REPLACE:
UPDATE prefix_nometabella SET `campotabella` = REPLACE(`campotabella`, 'testo da sostituire', 'testo sostitutivo');
Ma vediamola nel dettaglio:
- UPDATE prefix_nometabella è l'istruzione SQL di aggiornamento di MySql sulla tabella specificata.
- prefix_ è il prefisso della tabella Joomla! o WordPress che avete scelto (o è stato scelto) al momento dell'installazione del CMS.
- SET `campotabella` indica all'istruzione UPDATE che il campo su cui operare è quello specificato.
- = REPLACE(`campotabella`, 'testo da sostituire', 'testo sostitutivo') indica all'istruzione che dovrà essere sostituito all'interno di `campotabella` qualsiasi ricorrenza di 'testo da sostituire' con 'testo sostitutivo'.
(il mio) Esempio pratico:
Nel caso sopra descritto, la query da me utilizzata era simile a questa:
UPDATE `jos_jshopping_products` SET `description_it-IT` = REPLACE(`description_it-IT`, '<div style="text-align: justify;">', '')
L'intento era quello di eliminare tutti i tag DIV aperti e non chiusi all'interno della descrizione dei prodotti (campo description_it-IT). Il risultato? Un successo!
Semplice no? Questa semplice operazione vi consentirà di risparmiare un sacco di tempo (o almeno lo spero) e grattcapi 'automatizzando' procedure ripetitive che altrimenti dovreste fare a mano record per record.
Sperando che l'articolo possa essere utile ai lettori di questo articolo, auguro a tutti loro un buon replacement...
Se avete commenti o suggerimenti al riguardo, scrivetemi attraverso l'apposito form contatti del blog o commentate l'articolo qui sotto.