Eu tenho uma lista de nós não publicados, criados com o módulo Views . Eu gostaria que uma tarefa fosse executada 3 vezes ao dia, em horários especificados. Sempre que a tarefa é executada, apenas um dos nós da lista deve ser publicado. Como posso fazer isso?
Etapas que tentei
Agendador
O módulo Agendador requer que você especifique a hora exata em que você deseja que o nó seja publicado. Isso torna tudo complicado, pois eu teria que resolver quando cada nó deveria ser publicado.
Exibições Operações em massa + Regras + Agendador de regras
Com o módulo Views Bulk Operations , você pode criar uma lista de nós expostos ao módulo Rules . As regras podem agir na lista e publicar o nó na lista. Você pode dizer ao Regras para publicar apenas um número específico de nós.
Isso funciona perfeitamente. Exceto, não parece possível agendar a regra para executar três vezes por dia.
Você pode vincular a regra ao trabalho Cron do site principal, mas isso não parece muito preciso, pois o trabalho Cron pode ser executado mais de 3 vezes.
Existe um módulo Agendador de regras (um submódulo de regras), mas não parece que você possa usar essa condição. Também não parece haver uma maneira de especificar o tempo de execução.
Job Scheduler
Isso permite que você defina um horário, mas parece não se integrar às Regras ou Exibições .
Respostas:
Usando os módulos VBO, Rules and Rules Scheduler
Sobre a sua abordagem usando módulos Visualizações Granel Operações (VBO) , Normas e Regras programador (submodule de Regras ), para o qual você escreveu " não parece possível agendar a regra para executar 3 vezes por dia. ": Que me parece "uma" abordagem válida.
O que você realmente precisa fazer é uma pequena variação do explicado no tutorial Tarefas por hora usando o planejador de regras : no seu caso, você deve usar um deslocamento de 8 horas (em vez de apenas 1).
E como explicado também nesse tutorial: Execute o componente manualmente manualmente. (a partir de então, a cada oito horas, a regra será executada novamente).
Usando módulos Regras e regras uma vez por dia
Existe um módulo relativamente novo relacionado a regras, ou seja, o módulo " Regras uma vez por dia ". Aqui está como ele funciona (conforme o comentário no número 2495775 , do proprietário do módulo):
A maneira como eu entendo / Leia isso (ainda não experimentei isso) é assim:
Portanto, ao criar três regras semelhantes, você pode ter 1 delas rodando (digamos) 18h, outra por volta das 14h e a mais alta às 22h.
PS: Estou assumindo que esta pergunta é sobre D7.
fonte
stringtotime()
. Se "regras uma vez por dia" fosse executada à meia-noite e eu desejasse que minha regra fosse executada às 18h, seria+18 hours
a maneira correta de escrever ostringtotime
comando?Você pode conseguir isso usando alguma codificação.
Uma exibição que lista todos os nós publicados para agendamento. Se você também aplicar o DraggableViews, poderá permitir que os administradores reordenem os nós arrastando e soltando, o que é sempre bom.
Uma função PHP customizada
publishdaily_get_top_node()
que executa a visualização acima e retorna o NID para o nó superior. Eu recomendaria colocar isso em um mini-módulo personalizado.Uma regra que é acionada na execução do cron e verifica se é hora de publicar um novo nó (por exemplo, verificando se o tempo está entre 00.00 e 00.15 - dependendo da frequência com que o seu cron é executado). Se estiver na hora, ele aciona a ação 'load node' e usa
publishdaily_get_top_node()
para fazer o NID carregar. Em seguida, ele publica o nó carregado.Se você quiser torná-lo ainda mais limpo, escreva um plug-in Rules em vez de apenas uma função PHP.
Se você quiser menos limpeza, escreva a função diretamente em uma ação para executar código PHP arbitrário.
Referência
fonte
checking if the time is between 00.00 and 00.15
Como você verificaria o tempo nas regras? Obrigado.Configurando tarefas cron usando o comando cron em horários especificados que você desejar.
Crie um módulo para implementar hook_cron (). Para atualizar seu primeiro nó como
$node->status = 1
.$ node-> status = 0, significa não publicado.
$ node-> status = 1, significa publicado.
Você pode usar views_get_view () para obter seu nó nid
fonte
Se você usa uma regra ou código para publicar um único nó da parte superior da sua exibição, acredito que a maneira mais fácil de agendá-lo é usar o Ultimate Cron .
Defina o planejador como Crontab e, para a tarefa específica, você pode dizer exatamente quando deseja que seja executado. Por exemplo, se você quiser 08:00, 12:00 e 16:00, pode fazer a regra:
Outras informações:
O Elysia Cron parece permitir tarefas cron personalizadas, o que pode permitir que você direcione uma regra específica (talvez via código php).
fonte
Crie uma regra da seguinte maneira:
Em / admin / config / workflow / rules / components / add
Crie um "conjunto de ações": Nome = Cancelar publicação de variáveis de conteúdo: Tipo de dados = Nó Rótulo = Nó Nome da máquina = nó -Continuar-
Em / admin / config / workflow / rules Crie uma "regra": Nome = Cancelar publicação da regra Reagir no evento = Nó> Após salvar o novo conteúdo Restringir por tipo = seu tipo de conteúdo -Salvar-
Ou seja, não é necessário filtrar o conteúdo ao criar o componente nem adicionar uma condição de tipo de conteúdo à regra.
Além disso, verifique a configuração do cron do site em Admin >> Configuração >> Sistema >> Cron (admin / config / system / cron)
Deixe-me saber se você tiver alguma dúvida / preocupação sobre isso.
fonte