Script RT Last update arbeitet nicht mehr richtig

Post custom hacks and enhancements for phpwcms here only. Maybe some of these things will be included in official release later.
User avatar
Uwe367
Posts: 899
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Script RT Last update arbeitet nicht mehr richtig

Post by Uwe367 » Mon 2. Apr 2018, 14:08

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.

User avatar
Uwe367
Posts: 899
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Uwe367 » Sun 13. May 2018, 10:48

Schade.
Scheint wohl niemanden zu interessieren.
Wirds eben manuell erledigt.

User avatar
Oliver Georgi
Site Admin
Posts: 9457
Joined: Fri 3. Oct 2003, 22:22
Location: Dessau
Contact:

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Oliver Georgi » Sun 13. May 2018, 17:44

Du musst das wirkliche Datum prüfen, ältere Installationen haben wechselndes Enddatum.
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Kleintierpraxis am Georgengarten

User avatar
Uwe367
Posts: 899
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Uwe367 » Mon 14. May 2018, 05:22

Ok. Dann schau ich mal ob und wie ich das hin bekomme. Danke erstmal für den Tip.

User avatar
Uwe367
Posts: 899
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Uwe367 » Mon 14. May 2018, 18:40

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?

User avatar
Oliver Georgi
Site Admin
Posts: 9457
Joined: Fri 3. Oct 2003, 22:22
Location: Dessau
Contact:

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Oliver Georgi » Tue 15. May 2018, 06:11

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.
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Kleintierpraxis am Georgengarten

User avatar
Uwe367
Posts: 899
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Uwe367 » Tue 22. May 2018, 05:15

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?

User avatar
Oliver Georgi
Site Admin
Posts: 9457
Joined: Fri 3. Oct 2003, 22:22
Location: Dessau
Contact:

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Oliver Georgi » Tue 22. May 2018, 06:52

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');
}
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Kleintierpraxis am Georgengarten

User avatar
Uwe367
Posts: 899
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Uwe367 » Thu 24. May 2018, 15:10

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');
  }
}
?>
Last edited by Uwe367 on Sun 27. May 2018, 11:48, edited 2 times in total.

User avatar
Oliver Georgi
Site Admin
Posts: 9457
Joined: Fri 3. Oct 2003, 22:22
Location: Dessau
Contact:

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Oliver Georgi » Thu 24. May 2018, 15:15

schau Dir mysql_error() auf Windows an. Kann sein, dass Deine lokale Installation mit der Query nicht klarkommt.
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Kleintierpraxis am Georgengarten

User avatar
Uwe367
Posts: 899
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Uwe367 » Thu 24. May 2018, 15:29

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" ;)

User avatar
Uwe367
Posts: 899
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Uwe367 » Sun 27. May 2018, 14:42

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..

User avatar
Oliver Georgi
Site Admin
Posts: 9457
Joined: Fri 3. Oct 2003, 22:22
Location: Dessau
Contact:

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Oliver Georgi » Sun 27. May 2018, 16:50

_dbQuery() bzw. _dbGet() liefert bei validem Ergebnis ein Array mit numerischem Index zurück. Mittels $result[0] kann das erste Array-Element angesprochen werden.
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Kleintierpraxis am Georgengarten

User avatar
Uwe367
Posts: 899
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Uwe367 » Sun 27. May 2018, 17:09

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

User avatar
Oliver Georgi
Site Admin
Posts: 9457
Joined: Fri 3. Oct 2003, 22:22
Location: Dessau
Contact:

Re: Script RT Last update arbeitet nicht mehr richtig

Post by Oliver Georgi » Sun 27. May 2018, 17:57

Wenn Du die [0] entfernst, schlägt die isset() Prüfung fehl. Deswegen Fallback.
Oliver Georgi | phpwcms Developer | GitHub | LinkedIn | Kleintierpraxis am Georgengarten

Post Reply