Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,075 of 9,075 pages
About the help in other languages
All help pages

LoveStack-Funktionen in Exponential 6

LoveStack ist die Distribution von Mugo Web des ursprünglich von eZ Systems veröffentlichten Legacy-Kernels (mugoweb/ezpublish-legacy auf GitHub und Packagist). Im Lauf der Jahre hat Mugo Web ihr eine Reihe wertvoller…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/bc/6.0/lovestack.md

On this page

This page is a translation. Read the English original

LoveStack-Funktionen in Exponential 6

LoveStack ist die Distribution von Mugo Web des ursprünglich von eZ Systems veröffentlichten Legacy-Kernels (mugoweb/ezpublish-legacy auf GitHub und Packagist). Im Lauf der Jahre hat Mugo Web ihr eine Reihe wertvoller Funktionen und Korrekturen hinzugefügt. Exponential 6.0.15 übernimmt 36 davon in die Exponential-Distribution, jede in den eigenen APIs von Exponential neu gebaut, dokumentiert und durch Tests abgedeckt, sodass jede Exponential-Website sie zusammen mit den eigenen Funktionen von Exponential verwenden kann. Mit Dank an Mugo Web, auf dessen Arbeit dies aufbaut.

Diese Seite ist der Überblick: was jede Funktion tut, für wen sie gedacht ist, wie Sie sie einschalten, ihre Einstellungen und Standardwerte, was sich bei einem Upgrade und bei einer neuen Installation ändert, der Test, der sie abdeckt, und der LoveStack-Commit, aus dem sie stammt. Die ausführlichen Seiten sind unter Weitere Dokumente aufgeführt.

In einem Satz: Auf einer vorhandenen Website ändert sich nichts, außer Sie schalten es ein; Ausnahmen sind reine Fehlerkorrekturen, einige neue Warnungen und Log-Einstellungen sowie die Sicherheitsprüfungen beim Abmelden (L03) und für hochgeladene Bilder (L05, L06).

Wenn Sie Exponential betreiben und LoveStack nie betrieben haben, ist nichts zu tun: Die Funktionen sind in 6.0.15 enthalten, und diejenigen, die das Verhalten einer Website ändern könnten, sind ausgeschaltet, bis Sie sie einschalten. Wenn Sie LoveStack betreiben, siehe Eine Website von LoveStack umziehen.


Quellenangabe (woher die Funktionen stammen, und wann)

Die in Exponential übernommenen LoveStack-Funktionen wurden aus dem Repository mugoweb/ezpublish-legacy von Mugo Web genommen, wie es am Tag der Portierung stand, dem 12. Oktober 2026. Jede Funktion, jeder Test und jeder Vergleich in diesem Dokument bezieht sich auf genau diesen Commit, sodass die Arbeit jederzeit nachvollzogen und gegen dieselbe Quelle geprüft werden kann.

Repositoryhttps://github.com/mugoweb/ezpublish-legacy (Standard-Branch master, nicht archiviert)
Für die Portierung verwendeter Commite61e9fdf0ca464197b79935ef784ed459721aa87, "Merge pull request #238 from mugoweb/php8-fix"
Quellbaum bei diesem Commithttps://github.com/mugoweb/ezpublish-legacy/tree/e61e9fdf0ca464197b79935ef784ed459721aa87
Datum dieses Commits23. Februar 2026, 08:49:45 UTC (bei der Prüfung am 12. Oktober 2026 weiterhin der neueste Commit auf master)
Damals neuestes Releasev2025.03.1-1, 1. März 2025
Gemeinsamer Vorfahre mit Exponential3429aa91bba018f518fcb41757c9d627a0a73c0f, 9. März 2016 (Upstream ezsystems/ezpublish-legacy)
Verglichene Arbeit von Mugo Web3429aa91bb..e61e9fdf0c: Vergleichsansicht
Zeit seit der letzten Änderung, zum Zeitpunkt der Portierung231 Tage (7 Monate und 19 Tage) seit dem letzten Commit; 590 Tage (über 19 Monate) seit dem letzten Release

Zum Nachvollziehen: git clone https://github.com/mugoweb/ezpublish-legacy && git -C ezpublish-legacy checkout e61e9fdf0ca464197b79935ef784ed459721aa87. Die für jede Funktion (L01–L36) unten genannten Commit-IDs sind Commits in diesem Repository und öffnen sich als https://github.com/mugoweb/ezpublish-legacy/commit/<id>.


Die Funktionen in einfachen Worten

Was die 36 Funktionen sind, gruppiert danach, was sie nach dem Upgrade mit einer vorhandenen Website tun.

Für jede Website eingeschaltet: Korrekturen und Sicherheitsprüfungen

FunktionWas Sie sehen würden
L03Das Abmelden beendet die Sitzung wirklichnach dem Abmelden sind die Sitzung und ihr Cookie weg, statt nur eine neue ID zu erhalten
L05Hochgeladene Bilder werden anhand ihres Inhalts geprüfteine Datei, die kein aufgeführter Bildtyp ist (eine umbenannte Datei, HEIC, SVG), wird abgelehnt
L06Vorschaubilder von Paketen werden ebenso geprüftein gefälschtes Bild als Vorschaubild eines Pakets oder Bild eines Styles wird abgelehnt
L11Datenbankfehler tragen die Fehlernummer des TreibersEntwickler können im Code „doppelter Schlüssel“ von „Tabelle fehlt“ unterscheiden
L12Eine Warnung, wenn eine Änderung jeden View-Cache leerteine Log-Zeile, die sagt, dass eine große Änderung alle View-Caches geleert hat
L20Das Fenster Orte im Bearbeitungsformular erzwingt nicht mehr „Sichtbar“ein versteckter Ort bleibt versteckt, wenn Sie einen weiteren hinzufügen
L21Keine überzähligen Zeilenumbrüche in Auswahl- und Matrixfeldernsauberere Ausgabe
L24Der Dialog für Tief- und Hochstellung schließt, wenn Sie OK drückenwar in Exponential bereits so
L31Templates können Layout-Ansichten wieder unterscheidenFehlerkorrektur für Designer
L34Sehr große Zahlen halten den Suchindex nicht mehr anFehlerkorrektur
L35Relationen verknüpfter Objekte bleiben aus dem Suchindex herauswar in Exponential bereits so
L36Das Verstecken von Inhalten per Cronjob aktualisiert auch den Suchindexversteckte Inhalte erscheinen nicht mehr in der Suche
PHP 8PHP-8-Korrekturen aus LoveStack, nachgestellt und korrigiert, wo noch nötigweniger Deprecations und Fehler unter PHP 8.1 bis 8.5

Für jede Website eingeschaltet: kleine sichtbare Änderungen

FunktionWas Sie sehen würden
L07PHP-Deprecations erhalten eine eigene Debug-Stufe und ein eigenes Logvar/log/deprecated.log; die Debug-Leiste zählt sie, statt sie aufzulisten
L08Die Größe der Log-Dateien ist eine Einstellung, standardmäßig 2 MBweniger, längere Log-Dateien (bisher 200 KB)
L09Eine Warnung, wenn ein Parameter eines Template-Operators keinen Standardwert hatfür Template-Entwickler
L15Eine Schaltfläche Kopieren in der vollständigen Admin-Ansichtbisher gab es Kopieren nur im Kontextmenü
L27Die Template-Operatoren rawurlencode und rawurldecodefür Template-Entwickler
SameSiteDie Einstellung [Session] SameSite von LoveStack wird ebenfalls gelesenfür LoveStack geschriebene Einstellungen funktionieren weiter

Neue Optionen, ausgeschaltet, bis Sie sie einschalten

