Page 1 of 2

Script RT Last update arbeitet nicht mehr richtig

Posted: Mon 2. Apr 2018, 14:08
by Uwe367
Hallo allerseits.
Das Script Last update article & cp, zu finden im Wiki unter folgendem Link
http://www.phpwcms-howto.de/wiki/doku.p ... ast-update
arbeitet nicht mehr richtig.

Es wird zwar kein Fehler ausgegeben, aber das Datum und die Uhrzeit laufen mit der Zeit des Servers. Heißt, daß sich Datum/Uhrzeit beim normalen Reload der Seite der Serverzeit anpasst und nicht das wirkliche Aktualisierungsdatum wieder gibt. Könnte sich das mal jemand anschauen? Ich vermute daß es an PHP7 liegt. Unter PHP 5.5 funktioniert das Script.
Wäre nett wenn das jemand überarbeiten könnte so daß es wieder funktioniert :D
Ich bedanke mich schonmal im voraus.

P.s
Eine Korrektur aus diesem Thread
viewtopic.php?f=28&t=24527&p=143360&hil ... te#p143360
habe ich bereits vorgenommen.

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Sun 13. May 2018, 10:48
by Uwe367
Schade.
Scheint wohl niemanden zu interessieren.
Wirds eben manuell erledigt.

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Sun 13. May 2018, 17:44
by Oliver Georgi
Du musst das wirkliche Datum prüfen, ältere Installationen haben wechselndes Enddatum.

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Mon 14. May 2018, 05:22
by Uwe367
Ok. Dann schau ich mal ob und wie ich das hin bekomme. Danke erstmal für den Tip.

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Mon 14. May 2018, 18:40
by Uwe367
Grade noch ne Frage..
Was darf ich unter dem wirklichen Datum verstehen?
Das Datum wann die letzte Bearbeitung statt fand oder was meinst du damit?

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Tue 15. May 2018, 06:11
by Oliver Georgi
Das Enddatum. Anscheinend variierte das seinerzeit dann irgendwann auf der Basis Erstellungsdatum + 10 Jahre, während ganz am Anfang ein fixes Datum in der Zukunft war.

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Tue 22. May 2018, 05:15
by Uwe367
Ich fürchte wir reden hier gerade aneinander vorbei Oliver denn was hat das Enddatum mit dem Datum der letzten Bearbeitung zu tun?
Unter Enddatum verstehe ich das Datum, was gesetzt werden kann wann ein Artikel abläuft und, z.B. automatisch unsichtbar geschaltet wird.

Dieses Script soll aber das Datum der letzten Bearbeitung (Artikel, CP) finden, also das jüngste Datum das irgendwo in der DB auftaucht und da verstehe ich den Zusammenhang zu dem Enddatum nicht. Theoretisch muß ich hierfür doch das aktuelle Tagesdatum inkl. Uhrzeit prüfen, mit den Einträgen in der DB vergleichen und das jüngste (neueste) Datum inkl. Uhrzeit in dem RT ausgeben oder verstehe ich etwas falsch?

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Tue 22. May 2018, 06:52
by Oliver Georgi
Hm, OK, tatsächlich falsche Fährte.

Das klingt danach, dass $my_date schlicht kein valides Datum ist und dann greift bei Render_date() Fallback. Prüfe die Fehlermeldungen.

Ich halte das Script auch für sehr ineffizient. Könnte man gleich koppeln, also sofort das neueste Datum aller in Frage kommenden Artikel, Seitenebenen oder Artikelinhalte ermitteln, statt das mehrstufige Verfahren zu nutzen.

Eigentlich müsste folgende Query tun, was Du brauchst:

Code: Select all

$sql = 'SELECT UNIX_TIMESTAMP(latest_ts) AS latest_ts FROM (
	SELECT MAX(article_tstamp) AS latest_ts FROM '.DB_PREPEND.'phpwcms_article WHERE article_deleted=0 AND article_public=1 LIMIT 1
	UNION
	SELECT MAX(acat_tstamp) AS latest_ts FROM '.DB_PREPEND.'phpwcms_articlecat WHERE acat_trash=0 AND acat_aktiv=1 LIMIT 1
	UNION
	SELECT MAX(acontent_tstamp) AS latest_ts FROM '.DB_PREPEND.'phpwcms_articlecontent WHERE acontent_visible=1 AND acontent_trash=0 LIMIT 1
) AS t1 LIMIT 1';
$result = _dbQuery($sql);
if(isset($result[0]['latest_ts'])) {
    $content["all"] = render_date($content["all"], $result[0]['latest_ts'], 'DATE_UPDATE');
} else {
    // Render Fallback date!
    $content["all"] = render_date($content["all"], now(), 'DATE_UPDATE');
}
Wahrscheinlich reicht minimal das hier:

Code: Select all

