habe mich kürzlich mit einem Contenido-Update (4.6.24 -> 4.8.12) beschäftigt.
Dabei sind mir ein paar Probleme aufgefallen, die ich hier etwas näher beschreibe. Dann gehen diese Infos auch nicht verloren
Upgrade/Migration einer Contenido 4.6.x auf 4.8.12 Installation!
Problem bei er Übernahme der Modulhistorie von der Tabelle in die XML-Variante. Der Aufruf ist in /setup/dbupdate.php
Code: Alles auswählen
$oVersion = new VersionImport($cfg, $cfgClient, $db, $client, $area, $frame);
$oVersion->CreateHistoryVersion();
{prefix}_mod_history und exportiert diese in eine XML-Variante. Da alle Datensätze in den Speicher geladen werden,
kann es hier zu einem Speicherüberlauf und oder Überschreiten der maximalen Ausführzeit des Scriptes kommen.
Manche Contenido-Installationen laufen ein paar Jährchen und da kann sich mal 100 MB oder mehr in der {prefix}_mod_history sammeln. Möglich wäre der Export der neuesten 10 Versionen pro Modul mit der Ausgabe eines Hinweistextes an den User, oder VersionImport macht das Stück für Stück dann wird der Speicher nicht voll, wobei das Script hier auch in einen Timeout reinlaufen könnte.
Fehler in der Metatag Generierung:
contenido/plugins/chains/includes/include.chain.content.createmetatags.php
Funktion CheckIfMetaTagExists() soll die Position des Metatags liefern, falls dieser in der übergebenen Liste vorkommt.
Wird die Funktion aber mehrmals mit dem gleichen Metatag Namen aufgerufen, liefert die Funktion verschiedene Positionen.
Fehler in der Metatag Generierung, die 2.:
contenido/includes/functions.con2.php
In der Funktion conGenerateCode() kann es unter Umständen zu Fehlern beim Generieren der Metatag-Inhalte kommen, wenn Beschreibung oder Keywords Single-/Double Quotes enthalten.
Fehler in der Erstellung der Linkliste in TinyMCE
contenido/external/wysiwyg/tinymce3/list.php
Beim Generieren der URLs zu den Dateien, wird immmer der Mandantenpfad als URL angegeben, auch wenn es sich bei der Upload-Datei um eine in der DB abgelegten Datei handelt!
Dann steht dort
Code: Alles auswählen
if(!defined('CON_FRAMEWORK')) {
die('Illegal call');
}
Muss aber lauten:
Code: Alles auswählen
if (!defined("CON_FRAMEWORK")) {
define("CON_FRAMEWORK", true);
}
Problem in der Dateiverwaltung
contenido/includes/include.upl_files_overview.php
Beim Aufruf eines Uploadordners wird der Ordnerinhalt mit der DB-Tabelle abgeglichen, und die Liste Generiert.
Hat der Ordner z. B. 1000 Dateien, werden pro Datei im Durchschnitt ca. 4 Queries an die DB abgesetzt, um den Abgleich zu machen und um die Liste auszugeben.
Apropos Liste: Auch wenn hier z. B. nur 25 Dateien angezeigt werden, laufen im Hintergrund für jede vorhandene Datei in dem Upload Ordner 2 Queries (1 zum Ermitteln der ID, eine zum Holen des Datensatzes). Problem ist hier die Verwendung von Klassen die von ItemCollection und Item erben.
Ob es Sinn macht, in einen Ordner 1000 oder mehr Dateien abzulegen, sei mal dahin gestellt. Dennoch sollte das nicht passieren.
Mit einem Pager, habe mal damit grob angefangen, kann man zumindest die Liste mit 2 Queries abfrühstücken. 1 Query für die Anzahl der Dateien und 1 Query mit Filter-/Sortier Bedingung inkl. Angabe des Bereichs (LIMIT).
So, das war alles, was mir so aufgefallen ist. Vielleicht ist einiges davon schon bekannt, habe es dennoch hier beschrieben.
Grüße
xmurrix