Category Archives: Codice

Modifica massiva delle opzioni flexform dei plugin di TYPO3 con SQL Replace

A volte è necessario modificare alcune opzioni dei plugin di TYPO3 disposti su centinaia di pagine.

TYPO3 plugin flexform example

Ecco come fare per agire contemporaneamente su alcune centinaia di record con una Query SQL.

Prima di tutto è necessario trovare un contenuto di tipo plugin dentro le pagine, uno di quelli da modificare, segnatevi l’id, servirà dopo.

Installare phpmyadmin o un altro strumento per accedere al db

La tabella interessata è la tt_content, Il campo è pi_flexform, che contiene tutte le configurazioni in formato XML, poiché molti plugin usano il campo pi_flexform per le configurazioni è possibile raffinare la select con il campo list_type.

Eseguire una SELECT per identificare il contenuto al punto uno:

SELECT * FROM `tt_content` WHERE `uid` = <strong>590</strong>

Modificare il risultato in phpmyadmin e trovate nel campo pi_flexform il valore che vi interessa, ad esempio:

<field index="accordionClosed">
                    <value index="vDEF">0</value>
                </field>

Che per esempio sarà da cambiare in

<field index="accordionClosed">
                    <value index="vDEF">1</value>
                </field>

Ora è necessario scrivere la query per l’update, un buon consiglio è scrivere prima una select, in quanto con i vari a capo, spazi e tab non è detto che funzioni al primo colpo.

SELECT * FROM `tt_content` WHERE `pi_flexform` LIKE '%<field index="accordionClosed">
                    <value index="vDEF">0</value>
                </field>%'

Se la query SELECT ha trovato i risultati attesi si può procedere con la UPDATE, altrimenti è necessario controllare i tab, spazi e a capo della condizione WHERE.

Nel mio esempio ho tolto l’ultima riga perché falliva:

SELECT * FROM `tt_content` WHERE `pi_flexform` LIKE '%<field index="accordionClosed">
                    <value index="vDEF">0</value>%'

e ho aggiunto la condizione sul campo list_type per ottimizzare la select

SELECT * FROM `tt_content` WHERE `pi_flexform` LIKE '%<field index="accordionClosed">
                    <value index="vDEF">0</value>%'
AND `list_type` LIKE 'jfmulticontent_pi1'

Ed ecco l’UPDATE con REPLACE

UPDATE `tt_content` SET `pi_flexform` = REPLACE(`pi_flexform`, '
                    <field index="accordionClosed">
                    <value index="vDEF">0</value>
                </field>', '<field index="accordionClosed">
                    <value index="vDEF">1</value>
                </field>') WHERE `list_type` LIKE 'jfmulticontent_pi1'