¿Cómo crear una regla de Drupal para verificar (en cron) un campo de fecha y, si se pasa, establecer el campo "estado" en "finalizado"?

Estoy tratando de crear una regla personalizada (usando el Reglas module) para que cada vez que se ejecute el cron, esta regla verifique un campo de fecha en un tipo de contenido personalizado que creé. Si esa fecha ha pasado, quiero configurar un widget de lista desde active a ended.

Esto es lo lejos que llego al intentar crear esta regla:

  1. Kit React on event a Cron maintenance tasks are performed
  2. Add Condition > Establecer Select the condition to add a Data comparison > Continuar

Aquí está el problema: Data selectors solo tiene site y sin acceso a los datos de campo.

¿Alguna idea de dónde me estoy equivocando aquí?

preguntado el 05 de mayo de 13 a las 21:05

3 Respuestas

El problema con la condición de Reglas "Se realizan las tareas de mantenimiento de Cron" es que, en ese momento, no hay acceso al objeto de nodo, por lo que no es posible realizar comprobaciones ni manipulaciones en el nodo. Como solución, en lugar de Evento = Se realizan tareas de mantenimiento de Cron, Utilizar Evento = Nodo: Se visualiza el contenido. Puede dejarlo abierto para cualquier tipo de contenido para que cuando alguien visite el sitio web y abra al menos una página, se active alguna acción.

Respondido 26 Feb 15, 21:02

Primero debe crear un componente de reglas:

  1. Utilice la herramienta Reglas > Componentes (admin/config/workflow/reglas/componentes)
  2. A continuación, cree un nuevo componente y seleccione 'Regla' de la lista de selección
  3. Establezca un nombre para este componente y en la siguiente tabla seleccione:
    1. Tipo de datos: Ficha de texto
    2. Etiqueta: Un nombre que quieras
    3. Nombre de la máquina: Use el mismo nombre de la etiqueta pero establezca aquí solo minúsculas y guión bajo
    4. Uso: Parámetro
  4. En el componente agregue la condición 'Comparación de datos' y seleccione nodo:tipo
  5. Añade otras condiciones que quieras
  6. Establece las acciones que quieras y guarda
  7. Ahora ve a Reglas (admin/config/workflow/rules) y cree la regla con acción en el mantenimiento de cron (como ya lo ha hecho)
  8. Salta la sección de condiciones y en las acciones:
    1. Nueva acción: Agregar una variable
    2. Valor: Texto
    3. Luego, escriba el valor de esta variable como el nombre de la máquina del tipo de contenido en el que desea realizar el ciclo (si lo desea, puede cambiar el nombre y el nombre de la máquina de esta variable en la sección a continuación)
  9. Ahora agrega otra acción 'Obtener entidad por propiedad'
    1. Valor del tipo de entidad: Nodo
    2. Valor de propiedad: Tipo
    3. Selector de datos: la variable creada en el punto 8
  10. Actualmente agregar un bucle en la lista de parámetros use la variable proporcionada por 'Obtener entidad por propiedad'
  11. Agregue una acción en el ciclo (haga clic en el enlace a la derecha de la fila del ciclo) y seleccione el componente creado en el punto 2 y pase la variable proporcionada por el ciclo

Afirmo: no sé si funciona pero al menos debería dirigirte hacia el camino correcto

Perdón por mi inglés, espero que entiendas todo :)

Respondido 03 Feb 16, 16:02

Sí, debería poder hacer que esto funcione usando el Reglas módulo para implementar lo que estás buscando, pero te recomiendo que también combine eso con el Vistas Reglas módulo. Algunos detalles sobre este módulo (de su página de proyecto):

Proporciona vistas directamente como acciones de reglas y bucles para usar sin problemas los datos de resultados de la vista.

La cita anterior puede parecer un poco críptica (puede hacerte pensar "y qué, ¿cómo puede ayudarme esto?"). Por lo tanto, algunos detalles más sobre cómo avanzar usando estos módulos:

  1. Crear una vista (usando Vistas) para que tenga 1 resultado de Vistas (fila) con todos los nodos que desea que se procesen (relacionados con su tipo de contenido personalizado y, si es posible, filtre de alguna manera usando su campo de fecha). Mientras que esa vista tiene campos (columnas) para lo que sea necesario en los pasos posteriores, por ejemplo, la ID del nodo, el campo de fecha y posiblemente también otros campos. Necesitará estos campos Ver más adelante como valores que su regla procesará, "para establecer un widget de lista desde active a ended*" (como en su pregunta). Importante: use un tipo de visualización de Vistas de "Reglas".
  2. Elimine esa "condición adicional" (en la regla personalizada que comenzó) y, en su lugar, use el Vistas Reglas módulo para iterar sobre cada una de estas Vistas da como resultado una acción de Reglas, utilizando la técnica de Reglas conocida como "Rules Loop".
  3. Para cada paso de iteración en su ciclo de Reglas, realice una Acción de Reglas para "Haz tus cosas" (= para configurar un widget de lista desde active a ended). En ese momento, tendrá todos los datos de cada columna de los resultados de sus vistas disponibles como los llamados parámetros de reglas. Entonces, en ese punto, es pan comido adaptar el valor de ese widget de lista para el nodo que está procesando en ese bucle.
  4. Opcionalmente, también puede agregar cualquier Condición de Reglas adicional, también según su propia imaginación. Por lo general, las cosas que no puede, o aún no ha expresado, como un filtro de Vistas. Sin embargo, si tiene la opción de usar un filtro de Vistas y una Condición de Reglas adicional, le recomiendo que elija el filtro de Vistas, porque eso reducirá el número de sus iteraciones en su ciclo de Reglas (¡rendimiento!).

Fácil, ¿no?

Respondido 10 Abr '17, 11:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.