$sql = 'SELECT UNIX_TIMESTAMP(MAX(article_tstamp)) AS latest_ts FROM '.DB_PREPEND.'phpwcms_article WHERE article_deleted=0 AND article_public=1 LIMIT 1
UNION
SELECT UNIX_TIMESTAMP(MAX(acat_tstamp)) AS latest_ts FROM '.DB_PREPEND.'phpwcms_articlecat WHERE acat_trash=0 AND acat_aktiv=1 LIMIT 1
UNION
SELECT UNIX_TIMESTAMP(MAX(acontent_tstamp)) AS latest_ts FROM '.DB_PREPEND.'phpwcms_articlecontent WHERE acontent_visible=1 AND acontent_trash=0 LIMIT 1';
$result = _dbQuery($sql);
if(isset($result[0]['latest_ts'])) {
    $content["all"] = render_date($content["all"], $result[0]['latest_ts'], 'DATE_UPDATE');
} else {
    // Render Fallback date!
    $content["all"] = render_date($content["all"], now(), 'DATE_UPDATE');
}

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Thu 24. May 2018, 15:10
by Uwe367
Danke für deine Hilfe Oliver.
Das klappt nun wieder :D
Ich würde dich aber bitten mal einen Blick drauf zu werfen und evtl. zu korrigieren falls nötig, bevor ich das ins Wiki stelle.
Wäre schön wenn du drüber schaust wenn du mal ein paar Sekunden Zeit hast.

Noch ne kleine Anmerkung an "versuchswillige" PHPWCMS´ler:
Das Script muß ins Verzeichnis template/inc_script/frontend_render
Es kann sein daß das Script in einer lokalen Installation (z.B. XAMPP) nicht funktioniert. Bei mir ist es jedenfalls so. Hier macht mir wahrscheinlich die UAC von Windoof einen Strich durch die Rechnung und das, obwohl XAMPP nicht auf Laufwerk C installiert ist. Lokal greift bei mir nur der Fallback.
Online auf dem Server funktioniert das Script wie es soll.

last_update.php

Code: Select all

<?php
// -------------------------------------------------------------------------------------------
// ------------- Move this Script into template/inc_script/frontend_render -------------------
// --------------- Use {DATE_UPDATE:d.m.Y H:i} as RT in your Template. -----------------------
// -------------------------------------------------------------------------------------------
// obligate check for phpwcms constants
  if (!defined('PHPWCMS_ROOT')) {die("You Cannot Access This Script Directly, Have a Nice Day.");}
// -------------------------------------------------------------------------------------------
if( ! (strpos($content["all"],'{DATE_UPDATE')===false)) {

$sql = 'SELECT UNIX_TIMESTAMP(latest_ts) AS latest_ts FROM(
	SELECT MAX(article_tstamp) AS latest_ts FROM '.DB_PREPEND.'phpwcms_article WHERE article_deleted=0 AND article_public=1 LIMIT 1
	UNION
	SELECT MAX(acat_tstamp) AS latest_ts FROM '.DB_PREPEND.'phpwcms_articlecat WHERE acat_trash=0 AND acat_aktiv=1 LIMIT 1
	UNION
	SELECT MAX(acontent_tstamp) AS latest_ts FROM '.DB_PREPEND.'phpwcms_articlecontent WHERE acontent_visible=1 AND acontent_trash=0 LIMIT 1
) AS t1 LIMIT 1';

$result = _dbQuery($sql);
if(isset($result[0]['latest_ts'])) {
    $content["all"] = render_date($content["all"], $result[0]['latest_ts'], 'DATE_UPDATE');
} else {
    // Render Fallback date!
    $content["all"] = render_date($content["all"], now(), 'DATE_UPDATE');
  }
}
?>

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Thu 24. May 2018, 15:15
by Oliver Georgi
schau Dir mysql_error() auf Windows an. Kann sein, dass Deine lokale Installation mit der Query nicht klarkommt.

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Thu 24. May 2018, 15:29
by Uwe367
Oliver Georgi wrote: Thu 24. May 2018, 15:15 schau Dir mysql_error() auf Windows an. Kann sein, dass Deine lokale Installation mit der Query nicht klarkommt.
Oder so. UAC habe ich mal versuchsweise deaktiviert und das wars nicht. Hauptsache es funktioniert online auf dem Server.
Dann kann ich davon ausgehen daß das Script so ok ist?
Würde es dann gerne für alle zugänglich im Wiki posten bzw. das bisherige korrigieren oder möchtest Du es in Deinem Git Account in phpwcms-extended packen sofern es dafür interessant ist?
Stammt ja eh zu 99% aus deiner "Feder" ;)

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Sun 27. May 2018, 14:42
by Uwe367
Mal grade noch ne ganz blöde Frage zur Funktion des Scripts.
Was bedeutet, bzw. welche Funktion hat die Null in den eckigen Klammern? Was hat dieser Wert bei php im allgemeinen zu bedeuten?
$result[0]
Entferne ich die Null mit den Klammern, so wird Fallback gerendert.

Ich dachte zunächst an den Startpunkt eines Arrays, aber das ist hier nicht der Fall da kein Array deklariert ist..

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Sun 27. May 2018, 16:50
by Oliver Georgi
_dbQuery() bzw. _dbGet() liefert bei validem Ergebnis ein Array mit numerischem Index zurück. Mittels $result[0] kann das erste Array-Element angesprochen werden.

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Sun 27. May 2018, 17:09
by Uwe367
Ok. Das erklärt dann das Verhalten wenn ich diesen Wert entferne.
$result enthält zwar die Werte, kann sie aber nicht ausgeben weil kein Arraystartpunkt [0] definiert ist und damit fällt das ganze ins Fallback.
Dazu muß man wissen daß _dbQuery() ein Array liefert und das war mir bis eben noch nicht bewußt.
Besten Dank für die Erklärung :D

Re: Script RT Last update arbeitet nicht mehr richtig

Posted: Sun 27. May 2018, 17:57
by Oliver Georgi
Wenn Du die [0] entfernst, schlägt die isset() Prüfung fehl. Deswegen Fallback.