Como posso salvar novamente rapidamente todos os nós do meu site (para acionar uma regra que é ativada na atualização de conteúdo)?

24

Cometi alguns erros ao configurar um determinado tipo de conteúdo no meu site. Para corrigir esses erros, fiz uma regra que executa algumas ações "quando o conteúdo existente é atualizado". No entanto, não quero acessar meu site e salvar todos os nós manualmente, um por um. Existe uma maneira de usar as Operações em Massa de Regras ou Exibições para salvar rapidamente todos os nós?

Patrick Kenny
fonte

Respostas:

22

O VBO possui uma ação "Executar código PHP". Execute-o e insira "node_save ($ entity);" (sem as aspas) na caixa de texto. Isso fará o truque, enquanto lida com os tempos limite para você.

Bojan Zivanovic
fonte
11
Ahh, muito mais rápido :)
Clive
5
Existe uma opção no VBO para "Salvar conteúdo", que fará o mesmo sem precisar escrever seu próprio PHP.
stevenw00
Não consegui encontrar a opção "Salvar conteúdo", mas o método php que você mencionou funcionou muito bem! Obrigado!
Hockey2112
Tentei os métodos php e vbo sem sucesso. No meu caso, apenas um manual salvar atualiza corretamente os rótulos para um campo de tabela. Estranho ...
Bisonbleu 28/10
14

Eu não sei sobre regras ou VBO, mas você pode usar um snippet de código curto para obter o mesmo resultado:

$nids = db_query('SELECT nid FROM {node}')->fetchCol();
foreach (node_load_multiple($nids) as $node) {
  node_save($node);
}

Se você tiver muitos nós que podem demorar um pouco, por isso, se o servidor permitir, seria uma boa idéia estender o limite de tempo no início desse código, talvez ilimitado, se for o caso. :

set_time_limit(0);
Clive
fonte
12

Você pode usar a função node_mass_update () :

module_load_include('inc', 'node', 'node.admin');
$nids = db_query('SELECT nid FROM {node}')->fetchCol();
node_mass_update($nids, array());

É muito bom, pois você não precisa se preocupar com o prazo. O processo em lote para atualização de nós será iniciado automaticamente se houver mais de 10 nós.

milkovsky
fonte
5
Funcionou perfeitamente em mais de 200.000 nós. Lida com o lote para você. Se você tiver o módulo devel ativado, basta colar o código acima na página '/ devel / php'
2pha
11
Solução brilhante, é executado em segundo plano para nenhuma chance de um tempo limite ou matar um desempenho locais
Daniel Waters
5

Atualização: Acabei de criar Salvar todos os nós . Por enquanto, ele contém apenas um formulário para acionar um processo em lote para salvar novamente todos os nós dos tipos de nós selecionados. Atualmente em alfa. Eu pretendo adicionar um comando Drush (beta) e alguns testes (estáveis) também.

Drupal Resave All Nodes formulário screenshot


Existem nós de salvamento novamente . Destina-se a ser usado em execuções cron. Mas você também pode acioná-lo manualmente. Basta escolher quais nós do tipo de conteúdo devem ser salvos novamente.

Antes de executar o salvamento manual novamente, clicando em "Salvar novamente nós agora", uma vez você precisa "Salvar configuração" (escolha um tipo de cron e tipo de conteúdo).

leymannx
fonte
2

Vá para admin / content e filtre por seu tipo de conteúdo - publicado apenas. Selecione tudo e selecione "alterar valor" na lista suspensa de operações. Clique em 'executar'. Na próxima página, selecione 'status' nas propriedades e deixe publicado. Clique em 'próximo' Todos os nós publicados serão salvos novamente sem alterações.

Repita para nós não publicados (mas selecione não publicado como a propriedade).

Robb Davis
fonte