Qual é a melhor maneira de remover um campo do Drupal 7 de um tipo de conteúdo definido por meio da GUI? Eu quero usar hook_update_N para que as alterações possam ser propagadas para vários servidores após a execução do update.php. No entanto, não consigo encontrar uma solução. db_drop_table () faria sentido para mim para esquemas definidos personalizados, mas não para um tipo / campo de conteúdo definido por meio da GUI.
21
Respostas:
Existem duas funções da API para excluir campos:
field_delete_field
Para excluir o campo inteiro (todas as instâncias do campo)field_delete_instance
Para excluir apenas uma instância de um campo - é assim que ele é anexado a uma entidade.Se você não deseja reutilizar o campo, pode ser um pouco mais limpo excluir o campo inteiro em vez de excluir apenas a instância dele no tipo de conteúdo em questão. Somente você pode ser o juiz disso.
fonte
Sim, field_delete_instance () é a função para excluir instâncias de campo.
Observe que
field_delete_instance()
chama automaticamentefield_delete_field()
se não houver instâncias remanescentes; portanto,field_delete_instance()
é provavelmente tudo o que você precisará._update_7000_field_delete_instance()
foi projetado para as principais funções de atualização. Exemplo: na função de atualizaçãox_update_7000()
, você está usandofield_delete_instance()
. Entãox_update_7001()
, você muda a{field_config}
tabela de uma maneira inconsistente efield_delete_instance()
obviamente também precisa ser alterada.Mas
x_update_7000()
a chamada de agorafield_delete_instance()
resultaria em um erro porque a tabela ainda está na estrutura antiga. No entanto, a situação dos módulos contribuídos é diferente, pois eles sempre devem ser executados após todas as atualizações principais e, portanto, precisam trabalhar com a versão principal mais recente.Mas, esse é um padrão que você pode querer usar para suas próprias funções de API que você está usando nas funções de atualização.
Além disso, essas funções _update não executam ganchos porque o resultado não é previsível (por exemplo, porque o módulo para o qual a atualização é executada pode estar desativado).
fonte