WBCE CMS – Way Better Content Editing.
Du bist nicht angemeldet.
Hallo zusammen,
nach einigen Upgrades meiner Internetseiten auf die Version 1.5.4 (auch bereits bei 1.5.3) und gleichzeitiger Umstellung auf PHP 8.026 habe ich (bei ganz "alten" Installationen) das Problem, dass versteckte Seiten des jeweiligen Projekts nicht mehr angezeigt werden. Es erscheint die Meldung:
"Kein aktiver Inhalt auf dieser Seite vorhanden"
Im Backend wird die Seite angezeigt und lässt sich auch über den Editor bearbeiten und speichern.
Allerdings kommt bei den Abschnitten eine leere Seite und das speichern ändert nichts daran, dass der Inhalt nicht angezeigt wird.
Bei diesen Projekten lässt sich auch keine neue Seite (egal ob öffentlich oder versteckt) anlegen.
Mit zurücksetzen der PHP-Version auf 7.4 ist der Fehler wieder weg.
Im Error-Log steht folgendes:
2022-12-14T09:53:39+00:00 [Visitor Request] xxx/admin/pages/sections.php?page_id=525
2022-12-14T09:53:39+00:00 [Exception] There was an unknown exception: Unsupported operand types: string + int in line (356) of /admin/pages/sections.php
Hat jemand eine Idee?
Beitrag geändert von florian (15.12.2022 12:00:11)
Offline
Das ist ein Zeitzonenproblem, das eigentlich mit 1.5.4 hätte behoben sein sollen. Komisch.
Bitte manuell korrigieren, siehe: https://forum.wbce.org/viewtopic.php?pid=40275#p40275
Beitrag geändert von florian (14.12.2022 12:56:52)
Online
Das hatte ich bereits gemacht - leider ohne Erfolg
Zeitzone stand auf UTC + 2 Hours - jegliche Änderungen waren ohne Effekt
Versuch mal, ob es hilft, bei den Grundeinstellungen die Zeitzone neu zu setzen. Sonst erst in der /admin/pages/modify.php vor das TIMEZONE das Schlüsselwort inkl. Klammern (int) setzen.
Das habe ich dann in der Datei geändert:
+ (int) TIMEZONELeider ebenfalls ohne Erfolg
Offline
Meinst Du mit "in der Datei" jetzt die /admin/pages/modify.php oder /admin/pages/sections.php?
Online
Ups - zuerst nur in der "sections.php".
Hab's jetzt aber in beiden Dateien geändert. Hat leider immer noch nichts gebracht.
Offline
Hm, kannst Du auch nochmal bei den Profileinstellungen schauen, ob Du da die Zeitzone ändern kannst?
Und auch mal das Admintool Sysinfo installieren und schauen, ob überhaupt serverseitig TIMEZONE definiert ist, ich hstte letztens mal einen Fall, wo das mysteriöserweise fehlte.
Online
Danke für die schnellen Rückmeldungen!
Punkt 1 hatte ich überprüft. Die Profileinstellungen standen und stehen jeweils auf "Standardeinstellung" :
Zeitzone: UTC +1 Hours (Standardeinstellung)
Datumsformat: 14.12.2022 (Standardeinstellung)
Zeitformat: 13:35 (Standardeinstellung)
Bei den "WBCE Constants" ist folgender Eintrag enthalten
(...)
TIMEZONE 3600
TIME_FORMAT H:i
VERSION 2.8.3
WBCE_TAG 1.5.4
WBCE_VERSION 1.5.4
(...)
Offline
Rätselhaft. Ich kann Dir dann nur anbieten, mir das mal direkt anzuschauen, dafür bräuchte ich Admin-Zugangsdaten + FTP per PM oder an support@wbce.org.
Online
Ich habe die Ursache gefunden, das ganze ist aber ziemlich seltsam.
Das Problem ist, dass bei der betreffenden Seite in der Tabelle sections die Spalten publ_start und publ_end komplett leer sind.
Üblicherweise wird dort 0 als Default-Wert gesetzt, das ist auf dieser konkreten Website aber nicht so.
Ich habe also erstmal per Adminer für die beiden genannten Tabellen 0 als Default hinterlegt, was sich aber nur für neue Abschnitte und nicht rückwirkend auswirkt.
PHP 7.4 scheint da noch toleranter gewesen zu sein, PHP 8.x steigt da entrüstet aus.
Im Backend lässt sich das noch fixen, dafür muss Zeile 353-359 der /admin/pages/sections.php geändert werden zu
if ((int)$section['publ_start'] == 0) {
$oTemplate->set_var('VALUE_PUBL_START', '');
} else {
$oTemplate->set_var('VALUE_PUBL_START', date($jscal_format, (int)$section['publ_start'] + (int) TIMEZONE));
}
// set calendar start values
if ((int)$section['publ_end'] == 0) {
$oTemplate->set_var('VALUE_PUBL_END', '');
} else {
$oTemplate->set_var('VALUE_PUBL_END', date($jscal_format, (int)$section['publ_end'] + (int) TIMEZONE));
}(also nur ein (int) vor die if-Bedingungen).
Im Frontend finde ich leider gerade nicht die richtige Stelle, wo das Start-/Ablaufdatum eines Abschnitts geprüft wird.
Ich habe in der class.wb.php Zeile 398 geändert zu
if ($now < $section['publ_end'] && ($now > $section['publ_start'] || (int)$section['publ_start'] == 0) || $now > $section['publ_start'] && (int)$section['publ_end'] == 0) {damit verschwindet zumindest schon mal die Meldung "Kein aktiver Abschnitt vorhanden".
Aber wo wird nun für die Ausgabe konkret geprüft, ob ein Abschnitt angezeigt werden soll oder noch nicht/nicht mehr? Ich dachte, das würde in der class.frontend.php, Zeile 97ff passieren:
$sSql = 'SELECT `p`.`page_id`, `link` ';
$sSql .= 'FROM `{TP}pages` AS `p` INNER JOIN `{TP}sections` USING(`page_id`) ';
$sSql .= 'WHERE `parent`=0 AND `visibility`=\'public\' ';
$sSql .= 'AND ((' . $now . '>=`publ_start` OR `publ_start`=0) ';
$sSql .= 'AND (' . $now . '<=`publ_end` OR `publ_end`=0)) ';Aber eine Änderung zu
$sSql = 'SELECT `p`.`page_id`, `link` ';
$sSql .= 'FROM `{TP}pages` AS `p` INNER JOIN `{TP}sections` USING(`page_id`) ';
$sSql .= 'WHERE `parent`=0 AND `visibility`=\'public\' ';
$sSql .= 'AND ((' . $now . '>=`publ_start` OR `publ_start`=0 OR `publ_start`=\'\') ';
$sSql .= 'AND (' . $now . '<=`publ_end` OR `publ_end`=0 OR `publ_end`=\'\')) '; bringt leider nichts, die Seite bleibt leer.
Klicke ich hingegen im Backend in der nun wieder verfügbaren Ansicht "Abschnitte verwalten" auf Speichern, wird der Abschnitt bzw. werden die Abschnitte wie gewünscht im Frontend angezeigt.
Frage an die Profis: wo/wie muss der Query für die Abschnitte angepasst werden, dass eine leere Spalte wie eine mit 0 gefüllte Spalte behandelt wird?
Oder gibt es eine einfache Möglichkeit, scriptgesteuert bei hunderten Tabellenzeilen nachträglich Nullwerte zu setzen?
Beitrag geändert von florian (14.12.2022 18:43:29)
Online
Gefunden.
framework/frontend.functions.php, Zeile 361ff ändern zu
// skip this section if it is out of publication date
$now = time();
if (!(
($now <= $aSection['publ_end'] || (int)$aSection['publ_end'] == 0)
&&
($now >= $aSection['publ_start'] || (int)$aSection['publ_start'] == 0)
)) {
continue;
}Online
Super - mit den Änderungen in den Dateien ist das Problem gelöst!
Vielen Dank .
Offline
florian