ProcessWire - Cronjob
Aus Wikizone
Version vom 3. April 2025, 11:32 Uhr von 109.193.152.88 (Diskussion) (Die Seite wurde neu angelegt: „Damit ein Cronjob Skript Zugriff auf die ProcessWire Funktionen hat kannst du einfach die index.php inkludieren. Beachte, dass du bei Selektoren z.B. include=…“)
Damit ein Cronjob Skript Zugriff auf die ProcessWire Funktionen hat kannst du einfach die index.php inkludieren.
Beachte, dass du bei Selektoren z.B. include=all angeben musst, wenn du auf Templates mit Zugriffsbeschränkungen zugreifst (z.B. wenn diese nur für eine Benutzergruppe zugelassen sind.
Beispiel Archivierungsskript für DEKRA Gewinnspiel:
<?php namespace ProcessWire;
/**
*
* job.php
* Maintenance tasks called via cronjob
*/
//require_once('../index.php'); // Bootstrapping ProcessWire
//$pw_path = $_SERVER['DOCUMENT_ROOT'] . 'index.php';
$pw_path = __DIR__ . '/../index.php'; // passe den Pfad ggf. an
require_once($pw_path);
$archivedCount = moveAnswersToArchive(10);
echo "Verschobene Antworten: " . $archivedCount . chr(10);
echo " nomail"; // uncomment if you don't want cronjob mails
/**
* moveAnswersToArchive
* bewegt Antworten zu Fragen ins Archiv (Checkbox gewählt)
* Bewegt nur eine begrenzte Anzahl aus Effizienzgründen
* Wird vom export Tool automatisch aufgerufen
*/
function moveAnswersToArchive($limit = 3, $parentPage = 30321, $archieveTemplate = 'user-archieved-answer') {
$lockedQuestions = pages()->find("template=question, checkbox=1, sort=date, limit=3, include=all"); // include ist wichtig, da template zugriff eingeschränkt
//var_dump($lockedQuestions);
$c = 0;
$parent = pages()->get($parentPage);
if($lockedQuestions->count) {
foreach($lockedQuestions as $question) {
$answers = pages()->find("template=user-answer, pr_question={$question->id}, sort=date, limit={$limit}");
foreach($answers as $answer) {
$answer->template = $archieveTemplate;
$answer->parent = $parent;
if($answer->save()) {
$c++;
}
}
}
}
// Rückgabe der Anzahl der verschobenen Antworten
wire('log')->save('cronjob', 'Antworten archiviert: '. $c);
return $c;
}