Tengo una lista de nodos no publicados, creados con el módulo Vistas . Me gustaría que una tarea se ejecute 3 veces al día, a horas específicas. Cada vez que se ejecuta la tarea, solo se debe publicar uno de los nodos de la lista. ¿Cómo puedo hacer esto?
Pasos que he intentado
Programador
El módulo Programador requiere que especifique la hora exacta en que desea que se publique el nodo. Esto lo hace complicado, ya que tendría que resolver cuándo se supone que se publicará cada nodo.
Vistas Operaciones masivas + Reglas + Programador de reglas
Con el módulo de Operaciones masivas de Vistas , puede crear una lista de Nodos que están expuestos al módulo Reglas . Las reglas pueden actuar en la lista y publicar el nodo en la lista. Puede indicar a las Reglas que solo publiquen un número específico de nodos.
Esto funciona perfectamente Excepto que no parece posible programar la Regla para que se ejecute 3 veces al día.
Puede vincular la Regla al trabajo Cron del sitio principal, pero esto no parece muy preciso ya que el trabajo Cron podría ejecutarse más de 3 veces.
Hay un módulo de Programador de reglas (un submódulo de Reglas), pero no parece que pueda usar esta condición de Reglas. Tampoco parece haber una manera de especificar el tiempo de ejecución.
Programador de trabajos
Esto le permite establecer una hora, pero no parece integrarse con Reglas o Vistas .
Respuestas:
Uso de módulos VBO, Reglas y Regulador de Horario
Acerca de su enfoque utilizando los módulos Vistas Bulk Operations (VBO) , Reglas y planificador de Reglas (submódulo de Reglas ), para el que escribió " no parece posible programar la Regla para que se ejecute 3 veces al día ": eso me parece Enfoque válido "a".
Lo que realmente necesita hacer es una variación menor de lo que se explica en el tutorial Tareas por hora utilizando el planificador de reglas : en su caso, debe usar un desplazamiento de 8 horas (en lugar de solo 1).
Y como se explica también en ese tutorial: inicialmente ejecute el componente manualmente. (a partir de entonces, cada 8 horas, la regla se ejecutará nuevamente).
Usar módulos Reglas y Reglas una vez al día
Hay un módulo bastante nuevo relacionado con las reglas, es decir, el módulo " Reglas una vez por día ". Así es como funciona (según el comentario en el número 2495775 , del propietario del módulo):
La forma en que entiendo / leo esto (aunque todavía no he experimentado con esto) es así:
Entonces, al crear 3 reglas similares, podría hacer que 1 de ellas corra alrededor de (digamos) 6 pm, otra alrededor de las 2 pm y la más rápida a las 10 pm
PD: Supongo que esta pregunta es sobre D7.
fuente
stringtotime()
. Si las "reglas una vez al día" se ejecutaran a medianoche y quisiera que mi regla se ejecutara a las 6 p.m., ¿+18 hours
sería la forma correcta de escribir elstringtotime
comando?Puede lograr esto usando un poco de codificación.
Una vista que enumera todos los nodos que se publican para la programación. Si también aplica DraggableViews , puede permitir a los administradores reordenar los nodos arrastrando y soltando, lo que siempre es bueno.
Una función PHP personalizada
publishdaily_get_top_node()
que ejecuta la vista anterior y devuelve el NID para el nodo superior. Recomendaría poner esto en un mini módulo personalizado.Una regla que se activa en la ejecución cron y comprueba si es hora de publicar un nuevo nodo (por ejemplo, verificando si el tiempo está entre 00.00 y 00.15, dependiendo de la frecuencia con la que se ejecuta su cron). Si es el momento, entonces dispara la acción 'nodo de carga' y usa
publishdaily_get_top_node()
para cargar el NID. Luego publica el nodo cargado.Si desea hacerlo aún más limpio, escriba un complemento de Reglas en lugar de solo una función PHP.
Si lo desea menos limpio, escriba la función directamente en una acción para ejecutar código PHP arbitrario.
Referencia
fuente
checking if the time is between 00.00 and 00.15
¿Cómo verificaría el tiempo en las reglas? Gracias.Configuración de trabajos cron utilizando el comando cron en los momentos especificados que desee.
Cree un módulo para implementar hook_cron (). Para actualizar su primer nodo como
$node->status = 1
.$ nodo-> estado = 0, significa no publicado.
$ nodo-> estado = 1, significa publicado.
Puede usar views_get_view () para obtener su nid de nodo
fuente
Ya sea que use una regla o código para publicar un solo nodo desde la parte superior de su vista, creo que la forma más fácil de programarlo es usar Ultimate Cron .
Establezca el programador en Crontab y para la tarea específica puede decirle exactamente cuándo desea que se ejecute. Por ejemplo, si quieres 8am, 12 del mediodía y 4pm, puedes hacer la regla:
Más información:
Elysia Cron parece permitir tareas cron personalizadas, que pueden permitirle apuntar a una regla específica (tal vez a través del código php).
fuente
Cree una regla de la siguiente manera:
En / admin / config / workflow / rules / components / add
Cree un "conjunto de acciones": Nombre = No publicar variables de contenido: Tipo de datos = Etiqueta de nodo = Nodo Nombre de máquina = nodo -Continuar-
En / admin / config / workflow / rules Cree una "regla": Nombre = Regla no publicada Reaccionar en evento = Nodo> Después de guardar contenido nuevo Restrinja por tipo = su tipo de contenido -Guardar-
Es decir, no es necesario filtrar el contenido al crear el componente ni agregar una condición de tipo de contenido en la regla.
Además, verifique la configuración cron de su sitio web desde Admin >> Configuración >> Sistema >> Cron (admin / config / system / cron)
Avíseme si tiene alguna pregunta o inquietud al respecto.
fuente