FunktionWas Sie sehen würden
L10Ein Format für Bearbeitungslinks in der Liste der verwendeten Templates der Debug-Ausgabefür Template-Entwickler
L13Audit-Einträge für das Hinzufügen eines Orts und das Ändern des Hauptortsneue Einträge in der Audit-Konsole (das Entfernen eines Orts wird bereits verzeichnet)
L14Site-Daten in Templates lesbar, dazu eine Liste in der Administrationfür Entwickler und Administratoren
L16„Alternativtext ist erforderlich“ für ein Bildfeld, pro KlasseRedakteure können ein Bild ohne Alternativtext nicht speichern, wo es eingeschaltet ist
L17„Gespeicherten Wert trimmen“ für Textzeilenfelder, pro Klasseführende und nachgestellte Leerzeichen werden beim Speichern entfernt
L18Ihre eigene PHP-Klasse kann den Namen oder URL-Alias eines Objekts erzeugenfür Entwickler
L19Klassenfilter können standardmäßig „include“ seinändert die Ergebnisse von Fetches, daher standardmäßig aus
L22Versteckte Custom TagsCustom Tags, die existieren, aber nicht in der Liste des Editors angeboten werden
L29Zusätzliche Header pro Fehlerseite (zum Beispiel Cache-Control bei 404)in error.ini gesetzt
L30Reihenfolge der Suchergebnisse von ezjscore aus den Sucheinstellungenwird mit der Reihenfolge ausgeliefert, die sie schon immer hatte
L32Anfrageadressen werden einmal dekodiert (%2B bleibt +)einige View-Parameter ändern sich, daher aus
L33Das doppelte Anführungszeichen wird aus IRI-URL-Aliasen entferntneue Aliase können sich von älteren unterscheiden, daher aus

Für neue Installationen eingeschaltet, für Upgrades ausgeschaltet

FunktionWarum sie Sorgfalt brauchtWie damit umgegangen wird
L01ezjscnode (Knotendaten als JSON/XML) kann eine Richtlinie verlangenFrontend-JavaScript, das sie für anonyme Besucher liest, würde nicht mehr funktionieren; heute kann jeder, der einen Knoten lesen darf, auf diese Weise dessen Metadaten lesenbei neuen Installationen ein, bei Upgrades aus; die Liste der Aufrufer sagt, wer sie verwendet
L02Die Registrierung braucht eine RichtlinieWebsites, die sich auf offene Registrierung verlassen, würden den Link „Registrieren“ verlierennur bei neuen Installationen
L04Anmeldenamen werden in der Datenbank eindeutigdas Hinzufügen des Index schlägt fehl, wenn doppelte Anmeldenamen existieren; LDAP oder SSO können Duplikate erzeugenneue Installationen haben den Index; Upgrades erhalten zuerst einen Bericht über Duplikate und den Index nur auf Wunsch
L23Bedienelemente für Custom Tags im Rich-Text-Editorder Editor sieht anders ausbei neuen Installationen ein, bei Upgrades aus

Neue APIs für Entwickler (nur Ergänzungen, nichts Bestehendes ändert sich)

