Entries-Boxen kollidieren mit Lexicon von VieCode

  • Hey, ich habe folgenden Fall festgestellt, vielleicht kannst du es dir ansehen?

    Entries-Boxen kollidieren mit Lexicon von VieCode

    Entries-Plugin: 6.1.10
    VieCode Lexicon: 7.1.17
    WoltLab Suite: 6.1.16
    PHP: 8.3.x

    Fehlerbeschreibung:

    Wenn Entries und VieCode Lexicon parallel installiert sind, verursachen Entries-Boxen auf Lexicon-Seiten einen Fatal Error, sobald diese gerendert werden (z. B. Kategorienliste, Kommentarliste, Eintragsliste).

    Fehlermeldung:

    Code
    unknown method 'getBoxesCategoryIDs'
    Error Class: wcf\system\exception\SystemException
    File: lib/data/DatabaseObjectDecorator.class.php (92)

    Technischer Hintergrund:
    Die Entries-Box-Templates greifen auf die globale Variable $category zu und rufen darauf getBoxesCategoryIDs() auf.
    Diese Methode existiert nur auf EntriesCategory.

    Auf Lexicon-Seiten stammt $category jedoch aus dem Wiki-Kontext (Lexicon-Kategorie). Dadurch wird eine Entries-spezifische Methode auf einem falschen Objekt aufgerufen, was zum Fehler führt.

    Je nach Anpassung tritt zusätzlich auf:

    Code
    Undefined array key "activeCategory" 

    wenn activeCategory von einzelnen Box-Controllern nicht an das Template übergeben wird.

    Reproduktion

    1. WoltLab Suite 6.1
    2. Installierte Plugins:
      • Entries 6.1.10
      • VieCode Lexicon 7.1.17
    3. Eine Entries-Box so platzieren, dass sie auch auf Lexicon-Seiten angezeigt wird (z. B. Sidebar).
    4. Eine beliebige Lexicon-Seite aufrufen (z. B. /lexicon/entry/2-beispielartikel/).

    Ergebnis: Fatal Error auf Lexicon-Seiten
    Nicht betroffen: Reine Entries-Seiten

    Lösungsvorschlag (Entries-seitig)

    • In den Templates nicht den globalen $category-Kontext verwenden.
    • Stattdessen ausschließlich $activeCategory (Entries-spezifisch) nutzen.
    • Vor Verwendung prüfen, ob $activeCategory existiert.
    • Alle Box-Controller, die diese Templates verwenden, sollten activeCategory an das Template übergeben (bei nicht-Entries-Requests z. B. null).

    Beispielhafte Absicherung im Template (Smarty)

    Die Bedingung stellt sicher, dass getBoxesCategoryIDs() nur aufgerufen wird, wenn eine Entries- activeCategory gesetzt ist

    Code
    {if (($controllerName|isset && $controllerName === 'CategoryEntryList')
        || $templateName === 'entry')
        && ENTRIES_LIST_FILTER_BOXES_SEPARATELY
        && $activeCategory|isset
        && $activeCategory}
        {assign var=categoryList value=$categoryTree->filterCategoryLists(
            $activeCategory->getBoxesCategoryIDs()
        )}
    {/if}

    Betroffene Templates (Auswahl)

    • boxEntryCategoryList.tpl
    • boxEntryCategories.tpl
    • boxEntryList.tpl
    • boxEntryStatistics.tpl
    • boxSidebarCommentList.tpl
    • boxMostActiveAuthors.tpl

    Kurz gesagt:

    Entries-Boxen rufen Entries-spezifische Methoden auf Lexicon-Kategorien auf.
    Lösungsvorschlag: Verwendung von $activeCategory mit Existenzprüfung statt $category.

  • Julian Pfeil February 9, 2026 at 10:51 AM

    Added the label Fixed

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!