Come posso salvare di nuovo rapidamente tutti i nodi sul mio sito (per attivare una regola che si attiva all'aggiornamento del contenuto)?


24

Ho commesso degli errori durante la configurazione di un determinato tipo di contenuto sul mio sito. Per correggere questi errori, ho fatto una regola che esegue alcune azioni "quando il contenuto esistente viene aggiornato". Tuttavia, non voglio visitare il mio sito e salvare nuovamente manualmente tutti i nodi uno per uno. Esiste un modo per utilizzare le operazioni in blocco di regole o viste per salvare rapidamente tutti i nodi?

Risposte:


22

VBO ha un'azione "Esegui codice PHP". Eseguilo e inserisci "node_save ($ entity);" (senza virgolette) nella casella di testo. Questo funzionerà, gestendo i timeout per te.


1
Ah, molto più veloce :)
Clive

5
Esiste un'opzione in VBO per "Salva contenuto", che farà lo stesso senza dover scrivere il tuo PHP.
Stevenw00,

Non sono riuscito a trovare l'opzione "Salva contenuto", ma il metodo php che hai citato ha funzionato alla grande! Grazie!
hockey 2112

Ho provato entrambi i metodi php e vbo senza successo. Nel mio caso, solo un manuale Salva aggiorna correttamente le etichette per un campo da tavolo. Strano ...
Bisonbleu,

14

Non conosco le regole o VBO ma potresti usare uno snippet di codice per ottenere lo stesso risultato:

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

Se hai molti nodi che potrebbero richiedere un po 'di tempo, quindi se il tuo server lo consente, sarebbe una buona idea estendere il limite di tempo all'inizio di quel codice, forse a illimitato se questo è unico :

set_time_limit(0);

12

È possibile utilizzare la funzione node_mass_update () :

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

È ottimo in quanto non è necessario preoccuparsi del limite di tempo. Il processo batch per l'aggiornamento dei nodi verrà avviato automaticamente se sono presenti più di 10 nodi.


5
Ha funzionato perfettamente su oltre 200.000 nodi. Gestisce il batch per te. Se hai abilitato il modulo di sviluppo, puoi semplicemente incollare il codice sopra nella pagina '/ devel / php'
2pha

1
Soluzione brillante, funziona in background, quindi nessuna possibilità di timeout o di uccidere una performance del sito
Daniel Waters,

5

Aggiornamento: ho appena creato Ripristina tutti i nodi . Per ora contiene solo un modulo per attivare un processo batch per salvare nuovamente tutti i nodi dei tipi di nodo selezionati. Attualmente in alfa. Ho intenzione di aggiungere un comando Drush (beta) e anche alcuni test (stabili).

Drupal Salva tutti i nodi dallo screenshot del modulo


Ci sono nodi di salvataggio . È inteso per l'uso su cron run. Ma puoi anche attivarlo manualmente. Basta scegliere quali nodi del tipo di contenuto devono essere salvati.

Prima di poter eseguire il resave manuale premendo "Salva nuovamente i nodi ora" devi una volta "Salva configurazione" (scegli un tipo cron e un tipo di contenuto).


2

Vai su admin / contenuto e filtra per tipo di contenuto - solo pubblicato. Seleziona tutto e quindi seleziona "cambia valore" dal menu a discesa delle operazioni. Fai clic su "Esegui". Nella pagina successiva, selezionare "stato" dalle proprietà e lasciare pubblicato. Fai clic su "Avanti". Tutti i nodi pubblicati verranno ripristinati senza modifiche.

Ripetere l'operazione per i nodi non pubblicati (ma selezionare non pubblicato come proprietà).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.