[BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
[BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
Hallo zusammen,
in manchen meiner Installationen tritt ein Fehler auf, und ich vermute, es hängt ziemlich sicher mit der MySQL-Version 8 zusammen. In Installationen mit 5.x ist der Fehler bisher jedenfalls nicht aufgetreten.
Ist in einer Kategorie z.B. ein Startartikel online und ein weiterer Artikel in der gleichen Kategorie offline gesetzt, wird das Kategorie-Icon unter Content->Artikel fälschlicherweise dunkelrot.
Damit Contenido überhaupt unter MySQL 8 läuft, habe ich die von xmurrix zusammengetragenen Anpassungen durchgeführt, um den strict-mode "auszuhebeln".
in manchen meiner Installationen tritt ein Fehler auf, und ich vermute, es hängt ziemlich sicher mit der MySQL-Version 8 zusammen. In Installationen mit 5.x ist der Fehler bisher jedenfalls nicht aufgetreten.
Ist in einer Kategorie z.B. ein Startartikel online und ein weiterer Artikel in der gleichen Kategorie offline gesetzt, wird das Kategorie-Icon unter Content->Artikel fälschlicherweise dunkelrot.
Damit Contenido überhaupt unter MySQL 8 läuft, habe ich die von xmurrix zusammengetragenen Anpassungen durchgeführt, um den strict-mode "auszuhebeln".
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
Hast du einen Screenshot davon?
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
Hallo homtata,
wird das Problem gelöst, wenn du in der Datei contenido/includes/include.con_str_overview.php ziemlich unten die Abfrage, die den Kategoriebaum von der Datenbank holt, wie folgt änderst?:
Diese Abfrage wurde in CONTENIDO zuletzt geändert, damit es mit neueren MySQL-Versionen funktioniert. Vielleicht steht auch etwas darüber in der errorlog.txt drin.
Gruß
xmurrix
wird das Problem gelöst, wenn du in der Datei contenido/includes/include.con_str_overview.php ziemlich unten die Abfrage, die den Kategoriebaum von der Datenbank holt, wie folgt änderst?:
Code: Alles auswählen
$sql = "SELECT DISTINCT " .
"a.idcat, " .
"a.parentid, " .
"a.preid, " .
"a.postid, " .
"a.parentid, " .
"b.name, " .
"b.idlang, " .
"b.visible, " .
"b.public, " .
"c.idtree, " .
"c.level, " .
"d.idtpl " .
"FROM {$cfg['tab']['cat']} AS a " .
"LEFT JOIN {$cfg['tab']['cat_lang']} AS b ON a.idcat = b.idcat " .
"LEFT JOIN {$cfg['tab']['cat_tree']} AS c ON (a.idcat = c.idcat AND b.idcat = c.idcat) " .
"LEFT JOIN {$cfg["tab"]["tpl_conf"]} AS d ON b.idtplcfg = d.idtplcfg " .
"WHERE " .
" a.idclient = {$client} " .
"ORDER BY b.idlang {$sOrder}, c.idtree ASC ";
Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
Hallo faar,
für dich mal noch einen Screenshot.
für dich mal noch einen Screenshot.
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
@xmurrix: nein, diese Änderung bringt leider nichts...
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
Danke
Also, meines bescheidenen Wissens nach wird das über ein Javascript gesteuert und der Artikelbaum dadurch aktualisiert.
Man müsste folglich wissen, was genau das Javascript da macht.
Diese Datei wird vielleicht gar nicht berührt?@xmurrix: nein, diese Änderung bringt leider nichts...
Hab die SQL mal phpmyadmin tauglich gemacht und bei mir spuckt es fein die Ergebnisse mit visible und public aus, hab aber auch MySQL 5,7 laufen:
Code: Alles auswählen
SELECT DISTINCT a.idcat, a.parentid, a.preid, a.postid, a.parentid, b.name, b.idlang, b.visible, b.public, c.idtree, c.level, d.idtpl FROM con_cat AS a LEFT JOIN con_cat_lang AS b ON a.idcat = b.idcat LEFT JOIN con_cat_tree AS c ON (a.idcat = c.idcat AND b.idcat = c.idcat) LEFT JOIN con_template_conf AS d ON b.idtplcfg = d.idtplcfg WHERE a.idclient = 1 ORDER BY b.idlang ASC, c.idtree ASC
Zum Test mit der DB reicht es.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
@faar: wie schon gesagt, tritt der Fehler ausschließlich unter SQL8 auf und hat mit der JS-Aktualisierung nix zu tun. Der Baum ist bei jedem Neuaufruf falsch. Das Icon wird aus welchen Gründen auch immer unter SQL8 ggf. falsch berechnet, sobald ein offline-Artikel darin steht.
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
Hast Du denn die oben genannte SQL einmal in phpmyadmin dieser DB eingegeben, um zu sehen, was passiert?homtata hat geschrieben: ↑Mo 25. Jan 2021, 10:48@faar: wie schon gesagt, tritt der Fehler ausschließlich unter SQL8 auf und hat mit der JS-Aktualisierung nix zu tun. Der Baum ist bei jedem Neuaufruf falsch. Das Icon wird aus welchen Gründen auch immer unter SQL8 ggf. falsch berechnet, sobald ein offline-Artikel darin steht.
PHPMyAdmin gibt Auskunft über den Fehler.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
@faar:
mit Ausnahme der tatsächlich absichtlich offline gestellten Kategorien (die auf visible = 0) stehen alle anderen Kategorien in der Datenbank auf visible = 1 und public = 1. Auf dieser Ebene liegt der Fehler also nicht.
Das war aber auch nicht zu erwarten. Der SQL-Befehl fragt ja lediglich Kategoriezustände unabhängig vom Zustand der darin liegenden Artikel ab, aber genau DA liegt ja die Krux. DAS verfälscht die Anzeige. NATÜRLICH stehen die falsch angezeigten Kategorien auf visible = 1, denn das war vor dem Update unter SQL 5.7 auch schon so.
Der Fehler liegt unter SQL8 in der Auswertung/Bewertung der zur Kategorie gehörenden Artikel.
mit Ausnahme der tatsächlich absichtlich offline gestellten Kategorien (die auf visible = 0) stehen alle anderen Kategorien in der Datenbank auf visible = 1 und public = 1. Auf dieser Ebene liegt der Fehler also nicht.
Das war aber auch nicht zu erwarten. Der SQL-Befehl fragt ja lediglich Kategoriezustände unabhängig vom Zustand der darin liegenden Artikel ab, aber genau DA liegt ja die Krux. DAS verfälscht die Anzeige. NATÜRLICH stehen die falsch angezeigten Kategorien auf visible = 1, denn das war vor dem Update unter SQL 5.7 auch schon so.
Der Fehler liegt unter SQL8 in der Auswertung/Bewertung der zur Kategorie gehörenden Artikel.
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
Ich habe mal gesucht, wo denn die Icons erzeugt werden für die Folder in der Artikelansicht. Das geschieht in besagter include.con_str_overview.php ungefähr ab Zeile 105.
und der Fehler müsste in der Fehlbewertung dieser Zeile liegen:
Wenn ich nicht ganz falsch laufe, dann wird die Bewertung der ARTIKELzustände in den SQL-Befehlen in den Zeilen 429 und 446 vorgenommen. Ich habe den starken Verdacht, dass der "SUM(a.online)"-Befehl dort anders funktioniert.
EDIT: Da ich dachte, dass der Fehler möglicherweise in einer nicht kompatiblen Struktur in der DB besteht, habe ich in con_art_lang mal die Spalte "online" so umgestellt, dass der default NULL statt "0" ist und einige Artikel von "0" auf NULL umgestellt. Das hat aber nichts gebracht, also habe ich es zurückgestellt.
Code: Alles auswählen
if ($aValue['online'] == 1) {
// Category is online
if ($aValue['public'] == 0) {
// Category is locked
if ($aValue['no_start'] || $aValue['no_online']) {
$aAnchorClass = 'on_error_locked';
} else {
$aAnchorClass = 'on_locked';
}
} else {
// Category is public
if ($aValue['no_start'] || $aValue['no_online']) {
$aAnchorClass = 'on_error';
} else {
$aAnchorClass = 'on';
}
}
Code: Alles auswählen
if ($aValue['no_start'] || $aValue['no_online']) {
EDIT: Da ich dachte, dass der Fehler möglicherweise in einer nicht kompatiblen Struktur in der DB besteht, habe ich in con_art_lang mal die Spalte "online" so umgestellt, dass der default NULL statt "0" ist und einige Artikel von "0" auf NULL umgestellt. Das hat aber nichts gebracht, also habe ich es zurückgestellt.
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
Moin Homtata
Es fragt defacto also nur ab, ob ein Startartikel da ist.
Schau mal, was passiert, wenn du den Startartikel auf blau stellst.
Außer in $aValue stehen Werte für Kategorien und Artikel lustig parallel nebeneinander und $aValue['no_online'] meint einen Artikel $aValue['online'] meint eine Kategorie.
Die zweite Array-Variable in der IF Bedingung wird niemals wahr, weil ganz oben "no_online" bereits ausgeschlossen wurde: if ($aValue['online'] == 1)homtata hat geschrieben: ↑Mo 25. Jan 2021, 23:31Ich habe mal gesucht, wo denn die Icons erzeugt werden für die Folder in der Artikelansicht. Das geschieht in besagter include.con_str_overview.php ungefähr ab Zeile 105.
und der Fehler müsste in der Fehlbewertung dieser Zeile liegen:Code: Alles auswählen
if ($aValue['online'] == 1) { // Category is online if ($aValue['public'] == 0) { // Category is locked if ($aValue['no_start'] || $aValue['no_online']) { $aAnchorClass = 'on_error_locked'; } else { $aAnchorClass = 'on_locked'; } } else { // Category is public if ($aValue['no_start'] || $aValue['no_online']) { $aAnchorClass = 'on_error'; } else { $aAnchorClass = 'on'; } }
Code: Alles auswählen
if ($aValue['no_start'] || $aValue['no_online']) {
Es fragt defacto also nur ab, ob ein Startartikel da ist.
Schau mal, was passiert, wenn du den Startartikel auf blau stellst.
Außer in $aValue stehen Werte für Kategorien und Artikel lustig parallel nebeneinander und $aValue['no_online'] meint einen Artikel $aValue['online'] meint eine Kategorie.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
Ja, Homtata?
Ich hätte halt mit der SQL-Abfrage verglichen, ob das Ergebnis der Abfrage überein stimmt mit dem, was in den DB-Tabellen steht (aufwändig ) um zu sehen, ob die Abfrage mit dem IST der DB überein stimmt.Der Fehler liegt unter SQL8 in der Auswertung/Bewertung der zur Kategorie gehörenden Artikel.
Und dann hätte ich geschaut, ob das Ergebnis mit dem überein stimmt, was im Contenido Artikelbaum angezeigt wird und was Du bei den Artikeln und Kategorien tatsächlich eingestellt hast.
Wenn die Abfrage mit den Tabelleninhalten überein stimmt, liegt es schon mal nicht nicht an der SQL-Abfrage und damit wohl kaum an MySQL 8.
Dann bleibt noch PHP und Javascript.
So meinte ich halt.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
Vermutlich ging einer meiner letzten Posts gestern abend verloren. Den von faar vorgeschlagenen SQL-query hatte ich natürlich ausgeführt, aber wie aus der übersichtlichen Datenbank und beim query zu erwarten war, werden die reinen Kategorie-Einträge richtig abgefragt. Daran liegts nicht.
Das Problem ensteht vielmehr in include.con_str_overview.php und zwar in den Zeilen 431 resp. 448 in der SUM-Funktion. Diese summiert (eigentlich) die online/offline-Zustände der Artikel einer Kategorie auf; "online" ist die gleichnamige Spalte in con_art_lang und ist vom Typ tinyint(1).
Grob gesagt scheint SQL8 nicht mit der "0" umgehen zu können.
Unter SQL 5.7 rechnet die Abfrage bei zwei online- und einem offline-Artikel:
(1 + 1 + 0 ) = 2
Unter SQL 8 führt das derzeit zu:
(1 + 1 + "FEHLER") = 0 bzw. falsch
Als Workaround lässt sich in beide Querys einbauen (als Where-Bedingung), dass nur Einträge mit dem Wert a.online = 1 berücksichtigt werden zum Aufsummieren. Das macht folgenden geänderten Quellcode ab Zeile 429:
Mit dieser Änderung stimmen die Summen wieder und die Icons erhalten die korrekte Farbe. Im Zweifelsfalls dies bitte mit in den Core übernehmen oder eine passendere Lösung finden, aber ich bin nicht so der Datenbankspezi
Das Problem ensteht vielmehr in include.con_str_overview.php und zwar in den Zeilen 431 resp. 448 in der SUM-Funktion. Diese summiert (eigentlich) die online/offline-Zustände der Artikel einer Kategorie auf; "online" ist die gleichnamige Spalte in con_art_lang und ist vom Typ tinyint(1).
Grob gesagt scheint SQL8 nicht mit der "0" umgehen zu können.
Unter SQL 5.7 rechnet die Abfrage bei zwei online- und einem offline-Artikel:
(1 + 1 + 0 ) = 2
Unter SQL 8 führt das derzeit zu:
(1 + 1 + "FEHLER") = 0 bzw. falsch
Als Workaround lässt sich in beide Querys einbauen (als Where-Bedingung), dass nur Einträge mit dem Wert a.online = 1 berücksichtigt werden zum Aufsummieren. Das macht folgenden geänderten Quellcode ab Zeile 429:
Code: Alles auswählen
if ($syncoptions == -1) {
$sql2 = "SELECT
c.idcat AS idcat,
SUM(a.online) AS online,
d.startidartlang
FROM
" . $cfg["tab"]["art_lang"] . " AS a,
" . $cfg["tab"]["art"] . " AS b,
" . $cfg["tab"]["cat_art"] . " AS c,
" . $cfg["tab"]["cat_lang"] . " AS d
WHERE
a.idlang = " . cSecurity::toInteger($lang) . " AND
a.idart = b.idart AND
b.idclient = '" . cSecurity::toInteger($client) . "' AND
a.online = 1 AND
b.idart = c.idart AND
c.idcat = d.idcat
GROUP BY c.idcat, online, d.startidartlang";
} else {
$sql2 = "SELECT
c.idcat AS idcat,
SUM(a.online) AS online,
d.startidartlang
FROM
" . $cfg["tab"]["art_lang"] . " AS a,
" . $cfg["tab"]["art"] . " AS b,
" . $cfg["tab"]["cat_art"] . " AS c,
" . $cfg["tab"]["cat_lang"] . " AS d
WHERE
a.idart = b.idart AND
b.idclient = '" . cSecurity::toInteger($client) . "' AND
a.online = 1 AND
b.idart = c.idart AND
c.idcat = d.idcat
GROUP BY c.idcat, online, d.startidartlang";
}
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
Hallo Homtata,
das ist sehr interessant und ich habe noch nichts gefunden, was auf dieses Problem hinweisen würde. SUM ignoriert angeblich NULL und SUM braucht Zahlen, mehr steht da aber auch nicht. 0 ist eine Zahl.
Vielleicht ist der Eintrag falsch oder die Abfrage zum Eintrag falsch, wenn 0 zu "Fehler" führt.
Wenn das mit Deiner Lösung funktioniert, ist das erstmal eine Lösung aber noch nicht die Erklärung für die genaue Ursache.
(1 + 1 + 0 ) = 2 sollte immer gehen.
Ich hab noch nirgends MySQL 8 und kann es darum nicht nachvollziehen.
Muss ich mal schauen, ob ich irgendwo MySQL 8 nutzen kann.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
Re: [BUG 4.10.1] Kategorie-Icon in Artikelübersicht falsch
Hallo homtata,
ich habe mir die Tabelle "con_art_lang" angesehen, das Feld "online" in der Tabelle ist vom Typ tinyint(1), kann nicht NULL haben und hat als default den Wert 0. Also stehen da die Zahlen 1 oder 0 drin.
Wenn nun in MySQL 8 die Summe von (1 + 1 + 0) einen Fehler liefert, scheint das ein Problem in MySQL zu liegen. Vermutlich wird der Wert 0 nicht als Zahl interpretiert und verursacht einen Fehler in der SUM() Funktion.
Du kannst aber in der include.con_str_overview.php versuchen, den Wert im Feld "online" explizit in eine Zahl umzuwandeln, vielleicht löst das das Problem mit MySQL 8.
In was für einem SQL-Mode läuft denn die Datenbank?
ich habe mir die Tabelle "con_art_lang" angesehen, das Feld "online" in der Tabelle ist vom Typ tinyint(1), kann nicht NULL haben und hat als default den Wert 0. Also stehen da die Zahlen 1 oder 0 drin.
Wenn nun in MySQL 8 die Summe von (1 + 1 + 0) einen Fehler liefert, scheint das ein Problem in MySQL zu liegen. Vermutlich wird der Wert 0 nicht als Zahl interpretiert und verursacht einen Fehler in der SUM() Funktion.
Du kannst aber in der include.con_str_overview.php versuchen, den Wert im Feld "online" explizit in eine Zahl umzuwandeln, vielleicht löst das das Problem mit MySQL 8.
Code: Alles auswählen
...
SUM(CAST(a.online AS UNSIGNED)) AS online,
...
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.