Hallo,
ich stecke gerade mehr oder weniger an einem Fehler fest, welchen ich nicht nachvollziehen kann. Vielleicht kann sich jemand ja etwas darunter vorstellen.
Ausgangssituation: Ich erweitere das Lexikon von VieCode. In dem Lexikon wird bei Einträgen das Array "moduleList" in der EntryPage.class.php in das Template gerendert und beinhaltet alle Module (Unterseiten) zu diesem Eintrag.
Ich manipuliere das Array $this->moduleList (BEVOR es ins Template gerendet wird) über ein EventListener auf assignVariables. Unter gegebenen Umständen möchte ich nämlich nicht, dass der Benutzer eine bestimme Unterseite sieht und entferne diese vor dem Rendern aus dem Array.
Der Code sieht wie folgt aus (gekürzt):
protected function onAssignVariables(EntryPage $page): void
{
if (!WCF::getSession()->getPermission('user.grouprestriction.canSeeAllHiddenContent') && isset($page->moduleList->objects)) {
foreach ($page->moduleList->objects as $key => $module) {
if ($module->onlyGroups === 1) {
unset($page->moduleList->objects[$key]);
}
}
}
}
Alles anzeigen
Jetzt ist es so, dass ich bei einigen Lexikon Einträgen beim Aufruf folgende Fehlermeldung bekomme und bei anderen Einträgen funktioniert alles wunderbar und die Unterseite wird nicht angezeigt. Datenbanktechnisch sind alle Einträge gleich, es gibt keine Unterschiede im Inhalt.
Error Message:
Undefined array key 85
Stack Trace:
#0 */lib/data/DatabaseObjectList.class.php (325):
wcf\system\WCF::handleError()
#1 */templates/compiled/0_lexicon_1_entry.php (1861):
wcf\data\DatabaseObjectList->current()
#2 */lib/system/template/TemplateEngine.class.php (346):
include('[error_during_sanitization]')
#3 */lib/page/AbstractPage.class.php (371):
wcf\system\template\TemplateEngine->display()
#4 */lib/page/AbstractPage.class.php (122):
wcf\page\AbstractPage->show()
#5 */lib/system/request/Request.class.php (89):
wcf\page\AbstractPage->__run()
#6 */lib/system/request/RequestHandler.class.php (119):
wcf\system\request\Request->execute()
#7 */lexicon/index.php (11):
wcf\system\request\RequestHandler->handle()
Alles anzeigen
Ich habe natürlich erst einmal überprüft ob es den Key 85 ggf. wirklich nicht gibt. Der Key ist in dem Lexikon-Eintrag aber definitiv vorhanden (sonst würde er ja auch nicht durch die foreach-Schleife ausgegeben werden).
Ich kann den Fehler nicht mehr nachvollziehen - auch wenn er erst einmal recht trivial zu beheben erscheint. Im Template werden auch lediglich die Unterseiten ausgegeben, welche ins Template gerendert wurden. Somit wird auch im Template nicht explizit auf irgendeinen Key zugegriffen.
Ich teste weiter, aber vielleicht weiß ja jemand eine Lösung oder hatte so etwas ähnliches schonmal.
Grüße,
JAY