J'ai une liste de nœuds non publiés, créés avec le module Vues . J'aimerais qu'une tâche soit exécutée 3 fois par jour, à des heures spécifiées. Chaque fois que la tâche s'exécute, un seul des nœuds de la liste doit être publié. Comment puis-je faire ceci?
Étapes que j'ai essayées
Planificateur
Le module Planificateur vous oblige à spécifier l'heure exacte à laquelle vous souhaitez que le nœud soit publié. Cela complique les choses, car je devrais déterminer quand chaque nœud est censé être publié.
Vues Opérations en bloc + Règles + Planificateur de règles
Avec les vues en vrac Opérations module, vous pouvez créer une liste de nœuds qui sont exposés au règlement module. Les règles peuvent ensuite agir sur la liste et publier le nœud sur la liste. Vous pouvez demander à Rules de publier uniquement un nombre spécifique de nœuds.
Cela fonctionne parfaitement. Sauf qu'il ne semble pas possible de planifier l'exécution de la règle 3 fois par jour.
Vous pouvez lier la règle à la tâche Cron du site principal, mais cela ne semble pas très précis car la tâche Cron pourrait s'exécuter plus de 3 fois.
Il existe un module Rules Scheduler (un sous-module de Rules), mais il ne semble pas que vous puissiez utiliser cette condition Rules. Il ne semble pas non plus être possible de spécifier la durée de fonctionnement.
Planificateur de travaux
Cela vous permet de définir une heure, mais elle ne semble pas s'intégrer aux règles ou aux vues .
Réponses:
Utilisation des modules VBO, Rules and Rules Scheduler
À propos de votre approche à l'aide des modules Views Bulk Operations (VBO) , Rules and Rules Scheduler (sous-module de Rules ), pour lesquels vous avez écrit " il ne semble pas possible de planifier l'exécution de la règle 3 fois par jour. ": Cela me semble "une" approche valable.
Ce que vous devez réellement faire est une variation mineure de ce qui est expliqué dans le didacticiel Tâches horaires à l'aide du planificateur de règles : dans votre cas, vous devez utiliser un décalage de 8 heures (au lieu de 1).
Et comme expliqué également dans ce didacticiel: exécutez initialement le composant manuellement. (à partir de ce moment, toutes les 8 heures, la règle sera à nouveau exécutée).
Utilisation des modules Règles et règles une fois par jour
Il existe un module relativement nouveau lié aux règles, à savoir le module " Rules Once per Day ". Voici comment cela fonctionne (selon le commentaire du numéro 2495775 du propriétaire du module):
La façon dont je comprends / lis cela (mais je ne l'ai pas encore expérimenté) est la suivante:
Donc, en créant 3 règles similaires, vous pourriez en avoir une (disons) 18 heures, une autre vers 14 heures et la dernière à 22 heures.
PS: Je suppose que cette question concerne D7.
la source
stringtotime()
. Si «les règles une fois par jour» s'exécutaient à minuit et que je voulais que ma règle s'exécute à 18 h, serait-+18 hours
ce la bonne façon d'écrire lastringtotime
commande?Vous pouvez y parvenir en utilisant du codage.
Une vue qui répertorie tous les nœuds qui sont publiés pour la planification. Si vous appliquez également DraggableViews, vous pouvez laisser les administrateurs réorganiser les nœuds par glisser-déposer, ce qui est toujours agréable.
Une fonction PHP personnalisée
publishdaily_get_top_node()
qui exécute la vue ci-dessus et renvoie le NID du nœud supérieur. Je recommanderais de mettre cela dans un mini-module personnalisé.Une règle qui est déclenchée lors de l'exécution de cron et vérifie s'il est temps de publier un nouveau nœud (par exemple en vérifiant si l'heure est comprise entre 00.00 et 00.15 - selon la fréquence à laquelle votre cron s'exécute). S'il est temps, il déclenche l'action 'charger le nœud' et utilise
publishdaily_get_top_node()
pour obtenir le NID à charger. Il publie ensuite le nœud chargé.Si vous voulez le rendre encore plus propre, vous écrivez un plugin Rules au lieu d'une simple fonction PHP.
Si vous le souhaitez moins propre, vous écrivez la fonction directement dans une action pour exécuter du code PHP arbitraire.
Référence
la source
checking if the time is between 00.00 and 00.15
Comment vérifieriez-vous l'heure dans les règles? Merci.Configuration des tâches cron à l'aide de la commande cron à des moments spécifiés.
Créez un module pour implémenter hook_cron (). Pour mettre à jour votre premier nœud en tant que
$node->status = 1
.$ node-> status = 0, signifie non publié.
$ node-> status = 1, signifie publié.
Vous pouvez utiliser views_get_view () pour obtenir votre nid de noeud
la source
Que vous utilisiez une règle ou un code pour publier un seul nœud du haut de votre vue, je pense que la façon la plus simple de le planifier est d'utiliser Ultimate Cron .
Définissez le planificateur sur Crontab et pour la tâche spécifique, vous pouvez lui dire exactement quand vous voulez qu'il s'exécute. Par exemple, si vous voulez 8h, 12h et 16h, vous pouvez faire la règle:
Informations complémentaires:
Elysia Cron semble autoriser des tâches cron personnalisées, ce qui peut vous permettre de cibler une règle spécifique (peut-être via le code php).
la source
Créez une règle comme suit:
Dans / admin / config / workflow / rules / components / add
Créez un "ensemble d'actions": Nom = Annuler la publication des variables de contenu: Type de données = Node Label = Node Nom de la machine = node -Continue-
Dans / admin / config / workflow / rules Créez une "règle": Name = Unpublish Rule React on event = Node> Après avoir enregistré le nouveau contenu Restreindre par type = votre type de contenu -Save-
En d'autres termes, il n'est pas nécessaire de filtrer le contenu lors de la création du composant ni d'ajouter une condition de type de contenu dans la règle.
De plus, vérifiez les paramètres cron de votre site Web dans Admin >> Configuration >> Système >> Cron (admin / config / system / cron)
Faites-moi savoir si vous rencontrez des questions / préoccupations à ce sujet.
la source