Respostas:
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_foo
e field_data_field_foo
.
O valor para a coluna é um nome de máquina definido como a coluna format
na filter_format
tabela. 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';
para cada campo que precisa ser alterado.
Você pode determinar o new_format
valor aqui: http://YOURSITE.com/admin/config/content/formats - configure link - número ou string no URL é o seu new_format.
Limpar cache após a atualização.
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
1 => filtered_html,
2 => full_html,
3 => 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).
Para mim, o seguinte funcionou:
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
Você pode usar o seguinte código, se você tiver o entity.module instalado.
// I'm using node_save($node);
$wrapper = entity_metadata_wrapper('node', $node->nid);
$wrapper->body->set(array('value' => body_text, 'format'=>'full_html'));
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:
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 [...] 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
!):
field_cache_clear();
Ou com drush:
drush sqlq "truncate table cache_field;"
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 text
continha 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
!):
cache_clear_all('*', 'cache_filter', TRUE);
Ou com drush:
drush sqlq "truncate table cache_filter;"
field_cache_clear();
depois de mudanças nafield_data_...
efield_revision_...
mesas