Vou prefaciar esta resposta dizendo que fazer isso em massa representa um risco potencial à segurança, especialmente se você estiver alterando o formato para um conjunto de filtros mais tolerante. Os formatos de texto modificam a saída do campo durante a exibição, não durante o salvamento. Por exemplo, qualquer HTML ou PHP previamente escapado enviado a um campo será renderizado / executado diretamente se você definir acidentalmente ou intencionalmente o filtro como HTML completo ou código PHP.
É por esse motivo que o Drupal não atualiza automaticamente todos os nós existentes quando você altera um formato de texto. O comportamento dos formatos de texto em cenários semelhantes ainda é um problema em aberto .
Então, novamente: cuidado, existem dragões.
Com isso dito, cada campo armazena o texto como uma coluna denominada field_foo_format, onde field_fooé o nome da máquina do campo. Você precisará atualizar essa coluna nas tabelas field_revision_field_fooe field_data_field_foo.
O valor para a coluna é um nome de máquina definido como a coluna formatna filter_formattabela. Portanto, atualizar todos os campos seria uma questão como:
UPDATE field_revision_foo SET field_foo_format ='new_format';
UPDATE field_data_foo SET field_foo_format ='new_format';
Acabei de encontrar a mesma situação que Morten fez aqui, com uma atualização D6 => D7 que aparentemente não terminou os formatos de entrada.
Adotou uma abordagem mais grosseira do que as respostas já aqui e escreveu um módulo que percorreu o esquema do banco de dados e atualizou todas as colunas que contêm a string 'format', substituindo os valores de formato D6 (1, 2, 3) pelos nomes de máquinas D7 ( filtered_html, full_html, plain_text).
Também pode tentar reescrever os campos denominados 'formato' (por exemplo, "formato_de_data", mas se você tiver um formato de data com o valor '2', esse é o seu problema).
update `field_revision_body`set`body_format`='new_body_forma' WHERE `bundle`='node_type'
update `field_data_body`set`body_format`='new_body_forma' WHERE `bundle`='node_type'
Claro que você deve alterar o new_body_forma e o node_type
Presumivelmente, você desejará saber quais campos precisam ser atualizados, possivelmente para fazer algum log ou verificação dos dados. Para fazer isso, obtenha todos os nomes de tabelas e colunas que contêm uma _formatcoluna:
select distinct TABLE_NAME, column_name
from information_schema.columns
where TABLE_SCHEMA ='my_drupal_database_name'and column_name like '%_format';
Armado com esses dados, você pode criar consultas separadas desses valores. Verifique a saída primeiro; pode ser necessário remover algumas entradas que não pertencem a conteúdo / revisões. Eu recomendo usar um editor capaz de regex para criar as consultas. Transformei os dados em uma select [...] uniondeclaração grande e depois executei consultas de atualização.
O uso dessa abordagem me salvou bastante tempo quando eu precisava atualizar milhares de nós / revisões. Lembre-se de limpar o cache do campo (NÃO coberto por drush cc all!):
field_cache_clear();
Ou com drush:
drush sqlq "truncate table cache_field;"
Removendo também filtro de texto
Se você também estiver retirando um filtro de texto, depois precisará alterar o formato de texto padrão para os CTs que tinham campos que o usavam. Se você não fizer isso, seus usuários receberão mensagens de permissão negada nos campos que usaram o old_format. Eu fiz essa consulta para encontrar os culpados:
select*from field_config_instance where`data` LIKE '%old_format%';
Para fazer as alterações, achei mais fácil usar a interface para visitar cada página de configurações de campo e pressionar Salvar (os dados são armazenados como um botão longo e era difícil de pesquisar e substituir devido aos melhores formatos de injeção de dados do módulo). Até os campos que tinham o processamento de texto definido como Plain textcontinha o formato_ antigo! Para os campos em que o processamento de texto está definido Filtered text (user selects text format), você também precisará selecionar um novo valor padrão e pressionar Salvar.
Você deve limpar o cache do filtro após remover um filtro (novamente, não coberto por drush cc all!):
update field_revision_body set body_format ='full_html' WHERE bundle IN ('book','page');
update field_data_body set body_format ='full_html' WHERE bundle IN ('book','page');
fez o truque para mim. Não se esqueça de limpar caches
field_cache_clear();
depois de mudanças nafield_data_...
efield_revision_...
mesasTente dessa maneira, criando um loop para todos os nós de um determinado tipo:
fonte
Acabei de encontrar a mesma situação que Morten fez aqui, com uma atualização D6 => D7 que aparentemente não terminou os formatos de entrada.
Adotou uma abordagem mais grosseira do que as respostas já aqui e escreveu um módulo que percorreu o esquema do banco de dados e atualizou todas as colunas que contêm a string 'format', substituindo os valores de formato D6 (1, 2, 3) pelos nomes de máquinas D7 (
filtered_html
,full_html
,plain_text
).https://gist.github.com/xurizaemon/9824872
Codificado para suportar o mapeamento de
Também pode tentar reescrever os campos denominados 'formato' (por exemplo, "formato_de_data", mas se você tiver um formato de data com o valor '2', esse é o seu problema).
fonte
Para mim, o seguinte funcionou:
Claro que você deve alterar o new_body_forma e o node_type
fonte
Você pode usar o seguinte código, se você tiver o entity.module instalado.
fonte
Presumivelmente, você desejará saber quais campos precisam ser atualizados, possivelmente para fazer algum log ou verificação dos dados. Para fazer isso, obtenha todos os nomes de tabelas e colunas que contêm uma
_format
coluna:Armado com esses dados, você pode criar consultas separadas desses valores. Verifique a saída primeiro; pode ser necessário remover algumas entradas que não pertencem a conteúdo / revisões. Eu recomendo usar um editor capaz de regex para criar as consultas. Transformei os dados em uma
select [...] union
declaração grande e depois executei consultas de atualização.O uso dessa abordagem me salvou bastante tempo quando eu precisava atualizar milhares de nós / revisões. Lembre-se de limpar o cache do campo (NÃO coberto por
drush cc all
!):Ou com drush:
Removendo também filtro de texto
Se você também estiver retirando um filtro de texto, depois precisará alterar o formato de texto padrão para os CTs que tinham campos que o usavam. Se você não fizer isso, seus usuários receberão mensagens de permissão negada nos campos que usaram o
old_format
. Eu fiz essa consulta para encontrar os culpados:Para fazer as alterações, achei mais fácil usar a interface para visitar cada página de configurações de campo e pressionar Salvar (os dados são armazenados como um botão longo e era difícil de pesquisar e substituir devido aos melhores formatos de injeção de dados do módulo). Até os campos que tinham o processamento de texto definido como
Plain text
continha o formato_ antigo! Para os campos em que o processamento de texto está definidoFiltered text (user selects text format)
, você também precisará selecionar um novo valor padrão e pressionar Salvar.Você deve limpar o cache do filtro após remover um filtro (novamente, não coberto por
drush cc all
!):Ou com drush:
fonte
fez o truque para mim. Não se esqueça de limpar caches
fonte