ProcessWire - Cronjob: Unterschied zwischen den Versionen
Aus Wikizone
(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=…“) |
|||
| Zeile 50: | Zeile 50: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | |||
| + | Zugangsschutz: | ||
| + | |||
| + | Hier gibt es verschiedene Methoden. Wenn es bei all-inkl läuft kannst du einfach einen htaccess Passwortschutz auf das Verzeichnis legen (über das kasserver Backend) | ||
Aktuelle Version vom 3. April 2025, 11:33 Uhr
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;
}
Zugangsschutz:
Hier gibt es verschiedene Methoden. Wenn es bei all-inkl läuft kannst du einfach einen htaccess Passwortschutz auf das Verzeichnis legen (über das kasserver Backend)