Funktion
L18{MyClass} im Namensmuster einer Klasse: Ihre eigene PHP-Klasse berechnet den Namen oder URL-Alias
L25eZURI::build( $url, $full ): eine Site-URL in einem Aufruf bauen
L26eZMailTransport::send( $mail, $transport ): den Mail-Transport pro Nachricht wählen
L28[Include path/*.ini] in Einstellungsdateien, um große Einstellungen aufzuteilen
L31eZTemplateDesignResource::setKeyValue()

Kurz gesagt

Die sichtbaren neuen Funktionen sind Pflicht-Alternativtext, getrimmte Textfelder, eine Schaltfläche Kopieren, Audit-Einträge für Orte, Bedienelemente für Custom Tags im Editor, zusätzliche Header für Fehlerseiten und Includes in Einstellungsdateien. Die Sicherheitsänderungen sind ezjscnode hinter einer Richtlinie, eine Registrierung, die sich schließen lässt, ein echtes Abmelden, eindeutige Anmeldenamen und Bild-Uploads, die anhand ihres Inhalts geprüft werden. Alles andere sind kleine Fehlerkorrekturen und Hilfen für Entwickler.


Funktion für Funktion

Jeder Eintrag sagt, für wen die Funktion gedacht ist (Redakteur, Administrator, Entwickler), was sie tut, ihre Einstellungen mit ihren ausgelieferten Standardwerten, was eine neue Installation und eine aktualisierte Website erhalten, wie Sie sie einschalten, der Test, der sie abdeckt, und der LoveStack-Commit, aus dem sie stammt. Einstellungen, die Sie ändern, gehören in ein Override (settings/override/<file>.append.php) oder einen Siteaccess, nie in die ausgelieferte Datei; leeren Sie danach den INI-Cache (php bin/php/ezcache.php --clear-tag=ini). Die Testdateien liegen unter tests/tests/ und laufen für sich: php vendor/bin/phpunit tests/tests/<path>.

Sicherheit und Sitzungen

L01 — Knotendaten-Aufrufe können eine Richtlinie verlangen

Für Administratoren. Die ezjscore-Aufrufe ezjscnode::load, ::subtree und ::updatepriority geben Name, IDs, Remote-ID, Besitzer, Sektion, Daten, Klasse und Übersetzungen eines Knotens als JSON oder XML an jeden Benutzer zurück, der den Knoten lesen darf, anonyme Besucher eingeschlossen. Mit RequirePolicy=enabled braucht ein Benutzer zusätzlich die Richtlinie ezjscore / call mit der Funktionsliste ezjscnode.

Einstellungenextension/ezjscore/settings/ezjscore.ini [ezjscServer_ezjscnode] Functions[]=ezjscnode, RequirePolicy=disabled. RequirePolicy funktioniert für jeden Block [ezjscServer_<name>]: nicht gesetzt = Functions[] wird wie bisher geprüft (ein abgelehnter Aufruf antwortet mit seinem Fehlertext); disabled = nicht geprüft; enabled = geprüft, und eine Anfrage, deren Aufrufe alle aus diesem Grund abgelehnt werden, wird mit 403 Forbidden beantwortet
Neue InstallationRequirePolicy=enabled (geschrieben nach settings/override/ezjscore.ini.append.php); die Rolle Editor erhält ezjscore / call mit ezjscnode, das die Liste der Unterelemente und die Vorschau der Bildgrößen des Rich-Text-Editors verwenden. Administratoren haben es über den vollen Zugriff
Upgradeunverändert (RequirePolicy=disabled)
Einschaltengeben Sie ezjscore / call mit der Funktionsliste ezjscnode jeder Rolle, deren Benutzer die Administration ohne vollen Zugriff verwenden, und setzen Sie dann RequirePolicy=enabled in settings/override/ezjscore.ini.append.php. Die ausgelieferten Designs rufen ezjscnode nie für anonyme Besucher auf; siehe wer ezjscnode aufruft
Testextension/ezjscore/ezjscServerRouterPolicyTest.php
LoveStackaa307a7ff3 (2024)
AnleitungRollen und Richtlinien, Abschnitt 8

L02 — Die Registrierung kann eine Richtlinie verlangen

Für Administratoren. Das Registrieren eines neuen Kontos (user/register) kann aus der Liste der Views herausgenommen werden, die jeder öffnen darf; dann braucht es die Richtlinie User / Register. Die Anmeldeseiten von admin und admin4, das Design standard und seine Anmelde-Werkzeugleiste sowie die Designs media und starter zeigen den Link zum Registrieren oder die Schaltfläche Sign Up nur einem Benutzer, der user/register öffnen darf, sodass eine Website ohne offene Registrierung keinen toten Link zeigt.

Einstellungensite.ini [RoleSettings] PolicyOmitListExclude[] (neu, leer) nimmt einzelne Einträge aus PolicyOmitList[] heraus, nachdem jede Einstellungsdatei gelesen ist, sodass die Einträge erhalten bleiben, die Erweiterungen hinzufügen. user/register bleibt in der ausgelieferten PolicyOmitList[]
Neue InstallationPolicyOmitListExclude[]=user/register: Die Registrierung braucht die Richtlinie. Für eine offene Registrierung geben Sie der Rolle Anonymous User / Register
Upgradeunverändert: Die Registrierung und ihr Link bleiben offen
Einschaltenfügen Sie PolicyOmitListExclude[]=user/register unter [RoleSettings] in settings/override/site.ini.append.php hinzu; geben Sie der Rolle Anonymous User / Register, wo die Registrierung offen bleiben soll
Für EntwicklerexpPolicyOmitList::entries(), ::excluded(), ::omits( $module, $view ); in Templates fetch( 'user', 'can_open', hash( 'uri', 'user/register' ) )
Testskernel/classes/expPolicyOmitListTest.php, kernel/content/eZLoginTemplatesRegisterLinkTest.php
LoveStack98854ab935 (2021)
AnleitungRollen und Richtlinien, Abschnitt 8

Für alle. Das Abmelden entfernt die Sitzung und ihren Inhalt, statt ihr eine neue ID zu geben und den Inhalt zu behalten. Jeder Session-Handler sendet das Sitzungs-Cookie abgelaufen, mit demselben Pfad, derselben Domain, Secure, HttpOnly und SameSite, mit denen es gesetzt wurde, sodass der Browser genau dieses Cookie verwirft und die alte Sitzungs-ID niemanden mehr anmeldet. Eine später in derselben Anfrage gestartete Sitzung erhält eine neue ID, unter PHP-FPM wie unter Velocity.

Einstellungenkeine
Neue Installation und Upgradeein
Hinweis für Entwicklereigener Code, der nach eZUser::logoutCurrent() Sitzungsvariablen liest, findet die Sitzung leer. Neu: eZSession::expiredCookie(), eZSession::expireCookie()
Testkernel/classes/eZUserLogoutTest.php
LoveStack13ace6c9c8 (2019)
AnleitungSicherheit und Audit, Abschnitt 1

L04 — Ein Konto pro Anmeldename

Für Administratoren. Ein Anmeldename gehört zu einem Konto. Ein Konsolenbefehl führt die Anmeldenamen auf, die mehr als ein Konto hat (auch solche, die sich nur in der Groß- und Kleinschreibung unterscheiden), und fügt einen eindeutigen Index auf ezuser.login hinzu, sobald es keine mehr gibt. Eine erste Version eines Benutzerkontos, deren Formular die Validierung nicht bestanden hat, wird nicht gespeichert, und ein Entwurf, ein Paketimport, die Kontozeichenkette der Content-API und eine erste Anmeldung über LDAP geben einem Konto keinen Anmeldenamen mehr, den ein anderes Konto hat; zwei Anfragen, die gleichzeitig dasselbe Konto anlegen, enden mit einem Konto.

Befehle./console exp:user-login-check (nur Bericht; --show-logins, --json) und ./console exp:user-login-check --fix-index (fügt den Index nach einem sauberen Bericht hinzu, lehnt sonst ab). Exit-Code 0 sauber oder Index hinzugefügt, 1 Duplikate gefunden oder Index abgelehnt, 2 Fehler
Neue Installationdas Kernel-Schema jeder Engine hat den eindeutigen Index
Upgradedas Datenbank-Update fügt den Index nicht hinzu, weil es bei Duplikaten fehlschlagen würde. Führen Sie den Bericht aus, lösen Sie, was er aufführt, und dann --fix-index
Für EntwicklerexpUserLoginIntegrity::duplicates(), indexStatus(), addUniqueIndex(), loginTakenBy(), storeUser()
Testkernel/classes/expUserLoginIntegrityTest.php
LoveStack826e1d4647 (2020)
AnleitungSicherheit und Audit, Abschnitt 7

L05 — Hochgeladene Bilder werden anhand ihres Inhalts geprüft

Für alle. Fileinfo von PHP liest den Typ eines hochgeladenen Bildes aus seinem Inhalt, und der Typ muss auf einer Liste erlaubter Typen stehen. Eine abgelehnte Datei wird nicht gespeichert. Das gilt für den Bild-Datentyp im Bearbeitungsformular, content/upload, den Upload-Dialog des Rich-Text-Editors, den AJAX-Uploader, WebDAV und Importe; eZContentUpload lehnt eine solche Datei ab, bevor es ein Objekt anlegt.

Einstellungenimage.ini [ImageUploadSettings] ValidateMIMEType=enabled, AllowedMIMETypes[] = image/jpeg, image/png, image/gif, image/webp, image/avif, image/tiff, image/bmp. SVG steht nicht auf der Liste
Neue Installation und Upgradeein: Eine Datei, die ihrem Inhalt nach kein aufgeführtes Bild ist (eine umbenannte Datei, HEIC, SVG), wird mit "A valid image file is required." oder "Images of the type %1 are not accepted." abgelehnt
Um einen weiteren Typ zu akzeptierenfügen Sie ihn in einem Override zu AllowedMIMETypes[] hinzu. ValidateMIMEType=disabled behält nur die Prüfung mit getimagesize(). Ohne die Erweiterung fileinfo entscheidet diese Prüfung, und eine Warnung pro Prozess sagt das
Für EntwicklerexpImageUploadValidator::validate( $path, $originalName = null ) gibt array( 'valid' => bool, 'mime' => string ) zurück
Testskernel/classes/expImageUploadValidatorTest.php, extension/ezjscore/ezjscServerFunctionsAjaxUploaderImageTest.php
LoveStackc8e45fced7 (2017)
AnleitungVerhaltensänderungen vom Oktober 2026

L06 — Vorschaubilder von Paketen werden ebenso geprüft

Für Administratoren. Der Paket-Assistent prüft das Vorschaubild eines neuen Pakets und die Bilder eines Style-Pakets mit derselben Prüfung des Inhalts und derselben Liste erlaubter Typen wie L05.

Einstellungendie von L05
Neue Installation und Upgradeein
Testkernel/classes/packages/eZStylePackageCreatorTest.php
LoveStack04b3b6985a (2018)
AnleitungVerhaltensänderungen vom Oktober 2026

Die Sitzungseinstellung SameSite von LoveStack wird ebenfalls gelesen

Für Administratoren von Websites, die von LoveStack kommen. site.ini [Session] SameSite=, der Name, den LoveStack für das Attribut SameSite des Sitzungs-Cookies verwendet, wird gelesen, wenn CookieSameSite von Exponential nicht gesetzt ist (CookieSameSite gewinnt, wenn beide gesetzt sind), und einmal pro Anfrage auf der Deprecation-Stufe der Debug-Ausgabe vermerkt. Für Besucher ändert sich nichts; benennen Sie die Einstellung in CookieSameSite um, damit der Hinweis verschwindet.

Testlib/ezsession/eZSessionSameSiteAliasTest.php
LoveStacke56cb305f0 (2025)
AnleitungSicherheit und Audit, Abschnitt 1

Diagnose und Protokollierung

L07 — PHP-Deprecations erhalten ein eigenes Log

Für Administratoren und Entwickler. PHP-Deprecations haben eine eigene Debug-Stufe. Sie werden nach var/log/deprecated.log geschrieben, jede eindeutige Meldung einmal pro Anfrage, und nur gezählt: Die Debug-Leiste zeigt ihre Zahl (depr), sie bleiben in der Zahl der Warnungen der Seite, und keine wird im Speicher gehalten oder mit den anderen Meldungen aufgelistet. Unter PHP 8 hält das die Debug-Ausgabe lesbar und ihren Speicherverbrauch niedrig.

Einstellungensite.ini [DebugSettings] DeprecatedLog=enabled. Fügen Sie AlwaysLog[]=deprecated hinzu, um sie auch bei ausgeschalteter Debug-Ausgabe zu schreiben
Neue Installation und Upgradeein; DeprecatedLog=disabled lässt sie wie bisher Warnungen sein
Für EntwicklereZDebug::LEVEL_DEPRECATED, eZDebug::SHOW_DEPRECATED (Teil von SHOW_ALL), eZDebug::writeDeprecated(), eZDebug::deprecatedCount()
Testlib/ezutils/eZDebugDeprecatedTest.php
LoveStackfbbd333a85, e20570a7ad, b7832d110e (2025)
AnleitungPHP-Deprecations und Größe der Log-Dateien

L08 — Größe der Log-Dateien in site.ini

Für Administratoren. Die Größe, bei der Log-Dateien rotiert werden, und wie viele alte Dateien behalten werden, sind Einstellungen, die eZLog und eZDebug lesen.

Einstellungensite.ini [FileSettings] LogFileMaxSize=2097152 (2 MB), LogFileRotateCount=3. eZLog::setMaxLogSize(), setLogrotateFiles() und die Konstanten in config.php haben weiterhin Vorrang davor
Neue Installation und UpgradeLog-Dateien werden bei 2 MB statt bei 200 KB rotiert; LogFileMaxSize=204800 behält die alte Größe
Testlib/ezfile/eZLogMaxSizeTest.php
LoveStacke39dde30ff (2021)
AnleitungPHP-Deprecations und Größe der Log-Dateien

L09 — Eine Warnung für einen Operator-Parameter ohne Standardwert

Für Template-Entwickler. Ein Parameter eines Template-Operators, den das Template weglässt und für den der Operator keinen Standardwert gibt, ist null, mit der Warnung Operator '<op>' has no default value for parameter '<name>', einmal pro Operator und Parameter in einer Anfrage (für ein kompiliertes Template wird einmal gewarnt, beim Kompilieren).

Neue Installation und Upgradeein; nur die Warnung ist neu
Testlib/eztemplate/eZTemplateOperatorDefaultWarningTest.php
LoveStack0bb0bac618 (2016)
AnleitungEin Operator-Parameter ohne Standardwert

Für Template-Entwickler. Die Links „Bearbeiten“ in der Liste der verwendeten Templates der Debug-Ausgabe können auf eine Adresse Ihrer Wahl zeigen, zum Beispiel auf den Template-Editor der Administration.

Einstellungensite.ini [DebugSettings] UsedTemplateEditUrl=, ein Format für sprintf(): %1$s die Adresse des Editors mit der Datei, %2$s der Siteaccess, %3$s die Template-Datei. Leer (ausgeliefert) = der Link, den die Liste schon immer hatte
Neue Installation und Upgradeunverändert, bis gesetzt
Testkernel/common/eZTemplatesStatisticsReporterEditUrlTest.php
LoveStackfb20bee0d2 (2019)
AnleitungBearbeitungslinks in der Liste der verwendeten Templates

L11 — Datenbankfehler tragen die Fehlernummer des Treibers

Für Entwickler. eZDBException::getCode() ist bei jedem Treiber die Fehlernummer des Treibers für die fehlgeschlagene Anweisung, wie errorNumber(): die Nummer von MySQL, der SQLSTATE von PostgreSQL (eine Zeichenkette), der Ergebniscode von SQLite, die ORA-Nummer von Oracle; MongoDB behält den Code des Servers in errorNumber(). Die Seite „Datenbank nicht verfügbar“ (HTTP 503) erkennt außerdem die Fehlernummern, die besagen, dass die Verbindung verloren ging oder nicht hergestellt werden konnte.

Neue Installation und Upgradeein. Das errorNumber() von PostgreSQL ist der SQLSTATE statt 1; bei eingeschalteter Behandlung von Ausnahmen wirft MySQL unter PHP 8.1 und neuer eZDBException statt mysqli_sql_exception
Testlib/ezdb/eZDBExceptionCodeTest.php
LoveStack3d18f47551 (2017)
AnleitungKennen Sie Ihren Datenbanktreiber

L12 — Eine Warnung, wenn eine Änderung jeden View-Cache leert

Für Administratoren. Würde eine Änderung die View-Caches von site.ini [ContentSettings] CacheThreshold oder mehr Knoten leeren und werden stattdessen alle View-Caches als abgelaufen markiert, nennt eine Warnung im Log die Zahl der Knoten und den Schwellenwert (bisher war es eine Debug-Meldung).

Neue Installation und Upgradeein
Testkernel/classes/eZContentCacheManagerThresholdWarningTest.php
LoveStackf9691221a3 (2018)
AnleitungCaches, häufige Fragen

Inhalte, Datentypen und die Administration

L13 — Audit-Einträge für Änderungen an Orten

Für Administratoren. Änderungen an Orten sind Ereignisse des Audit-Protokolls von Exponential (Kanal content): content.node.add einmal pro hinzugefügtem Ort, content.node.remove mit der Angabe, ob der entfernte Ort der Hauptort war, und content.node.main, wenn ein Redakteur einen anderen Hauptort wählt oder der nächste Ort an die Stelle eines entfernten Hauptorts tritt. Die Audit-Konsole zeigt sie als Ort hinzugefügt, Ort entfernt und Hauptort geändert. Die Namen location-assign, location-remove und main-node-update von LoveStack sind diesen Ereignissen zugeordnet, sodass Aufrufe von eZAudit::writeAudit() und Audit-Dateien mit diesen Namen weiter funktionieren.

Einstellungenaudit.ini [AuditEventSettings] Enabled[]; [AuditCompatSettings] Map[] und [AuditSettings] AuditFileNames[] enthalten die Namen von LoveStack
Neue Installation und Upgradecontent.node.remove ein, wie bisher; content.node.add und content.node.main aus
EinschaltenEnabled[]=content.node.add und Enabled[]=content.node.main unter [AuditEventSettings] in settings/override/audit.ini.append.php
Testkernel/content/eZAuditLocationTest.php (braucht eine Datenbank; rollt zurück, was er schreibt)
LoveStack9c931192e0 (2017)
AnleitungAudit-Referenz: Änderungen an Orten

L14 — Site-Daten in Templates und in der Administration

Für Entwickler und Administratoren. Ein Template kann eine Zeile von ezsite_data über ihren Namen lesen, für Namen, die Sie aufführen; Setup > Site-Daten (setup/sitedata, Richtlinie setup/system_info) führt die Zeilen mit Filter und Seitenaufteilung auf, in admin, admin3 und admin4.

Einstellungensite.ini [SiteDataSettings] TemplateReadable[] (leer: nichts ist aus Templates lesbar)
Template{def $row = fetch( 'content', 'site_data', hash( 'name', 'my-flag' ) )} liefert das eZSiteData-Objekt oder false, wenn der Name nicht aufgeführt oder nicht gespeichert ist
Neue Installation und Upgradenichts lesbar, bis ein Name aufgeführt ist; die Liste in der Administration ist vorhanden
Für EntwicklereZSiteData::createNew(), templateReadableNames(), isTemplateReadable(), fetchList(), fetchListCount()
Testskernel/content/eZContentFunctionCollectionSiteDataTest.php, kernel/classes/eZSiteDataCreateTest.php
LoveStack55029bd473, a679a13176, 94b7b6c239 (2017–2019)
AnleitungenSite-Daten in Templates, Site-Daten in den Systeminformationen

L15 — Eine Schaltfläche Kopieren in der vollständigen Admin-Ansicht

Für Redakteure. Die vollständige Ansicht der Administration (admin, admin3, admin4) hat eine Schaltfläche Kopieren neben Verschieben, aktiv mit Erstellrecht am Elternknoten des Elements, wie im Kontextmenü. Sie öffnet dieselben Schritte zum Kopieren wie das Kontextmenü.

Neue Installation und Upgradeein
Testkernel/content/eZAdminFullViewCopyButtonTest.php
LoveStack4d56593614 (2019)
AnleitungAus der vollständigen Ansicht kopieren

L16 — Pflicht-Alternativtext für Bildfelder

Für Redakteure und Administratoren (Barrierefreiheit). Ein Bildattribut kann einen Alternativtext verlangen. Das Bearbeitungsformular, der Upload-Dialog des Online-Editors (auch von Tiptap verwendet) und der AJAX-Uploader von Relationsfeldern lehnen dann ein Bild ohne Alternativtext ab; der AJAX-Uploader hat ein Feld für den Alternativtext für Klassen mit einem Bildattribut. Pakete tragen die Option mit.

Einstellungendie Option des Klassenattributs Alternativtext ist erforderlich auf der Seite zur Bearbeitung der Klasse (eZImageType::ALT_TEXT_REQUIRED_FIELD, data_int2)
Neue Installation und Upgradeaus für jede Klasse
Einschaltenpro Bildattribut, auf der Seite zur Bearbeitung der Klasse
Testskernel/classes/datatypes/eZImageTypeAltTextTest.php, extension/ezjscore/ezjscServerFunctionsAjaxUploaderAltTextTest.php
LoveStacka28863d9c0 (2017)
AnleitungAlternativtext ist erforderlich

L17 — Den gespeicherten Wert von Textzeilenfeldern trimmen

Für Redakteure und Administratoren. Ein Textzeilenattribut kann Leerzeichen am Anfang und am Ende seines Wertes entfernen, im Bearbeitungsformular, bei der Informationssammlung, bei Importen und Uploads.

Einstellungendie Option des Klassenattributs Gespeicherten Wert trimmen (eZStringType::TRIM_FIELD, data_int2)
Neue Installation und Upgradeaus für jede Klasse
Einschaltenpro Textzeilenattribut, auf der Seite zur Bearbeitung der Klasse
Testkernel/classes/datatypes/eZStringTypeTrimTest.php
LoveStack6a5c7dd23e (2020)
AnleitungGespeicherten Wert trimmen

L18 — Von einer PHP-Klasse erzeugte Namen

Für Entwickler. Ein Muster für Objektnamen oder URL-Aliase einer Klasse, das mit {MyResolver} beginnt, wird von Ihrer PHP-Klasse MyResolver aufgelöst, wenn sie aufgeführt ist und expNamePatternResolverInterface implementiert. Jeder andere Name wird protokolliert, und das Muster wird wie üblich aus seinen Token aufgelöst.

Einstellungencontent.ini [NamePatternSettings] ResolverClasses[] (leer)
Neue Installation und Upgradenichts ändert sich, bis eine Klasse aufgeführt ist
Für EntwicklerexpNamePatternResolverInterface::resolveNamePattern( $object, $version, $translation, $length, $sequence ); eZNamePatternResolver::resolve(), customResolver(), limitName(). Der Konstruktor und resolveNamePattern() sind unverändert
Testskernel/classes/eZNamePatternResolverClassTest.php, kernel/classes/eZNamePatternResolverLimitTest.php
LoveStack95d86f5990 (2020)
AnleitungVon einer PHP-Klasse erzeugte Namen

L19 — Standard des Klassenfilters für Fetches

Für Template-Entwickler. Der Typ des Klassenfilters, den die Fetch-Funktionen list, tree, list_count, tree_count und calendar verwenden, wenn ein Fetch class_filter_array ohne class_filter_type angibt.

Einstellungencontent.ini [FetchSettings] DefaultClassFilterType= (leer: die heutigen Ergebnisse, das Array wird ignoriert; include: nach dem Array filtern)
Neue Installation und Upgradeleer
Testkernel/content/eZContentFunctionCollectionClassFilterTypeTest.php
LoveStack9c0ff40a78 (2018)
AnleitungStandard des Klassenfilters für Fetches

L20 — Das Fenster Orte lässt einen versteckten Ort versteckt

Für Redakteure. Im Fenster Orte des Bearbeitungsformulars beginnt ein vorhandener Ort bei „Unverändert“, nicht bei „Sichtbar“, sodass das Veröffentlichen einen versteckten Ort nicht mehr sichtbar macht; ein neuer Ort beginnt so, wie er angegeben wurde (EZP-26501).

Neue Installation und Upgradeein (eine Korrektur)
Testkernel/content/eZEditLocationsVisibilityTest.php
LoveStackf1b7f056b4 (2016)
AnleitungDas Fenster Orte

L21 — Auswahl- und Matrixfelder ohne überzählige Zeilenumbrüche

Für Designer und Besucher. Die View-Templates der Datentypen Auswahl und Matrix schreiben kein überzähliges <br />; mehrere ausgewählte Optionen werden durch je ein <br /> getrennt.

Neue Installation und Upgradeein, für jede Website, die diese Templates nicht überschreibt
Testkernel/datatypes/eZSelectionMatrixViewTemplateTest.php
LoveStackeee7f69fc3, 67eec8f972, 492a946963
AnleitungAuswahl- und Matrixfelder

Rich-Text-Editor

L22 — Versteckte Custom Tags

Für Administratoren und Redakteure. Custom Tags, die Sie aufführen, werden in den Editoren (TinyMCE 3, TinyMCE 8, Tiptap) für neue Tags nicht angeboten. Wo ein versteckter Tag bereits in einem Text steht, wird er weiterhin angezeigt, gerendert, ist bearbeitbar und wird unverändert zurückgespeichert.

Einstellungencontent.ini [CustomTagSettings] IsHidden[] (keiner versteckt)
Neue Installation und Upgradekeiner versteckt
Für EntwicklereZOEXMLInput::hiddenCustomTags(), offeredCustomTags(), die Schlüssel hidden und preview von getCustomTagDefinitions()
Testextension/ezoe/expOECustomTagListTest.php
LoveStacke21ef46691 (2019)
AnleitungVersteckte Custom Tags

L23 — Bedienelemente für Custom Tags im Rich-Text-Editor

Für Redakteure. Ein fokussierter Custom Tag erhält eine Leiste, um ihn nach oben oder unten zu verschieben, ihn zu bearbeiten und zu entfernen (sein Inhalt bleibt), auch mit Alt+Umschalt+Pfeil hoch, Alt+Umschalt+Pfeil runter, Alt+Umschalt+E und Alt+Umschalt+Entf; die Rücktaste in einem leeren Block-Custom-Tag entfernt ihn; jeder Block-Custom-Tag zeigt seinen Namen als Beschriftung; der Dialog eines Tags zeigt images/editor/custom_tags_thumbs/<name>.png aus einem Design als Beispiel. TinyMCE 3 erhält das Plugin exp_customtag_controls (auf der Plugin-API von TinyMCE 3 und dem jQuery von ezjscore gebaut, kein YUI), TinyMCE 8 die Schaltflächen in seiner Werkzeugleiste für Custom Tags, Tiptap dasselbe in exp_oe_tiptap 0.1.2.

Einstellungenezoe.ini [EditorSettings] CustomTagControls=disabled; Stylesheet ezoe_customtags.css (wirkt nur, wenn eingeschaltet)
Neue InstallationCustomTagControls=enabled
Upgradeunverändert (disabled)
EinschaltenCustomTagControls=enabled in settings/override/ezoe.ini.append.php, dann den INI-Cache und die gepackten Skripte leeren: php bin/php/ezcache.php --clear-tag=ini --clear-id=ezjscore-packer
Testextension/ezoe/expOECustomTagAssetsTest.php
LoveStack63334f1681 (2019; sein Plugin custom_tags_controls trägt "Copyright 2014, Mugo Web")
AnleitungBedienelemente für Custom Tags

L24 — Der Dialog sub/sup schließt bei OK

Für Redakteure. Der Dialog der Custom Tags sub und sup von TinyMCE 3 schließt, wenn Sie OK drücken. Das tag_custom.tpl von Exponential hatte diese Korrektur bereits, daher hat sich nichts geändert; es wurde im Browser unter TinyMCE 3 und Tiptap geprüft (TinyMCE 8 hat eigene Schaltflächen für sub und sup).

Testnur Prüfung im Browser (ein JavaScript-Dialog)
LoveStack3a8c14bc0c (2019)

APIs und Einstellungen für Entwickler

L25 — eZURI::build() baut eine Site-URL in einem Aufruf

Für Entwickler. eZURI::build( string $url, bool $full = false, bool $htmlEscape = true ) liefert denselben Link wie der Template-Operator ezurl (Indexdatei und Siteaccess davor; mit $full Schema und Host). Verwenden Sie $htmlEscape = false für eine URL in einem Header oder einer JSON-Antwort.

Testlib/ezutils/eZURIBuildTest.php
LoveStackf2284944b2 (2020)
AnleitungURLs, für Entwickler

L26 — Eine Nachricht mit einem anderen Mail-Transport

Für Entwickler. eZMailTransport::send( eZMail $mail, ?string $transportType = null ) sendet eine Nachricht mit einem anderen Transport aus site.ini [MailSettings] TransportAlias[] (zum Beispiel file), ohne die Einstellung zu ändern; die Mail-Sperre gilt wie bisher.

Testlib/ezutils/eZMailTransportSendTest.php
LoveStackdf07cb1ef5 (2019)
AnleitungTesten, ohne Mails zu senden

L27 — Die Template-Operatoren rawurlencode und rawurldecode

Für Template-Entwickler. Kodierung nach RFC 3986 (%20 für ein Leerzeichen) in Templates: {$value|rawurlencode}. urlencode und urldecode sind unverändert. Alle vier Operatoren liefern einen leeren Text für einen Wert, der nicht gesetzt ist.

Einstellungentemplate.ini [PHP] PHPOperatorList[rawurlencode], PHPOperatorList[rawurldecode] (ausgeliefert)
Neue Installation und Upgradeverfügbar
Testkernel/common/eZTemplateRawURLEncodeOperatorTest.php
LoveStack627004e5c4 (2021)
AnleitungEinen Wert für eine URL kodieren

L28 — [Include …] in Einstellungsdateien

Für Administratoren und Entwickler. Eine Zeile [Include site.d/*.ini] in einer Einstellungsdatei liest an dieser Stelle andere Dateien: Das Muster ist relativ zur einbindenden Datei, Platzhalter sind erlaubt, die Dateien werden in der Reihenfolge ihrer Namen gelesen, Includes lassen sich verschachteln, eine Schleife wird einmal mit einer Warnung gelesen, und ein Muster ohne Treffer ergibt einen Hinweis. Die eingebundenen Dateien sind Teil des INI-Caches, sodass php bin/php/ezcache.php --clear-tag=ini und exp:velocity deploy ihre Änderungen übernehmen. Die Einstellungsseite, der klassische Einstellungseditor und exp:ini behalten die Zeile, wie sie geschrieben ist, und lösen sie nicht auf.

Neue Installation und Upgradenur aktiv, wo eine Datei eine solche Zeile hat
Für EntwicklereZINI::includedFiles()
Testlib/ezutils/eZINIIncludeTest.php
LoveStackf7c382bc2b (2018)
AnleitungEine große Einstellungsdatei aufteilen

L29 — Antwort-Header für Fehlerseiten

Für Administratoren. Jede HTTP-Fehlerseite kann nach ihren Statuszeilen zusätzliche Antwort-Header senden; sie werden mit der Seite im View-Cache gespeichert und von dort erneut gesendet. Ein ungültiger Header-Name oder ein Wert mit einem Zeilenumbruch wird mit einer Warnung weggelassen.

Einstellungenerror.ini [HTTPError-<code>] HeaderList[<name>]=<value>, zum Beispiel HeaderList[Cache-Control]=no-store unter [HTTPError-404] (standardmäßig leer)
Neue Installation und Upgradenichts ändert sich, bis ein Eintrag hinzugefügt wird
Testkernel/error/ErrorHeaderListTest.php
LoveStack97690e9c93 (2017)
AnleitungAntwort-Header von Fehlerseiten

L30 — Die Reihenfolge der Suchergebnisse in den Dialogen der Redakteure

Für Administratoren. Die Suche von ezjscore (verwendet von den Dialogen zum Einbetten und Verlinken des Editors und von der Relationssuche) sortiert Ergebnisse von eZ Find nach den Sucheinstellungen, statt immer das Neueste zuerst.

Einstellungenezfind.ini [SearchSettings] SortBy[]; ezjscore liefert SortBy[published]=desc aus, die Reihenfolge, die es schon immer verwendet hat
Neue Installation und Upgradeunveränderte Reihenfolge; ohne eZ Find oder die Einstellung bleibt die Reihenfolge Neuestes zuerst
Testextension/ezjscore/ezjscServerFunctionsJsSearchSortByTest.php
LoveStack3d2d337b0d, 3af1ec3aee (2025)
AnleitungDie Reihenfolge der Suchergebnisse

L31 — Templates können Layout-Ansichten unterscheiden

Für Designer und Entwickler. Jede Knotenansicht setzt den Override-Schlüssel layout (leer außerhalb von layout/set, das Layout von layout/set bleibt erhalten), sodass ein Template-Override wieder darauf passen kann. Neu: eZTemplateDesignResource::setKeyValue( string $key, $value, bool $override = true ).

Neue Installation und Upgradeein
Testkernel/common/eZTemplateDesignResourceSetKeyValueTest.php
LoveStack856a95e240 (2016)
AnleitungDer Schlüssel layout

URLs und Suche

L32 — Anfrageadressen werden einmal dekodiert

Für Administratoren. Die Adresse einer Anfrage wird einmal statt zweimal dekodiert, sodass /(tag)/bar%2Bbar den View-Parameter bar+bar statt bar bar ergibt. PHP-FPM und Velocity übergeben dem Kernel dieselbe rohe Adresse, und die Schlüssel des Antwort-Caches werden daraus gebildet, daher ändern sie sich nicht.

Einstellungensite.ini [URLTranslator] DecodeOnce=disabled
Neue Installation und Upgradeaus
EinschaltenDecodeOnce=enabled in settings/override/site.ini.append.php, nachdem Sie eigene Links geprüft haben, die ein kodiertes + oder % in einen View-Parameter setzen
Für Entwicklernew eZURI( $uri, $decode ), setURIString( $uri, $fullInitialize, $decode ) (null: der Einstellung folgen), eZURI::decodeOnce()
Testlib/ezutils/eZSysRequestURIDecodeOnceTest.php
LoveStackf435c2f91e (2018)
AnleitungAdressen dekodieren und bereinigen

L33 — Das doppelte Anführungszeichen in IRI-URL-Aliasen

Für Administratoren. Die Bereinigung von URL-Aliasen in LoveStack entfernt !, Punkte und Trennzeichen am Ende eines Alias und behandelt " als reserviertes Zeichen. Exponential entfernt diese nachgestellten Zeichen seit 2016; was hinzukommt, ist das doppelte Anführungszeichen: In der IRI-Transformation (urlalias_iri) wird es zu einem Trennzeichen und wie die anderen an den Enden entfernt.

Einstellungensite.ini [URLTranslator] TrailingCleanup=disabled
Neue Installation und Upgradeaus
EinschaltenTrailingCleanup=enabled in settings/override/site.ini.append.php. Vorhandene Aliase bleiben, bis ihr Objekt erneut veröffentlicht wird; der alte Alias leitet dann weiter
Für EntwicklereZCharTransform::trailingCleanup()
Testlib/ezi18n/eZCharTransformTrailingCleanupTest.php
LoveStack7517c0e925 (2017)
AnleitungAdressen dekodieren und bereinigen

L34 — Sehr große Zahlen halten den Suchindex nicht mehr an

Für Administratoren. Eine Zahl in einem Text jenseits des Wertebereichs der Ganzzahlspalte des eingebauten Suchindex wird als Grenzwert der Spalte gespeichert, statt die Indizierung des Objekts anzuhalten. Jeder Treiber gibt seinen Wertebereich an (MAX_INT, MIN_INT: vorzeichenbehaftet 32 Bit für MySQL, PostgreSQL und andere Treiber, vorzeichenbehaftet 64 Bit für SQLite und MongoDB), und $db->clampInteger( $value ) hält einen Wert darin, auch einen, der als Gleitkommazahl geschrieben ist.

Neue Installation und Upgradeein
Testkernel/search/eZSearchEngineIntegerClampTest.php
LoveStack3774a54ead (2018)
AnleitungZahlen im eingebauten Suchindex

L35 — Relationen verknüpfter Objekte bleiben aus dem Suchindex heraus

Für Administratoren. Der Suchindex lässt die Relationsfelder verknüpfter Objekte weg, und die Relations-Datentypen brauchen keinen Schutz vor Rekursion. Exponential tut dasselbe seit 2018 (EZP-27101), daher gibt es nichts einzuschalten und keine Einstellung; eine Website, die von LoveStack kommt, erhält dieselben Suchergebnisse.

Testkernel/datatypes/eZObjectRelationMetaDataTest.php (dokumentiert das Verhalten, einschließlich eines Zyklus von Relationen)
LoveStack5c089f6250 (2017)
AnleitungZahlen im eingebauten Suchindex

L36 — Der Cronjob hide und der Suchindex

Für Administratoren und Entwickler. Der Cronjob hide (hide.php) teilt der Suchmaschine jeden Knoten mit, den er versteckt (in Exponential seit 2018), und das Ereignis content/cache gibt seinen Listenern von jedem Absender im Kernel ( $nodeIDs, $objectIDs ), jetzt auch von der Seite der URL-Aliase eines Knotens; ein Listener, der nur die Knoten-IDs nimmt, funktioniert weiter.

Neue Installation und Upgradeein
Testskernel/classes/runnable/HideCronjobSearchIndexTest.php, kernel/classes/eZContentCacheEventSendersTest.php
LoveStack3298b53584, 89a5a73877 (2018)
AnleitungCronjobs

PHP-8-Prüfung und weitere Korrekturen

LoveStack enthält etwa vierzig Korrekturen für PHP 7.2 bis 8.3. Jede genannte Stelle wurde unter PHP 8.5 und 8.1 als Regressionstest nachgestellt; die meisten waren in Exponential (das unter PHP 8.1 bis 8.5 läuft) bereits behandelt und bleiben als Tests, die das dokumentieren. Die noch fehlschlagenden sind korrigiert, für jede Installation, ohne dass bei einem Upgrade etwas zu tun ist:

  • die Template-Operatoren get_class und is_class akzeptieren auch ohne Template-Kompilierung einen Wert, der kein Objekt ist (LoveStack e828c54709);
  • wash(email) eines leeren Wertes, der klassische HTML-Debug-Bericht, die Debug-Leiste und ezurl / eZURI einer Zahl oder von null ergeben keine Deprecation „Passing null“ und keine Warnung (LoveStack 4065ed16b3);
  • eZHTTPTool kommt mit $_POST gleich null zurecht (LoveStack 75cbb1daa2);
  • das Update-Skript cleanupfieldvaluerelations.php von 5.4 überspringt leere Relationsdaten, und eZPostgreSQLDB::escapeString( null ) liefert '' (LoveStack 1bd250d4c6);
  • die Bestellungen eines Kunden werden aus den Bestelllisten, dem Archiv, der Kundenliste und dem Dashboard des Shops gefunden, wenn die E-Mail-Adresse ein „+“ enthält (LoveStack 5a17c08bfc). Ein eigenes Design, das auf shop/customerorderview verlinkt, kann auf dieselbe Weise |rawurlencode an die Adresse anfügen.

Der Teil zur Rechtschreibprüfung von LoveStack cb8a3a1c58 war bereits in Exponential und wird jetzt durch einen Test abgesichert. Stelle für Stelle, mit dem Test jeder Stelle: PHP-8-Prüfung.


Eine Website von LoveStack umziehen

Eine LoveStack-Datenbank ist der von Exponential sehr ähnlich. Zwei Konsolenbefehle erledigen die Arbeit, die für sie spezifisch ist:

./console exp:lovestack check            # read only: what the installation brings along, and what to do with it
./console exp:lovestack migrate          # dry run: prints what it would write
./console exp:lovestack migrate --apply  # records the database as Exponential's
  • check führt auf: die Versionszeile lovestack der Datenbank, die Zeile db-schema-version von LoveStack, einen eindeutigen Index auf ezuser.login, eine Spalte data_text NOT NULL DEFAULT '', eine aktive Erweiterung legacy_2018, Einstellungen, die es nur in LoveStack gibt, in settings/override, die Siteaccesses und die Erweiterungen (mit dem Namen in Exponential, wo es einen gibt) und das Paket mugoweb/ezpublish-legacy in composer.json. Exit-Code 0: nichts zu tun; 1: etwas braucht Aufmerksamkeit. --json für einen maschinenlesbaren Bericht.
  • migrate setzt in ezsite_data ezpublish-version von lovestack auf die Version dieses Release (6.0.15stable) und trägt die Schemaversion von LoveStack als lovestack-schema-version ein (die eigene Zeile von LoveStack bleibt). Danach gibt es die Einstellungen und Erweiterungen aus, die von Hand zu ändern sind. Es ändert nie Inhalte oder Einstellungen, ein zweiter Lauf ändert nichts, und eine Datenbank, die nicht von LoveStack stammt, wird mit einer entsprechenden Meldung abgelehnt.
  • Tests: kernel/classes/expLoveStackCheckTest.php und kernel/classes/expLoveStackMigrateTest.php, auf einer Datenbank in der Form von LoveStack, gebaut aus dem Schema von Exponential und den Schemaschritten 1 bis 4 von LoveStack. Dieselben Inhaltsoperationen (Veröffentlichen, neue Versionen, Hinzufügen, Verschieben und Entfernen von Orten, Kopieren, ein neues Klassenattribut an einer Klasse mit Objekten, der Papierkorb) ergeben denselben Inhalt wie auf einer Exponential-Datenbank, sodass die Spalte data_text NOT NULL und der eindeutige Index der Anmeldenamen von LoveStack bleiben können, wie sie sind.

Der vollständige Weg, von den Backups bis zu Ihrem eigenen Code: Eine Website von LoveStack umziehen und der Abschnitt Umstieg von LoveStack der Anleitung zum Upgrade.


Bereits in Exponential

Diese LoveStack-Funktionen waren bereits in Exponential, gleich oder auf die eigene Weise von Exponential:

LoveStack-FunktionIn Exponential
SameSite-Sitzungs-Cookies (2025)site.ini [Session] CookieSameSite, Standard Lax, None nur mit Secure; der Name SameSite von LoveStack wird ebenfalls gelesen (oben)
Passwörter werden nie stillschweigend als MD5 gespeichertder Standardalgorithmus von PHP, HashType=php_default
Längere Mindestpasswörter und generierte Passwörter10 und 16 Zeichen
Erhöhte Passwortsicherheit (EZP-24744)ja
Das Datum, an dem ein Objekt in den Papierkorb kam, und das Sortieren des Papierkorbs danach (EZP-28881)ja, dieselbe Datenbankspalte
WebP-Bilderja
SQLite-Datenbankender eigene SQLite3-Treiber und Schema-Handler von Exponential
Log-Zeilen mit Siteaccess und URLja, auch unter der Velocity-Engine
Maskierte Werte auf der Fehlerseite der Datenbankdie Seite wird von eZExecution::renderErrorPage() gerendert, die Werte maskiert
eZSiteData::create()ja
„Veröffentlichte Version“ in den Objektinformationenja
Objektzustände (EZP-25089), der Rich-Text-Editor unter PHP 7ja
Leere Werte in Benutzerentwürfen werden nicht gespeichert (EZP-29096)ja; ein Entwurf wird nur mit einem freien Anmeldenamen zu einem Konto
Versionsdetails in der AdministrationSetup > Systeminformationen und Info > Über
Unterstützung für PHP 8PHP 8.1 bis 8.5
Deprecations für dynamische Eigenschaften (PHP 8.2)behandelt mit #[AllowDynamicProperties]
Audit standardmäßig eingeschaltetdas eigene Audit-Protokoll von Exponential ist in jeder Installation eingeschaltet (settings/audit.ini Audit=enabled)

Nicht übernommen, und warum

Einige Änderungen von LoveStack passen zur eigenen Arbeitsweise von LoveStack und wurden in Exponential nicht gebraucht, oder Exponential löst dasselbe Problem bereits auf andere Weise. Nichts davon ist ein Urteil über die Arbeit; jeder Punkt hat hier einfach eine andere Antwort.

Punkt in LoveStackWarum Exponential es anders macht
Die Erweiterung legacy_2018 (verschiebt ezenum aus dem Kernel, behält YUI 2.7.0 und die alten Beispieldesigns)Exponential behält ezenum im Kernel und hat YUI durch seine eigene UI-API ersetzt. Eine Website, die von LoveStack kommt, deaktiviert legacy_2018 (zwei Klassen eZEnumType würden kollidieren)
site.ini [HTTPHeaderSettings] SetContentLengthHeaderVelocity, FrankenPHP und der HTTP-Cache senden Content-Length bereits für das, was sie ausliefern, nach der Kompression
update/run.php und der Schemazähler lovestackExponential hat sein Upgrade-SQL pro Release in update/database/<engine>/; exp:lovestack migrate trägt stattdessen eine LoveStack-Datenbank ein
Das Entfernen des dritten Parameters $searchTypes von eZSearch::search()würde eine API ändern, die Such-Plugins Dritter verwenden
eZPersistentObject schreibt '' für Werte, die keine Zeichenketten sinddie null-sichere Behandlung von Exponential behält Zahlen als Zahlen
Neue Formulierung von Debug-Beschriftungen, Konstanten als Array-SchlüsselFormulierung und Stil; Exponential hat dieselben Dateien auf seine eigene Weise geändert
Das Entfernen der Beispiel-Siteaccessesdas Installationsprogramm von Exponential verwaltet seine eigenen Siteaccesses
CSS für alte Browser, Travis, Änderungen an composer und READMEspezifisch für das eigene Packaging von LoveStack
Das Entfernen eines führenden Zeilenumbruchs durch den CSS-Optimiererder Packer von Exponential arbeitet anders
JavaScript-Platzhaltertext ersetzt durch HTML-placeholderabgedeckt durch den Ersatz von YUI in Exponential
Rewrite-Regel für Schriften, Beispielkonfiguration für ApacheExponential dokumentiert seine eigene Einrichtung des Webservers
Der Neuaufbau der Spalte data_text NOT NULL DEFAULT ''eine schwere Änderung an der größten Tabelle, die Exponential nicht braucht; eine Datenbank, die sie bereits hat, funktioniert weiter
Leeren des Caches von ezjscore nach Alterdie Cache-Werkzeuge von Exponential (exp:cache) decken gepackte Dateien ab
Einen Autor ohne E-Mail-Adresse akzeptieren (ezauthor)eher eine Verhaltensänderung als eine PHP-8-Korrektur; vorerst lehnt Exponential ihn weiter ab, wie jedes frühere Release

Wie getestet wurde

Jede der oben genannten Funktionen ist in der PHPUnit-Suite von Exponential abgedeckt. Jede Testdatei läuft für sich, und abgesehen von einigen Tests, die als datenbankabhängig markiert sind (und zurückrollen, was sie schreiben), laufen sie ohne Datenbank. Die Tests, die eine Änderung braucht, lassen sich allein ausführen: siehe nur die Tests einer Änderung ausführen. kernel/classes/expShippedFeatureDefaultsTest.php prüft, dass eine aktualisierte Website die Standardwerte behält, die diese Seite nennt.

Der eigene tests/-Baum von LoveStack wurde ebenfalls mit dem von Exponential verglichen: Jeder Testfall, den Mugo Web seit dem gemeinsamen Vorfahren hinzugefügt oder geändert hat und der Verhalten abdeckt, das Exponential hat, ist in der Suite, für PHPUnit neu gebaut und gewürdigt. Die vollständige Liste steht in Tests, Funktion für Funktion und Die Tests von LoveStack in der Testsuite von Exponential.


Lizenz und Danksagungen

  • LoveStack steht unter der GNU GPL Version 2 (seine LICENSE, mit dem Urheberrecht von eZ Systems; composer.json: GPL-2.0). Exponential steht unter der GNU GPL Version 2 oder später (GPL-2.0-or-later). Die Änderungen von Mugo Web stehen unter derselben GPL Version 2 und dürfen daher mit Exponential kombiniert werden; die davon abgeleiteten Teile werden unter den Bedingungen der GPL Version 2 verbreitet.
  • Jede Funktion auf dieser Seite wird als von der Arbeit von Mugo Web abgeleitet behandelt, auch dort, wo sie neu gebaut statt kopiert wurde. Jede Datei mit abgeleitetem Code behält jeden vorhandenen Urheberrechtshinweis und fügt die Zeile Portions derived from LoveStack (mugoweb/ezpublish-legacy, commit <sha>), Copyright (C) Mugo Web, GPL v2 hinzu; der LoveStack-Commit wird in der Commit-Nachricht und im Changelog von 6.0.15 genannt.
  • Die Bedienelemente für Custom Tags (L23) folgen dem Entwurf des Editor-Plugins custom_tags_controls von LoveStack, "Copyright 2014, Mugo Web"; dieser Hinweis wandert mit den abgeleiteten Teilen.
  • Die Formulierung der Doppellizenz in der ursprünglichen README von eZ Systems kann immer nur von eZ Systems für den Code von eZ Systems gewährt werden; sie gibt keine Rechte am Code von Mugo Web oder von Exponential.
  • „LoveStack“ ist der Name, den Mugo Web für seine Distribution verwendet. Exponential verwendet ihn nur, um zu beschreiben, woher eine Funktion stammt; keine Klasse, keine Einstellung und kein Produkt in Exponential trägt ihn, abgesehen vom Befehl exp:lovestack für Websites, die von dort umziehen. Nichts hier impliziert, dass Mugo Web Exponential unterstützt.

Danke an Mugo Web für Jahre sorgfältiger Arbeit am Legacy-Kernel, dafür, ihre Schemaschritte so genau zu dokumentieren, dass eine LoveStack-Datenbank erkannt und umgezogen werden kann, und dafür, alles als Open Source zu veröffentlichen. Diese Seite gibt es wegen dieser Arbeit.


Weitere Dokumente

DokumentFür
love/README.mdder Index der ausführlichen Seiten
love/erste-schritte.mdalle: betrifft mich das, und wo fange ich an
love/funktionen.mdjede Funktion mit ihrem Standard bei einem Upgrade und bei einer neuen Installation, in einer Tabelle pro Bereich
love/api.mdKlassen, Methoden, Einstellungen, Template-Funktionen und Konsolenbefehle, für Entwickler
love/migration.mdeine LoveStack-Website Schritt für Schritt auf Exponential umziehen
love/testen.mddie Tests jeder Funktion und wie Sie sie ausführen
love/zuordnung-der-tests.mddie eigenen Testfälle von LoveStack und wo sie in der Suite von Exponential stehen
love/php8-pruefung.mddie Korrekturen von LoveStack für PHP 7.2 bis 8.3, Stelle für Stelle
love/l01-aufrufer.mdwer ezjscnode aufruft und was das Einschalten von L01 ändert
love/faq.mdhäufige Fragen
love/roadmap.mdwie die Arbeit gemacht wurde und was als Nächstes kommt
love/changelog.mddie Releases, die diese Funktionen enthalten

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x