Cronjob: Artikel-Status
Verfasst: 19. Jul 2016, 09:17
Hallo Leute,
ich habe mal wieder ein tolles Problem...
Ich verändere den Artikelstatus (online/offline) über einen externen Cronjob, was auch gut funktioniert.
Aber irgendwie scheint es noch einen Mechanismus zu geben, der den Cache danach löscht oder sowas???
Mein Cronjob funktioniert jedenfalls tadellos... Er findet die zeitgeschalteten Seite (per Meta-info), stellt den Status der zueghörigen Artikel-ID auf 0 bzw. 1 und im Backend ist die Änderung auch nachvollziehbar.
Der Artikel wird aber einfach nicht "online/offline gestellt" - ich bekomme nach wie vor die 404er-Seite beim Aufruf (ich verwende den SEO42-Offlinemodus, der mir die Seiten auch tatsächlich ausknipst, wenn Sie offline sind...) bzw. die Seite halt noch angezeigt, obwohl die Variable auf 0 steht...
Welche Funktion muss ich also extern noch "nachbauen", damit Redaxo sich korrekt verhält? Könnte mir da mal jemand einen Wink geben?
PS: Ich kann das Redaxo-AddOn "Cronjobs" in diesem Usecase nicht verwenden, da ich dort minimal 1 Stunde als Intervall angeben kann. Ich brauche aber 15 Minuten bzw. manchmal auch minütlich, deswegen ist das AddOn für mich unbrauchbar und ich mache alles extern und außerhalb des Redaxo-Frameworks...
Vielen Dank für Euren Input,
dpf_dd
ich habe mal wieder ein tolles Problem...
Ich verändere den Artikelstatus (online/offline) über einen externen Cronjob, was auch gut funktioniert.
Code: Alles auswählen
<?php
#####################################################################################################
### ZEITSCHALTUNG JE NACH EINSTELLUNG DES ARTIKELS (METAINFO-FELDER "ARTICLE_FROM" / "ARTICLE_TO" ###
#####################################################################################################
### Dokument auf UTF8 einstellen
header('Content-Type: text/html; charset=UTF-8');
class Cronjob{
### Container für einzulesende XML-Artikel
var $onoff = array();
### MySQLi connecten
private $mysqli;
### Kontruktor
public function __construct(MySQLi $mysqli){
$this->mysqli = $mysqli ;
}
##########################################################################################
### PRÜFT, OB DIE AKTUELLE ZEIT ZWISCHEN ZWEI TIMESTAMPS LIEGT
##########################################################################################
public function isBetween($start = 0, $end = 0){
$now = time();
return (
($end != 0 && $start != 0 && $end > $now && $now > $start)
|| ($end == 0 && $now > $start)
|| ($start == 0 && $end > $now)
|| ($start == 0 && $end == 0)
) ? 1 : 0;
}
##########################################################################################
### LÖSCHT AUTOMATISCH DATENSÄTZE, DIE ÄLTER SIND ALS X TAGE
##########################################################################################
public function zeitschaltung()
{
$now = time();
### SQL-Query
$query = 'SELECT id, status, art_online_from, art_online_to FROM rex_article WHERE art_online_from > 0 OR art_online_to > 0';
$result = $this->mysqli->query($query);
### Schleife, die jeder selektierte Datensatz durchläuft
$article = array();
while($row = $result->fetch_array(MYSQLI_NUM))
{
$articles[] = array('id' => $row[0],'status' => $row[1],'online_from' => $row[2],'online_to' => $row[3]);
}
foreach($articles as $article)
{
$between = '';
$between = $this->isBetween($article['online_from'],$article['online_to']);
### Wenn $between ungleich $article['status'] => Status in DB ändern
if($between != $article['status'])
{
$query = 'UPDATE rex_article SET status = NOT status WHERE id = '.$article['id'];
$result = $this->mysqli->query($query);
echo $this->mysqli->affected_rows;
}
}
$this->mysqli->close();
return true;
}
}
##########################################################################################
### CRONJOB ZUM AUTOMATISCHEN LÖSCHEN ALTER DATENSÄTZE #############################
##########################################################################################
### Objekt erstellen und SQL connecten
$mysqli = new MySQLi('localhost','***','***','***');
$artikel = new Cronjob($mysqli);
$artikel = $artikel->zeitschaltung();
?>
Mein Cronjob funktioniert jedenfalls tadellos... Er findet die zeitgeschalteten Seite (per Meta-info), stellt den Status der zueghörigen Artikel-ID auf 0 bzw. 1 und im Backend ist die Änderung auch nachvollziehbar.
Der Artikel wird aber einfach nicht "online/offline gestellt" - ich bekomme nach wie vor die 404er-Seite beim Aufruf (ich verwende den SEO42-Offlinemodus, der mir die Seiten auch tatsächlich ausknipst, wenn Sie offline sind...) bzw. die Seite halt noch angezeigt, obwohl die Variable auf 0 steht...
Welche Funktion muss ich also extern noch "nachbauen", damit Redaxo sich korrekt verhält? Könnte mir da mal jemand einen Wink geben?
PS: Ich kann das Redaxo-AddOn "Cronjobs" in diesem Usecase nicht verwenden, da ich dort minimal 1 Stunde als Intervall angeben kann. Ich brauche aber 15 Minuten bzw. manchmal auch minütlich, deswegen ist das AddOn für mich unbrauchbar und ich mache alles extern und außerhalb des Redaxo-Frameworks...
Vielen Dank für Euren Input,
dpf_dd