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