Eu tenho um tipo de conteúdo existente com vários nós. Acabei de adicionar um novo campo booleano com o valor padrão "off".
No entanto, até salvar novamente cada nó, o valor padrão não está definido, portanto, uma visualização que deve mostrar apenas os nós em que o novo campo está usando o valor padrão fica vazia no momento.
Como posso atualizar os nós existentes, criados antes da adição do campo, para definir esse campo com seu valor padrão?
Respostas:
Infelizmente, não há uma maneira muito simples de fazer isso (além do VBO / rules), mas aqui está o código que eu uso nas funções de atualização nos arquivos de instalação do meu módulo personalizado quando preciso preencher previamente os valores do campo para um determinado tipo de nó após adicionar um novo campo ( neste caso, nós de 'página'):
Outro método manual mencionado nesta resposta usa EntityFieldQuery e carrega / salva cada nó. Mais Drupal-y, mas com menos desempenho ... (requer uma carga completa do nó e operação de salvamento para cada nó!).
fonte
entity_get_controller('node')->resetCache($nids);
- caso contrário uma posteriornode_load()
pode carregar dados obsoletos do cache, e qualquernode_save()
desse objeto iria escrever isso de volta dados obsoletos no banco de dados.A melhor aposta é diretamente no MySQl. As tabelas ficariam assim:
Se você olhar para eles, é bem direto - você precisa de mim para começar com a aparência da consulta ou você está bem a partir daqui?
fonte
Apenas tente a lógica abaixo. é muito mais rápido e passa por todas as implementações de gancho também. mais detalhes . você pode escrever uma consulta db_select direta e simples para obter todos os nids e fazer um loop com esse código de amostra.
fonte
usando sql, considerando que os nós com o valor do campo não definido são
field_data_field_pr_choix_du_document, sendo a tabela correspondente ao meu campo e contendo um valor nominal de entrada definido com o ID da entidade referente ao nó
eu fiz usando SQL insert ... selecione sintaxe
https://dev.mysql.com/doc/refman/5.5/en/insert-select.html
fonte
Instale e ative o módulo Views Bulk Operations e crie uma exibição com uma exibição de página.
Adicionar => Operações em massa: campo Conteúdo (Conteúdo) em exibição.
Referir
Selecione os campos que você deseja definir o valor padrão.
Salve a visualização e vá para a página que ela criou. Se você tiver mais de uma página de resultados, poderá selecionar todos os itens na página atual, todos os itens em todas as páginas ou pode marcar manualmente as caixas correspondentes a nós individuais. Pelo menos uma caixa de seleção deve estar marcada para continuar.
Agora você define o valor padrão e o salva.
fonte
Encontrei uma maneira fácil de atualizar campos no tipo de conteúdo com este módulo: Padrões de campo
Veja a captura de tela. Você pode atualizar o conteúdo existente com os valores padrão ou manter os valores existentes.
Eu testei no D7 e funciona.
fonte