web-dev-qa-db-fra.com

Comment puis-je réenregistrer rapidement tous les nœuds de mon site (pour déclencher une règle qui s'active lors de la mise à jour du contenu)?

J'ai fait quelques erreurs en configurant un certain type de contenu sur mon site. Pour corriger ces erreurs, j'ai créé une règle qui effectue certaines actions "lorsque le contenu existant est mis à jour". Cependant, je ne veux pas parcourir mon site et enregistrer à nouveau tous les nœuds manuellement un par un. Existe-t-il un moyen d'utiliser des règles ou des vues d'opérations en bloc pour enregistrer rapidement tous les nœuds?

23
Patrick Kenny

VBO a une action "Execute PHP code". Exécutez-la et entrez "node_save ($ entity);" (sans les guillemets) dans la zone de texte. Cela fera l'affaire, tout en gérant le délais d'attente pour vous.

22
Bojan Zivanovic

Je ne connais pas les règles ou le VBO, mais vous pouvez utiliser un extrait de code court pour obtenir le même résultat:

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

Si vous avez beaucoup de nœuds qui pourraient prendre un peu de temps, donc si votre serveur le permet, ce serait une bonne idée de prolonger la limite de temps au début de ce code, peut-être à illimité s'il s'agit d'un seul :

set_time_limit(0);
14
Clive

Vous pouvez utiliser la fonction node_mass_update () :

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

C'est très bien car vous n'avez pas besoin de vous soucier du délai. Le processus par lots pour la mise à jour des nœuds démarre automatiquement s'il y a plus de 10 nœuds.

12
milkovsky

Mise à jour: je viens de créer Resave All Nodes . Pour l'instant, il ne contient qu'un formulaire pour déclencher un processus par lots pour réenregistrer tous les nœuds des types de nœuds sélectionnés. Actuellement en alpha. Je prévois d'ajouter une commande Drush (bêta) et quelques tests (stables) également.

Drupal Resave All Nodes form screenshot


Il y a Resave Nodes . Il est destiné à être utilisé sur des courses cron. Mais vous pouvez également le déclencher manuellement. Choisissez simplement les nœuds du type de contenu à réenregistrer.

Avant de pouvoir exécuter la réenregistrement manuel en cliquant sur "Réenregistrer les nœuds maintenant", vous devez une fois "Enregistrer la configuration" (choisissez un type de cron et un type de contenu).

5
leymannx

Accédez à admin/content et filtrez par votre type de contenu - publié uniquement. Sélectionnez tout, puis sélectionnez "modifier la valeur" dans la liste déroulante des opérations. Cliquez sur "exécuter". Sur la page suivante, sélectionnez "statut" dans les propriétés et laissez publié. Cliquez sur 'suivant' Tous les nœuds publiés seront réenregistrés sans changement.

Répétez l'opération pour les nœuds non publiés (mais sélectionnez non publié comme propriété).

2
Robb Davis