Error
Call to a member function getChildren() on null Error thrown with message "Call to a member function getChildren() on null" Stacktrace: #12 Error in /mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/addons/structure/lib/navigation.php:381 #11 rex_navigation:_getNavigation in /mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/addons/structure/lib/navigation.php:102 #10 rex_navigation:get in rex:///template/8:76 #9 require in /mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/addons/structure/plugins/content/lib/article_content_base.php:443 #8 rex_article_content_base:{closure} in /mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/lib/util/timer.php:62 #7 rex_timer:measure in /mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/addons/structure/plugins/content/lib/article_content_base.php:444 #6 rex_article_content_base:getArticleTemplate in /mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/addons/structure/plugins/content/boot.php:58 #5 rex_package:{closure} in /mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/lib/extension.php:52 #4 rex_extension:{closure} in /mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/lib/util/timer.php:62 #3 rex_timer:measure in /mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/lib/extension.php:63 #2 rex_extension:registerPoint in /mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/frontend.php:22 #1 require in /mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/boot.php:155 #0 require in /mnt/web006/d3/46/56998646/htdocs/redaxo2022/index.php:9
Stack frames (13)
12
Error
/redaxo/src/addons/structure/lib/navigation.php381
11
rex_navigation _getNavigation
/redaxo/src/addons/structure/lib/navigation.php102
10
rex_navigation get
rex:///template/876
9
require
/redaxo/src/addons/structure/plugins/content/lib/article_content_base.php443
8
rex_article_content_base {closure}
/redaxo/src/core/lib/util/timer.php62
7
rex_timer measure
/redaxo/src/addons/structure/plugins/content/lib/article_content_base.php444
6
rex_article_content_base getArticleTemplate
/redaxo/src/addons/structure/plugins/content/boot.php58
5
rex_package {closure}
/redaxo/src/core/lib/extension.php52
4
rex_extension {closure}
/redaxo/src/core/lib/util/timer.php62
3
rex_timer measure
/redaxo/src/core/lib/extension.php63
2
rex_extension registerPoint
/redaxo/src/core/frontend.php22
1
require
/redaxo/src/core/boot.php155
0
require
/index.php9
/mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/addons/structure/lib/navigation.php
                if (!$result) {
                    return false;
                }
            }
        }
        return true;
    }
 
    /**
     * @param int $categoryId
     * @param int $depth
     *
     * @return string
     */
    protected function _getNavigation($categoryId, $depth = 1)
    {
        if ($categoryId < 1) {
            $navObj = rex_category::getRootCategories();
        } else {
            $navObj = rex_category::get($categoryId)->getChildren();
        }
 
        $lis = [];
        foreach ($navObj as $nav) {
            $li = [];
            $a = [];
            $li['class'] = [];
            $a['class'] = [];
            $a['href'] = [$nav->getUrl()];
            $aContent = rex_escape($nav->getName());
            if ($this->checkFilter($nav, $depth) && $this->checkCallbacks($nav, $depth, $li, $a, $aContent)) {
                $li['class'][] = 'rex-article-' . $nav->getId();
                // classes abhaengig vom pfad
                if ($nav->getId() == $this->currentCategoryId) {
                    $li['class'][] = 'rex-current';
                    $a['class'][] = 'rex-current';
                } elseif (in_array($nav->getId(), $this->path)) {
                    $li['class'][] = 'rex-active';
                    $a['class'][] = 'rex-active';
                } else {
Arguments
  1. "Call to a member function getChildren() on null"
    
/mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/addons/structure/lib/navigation.php
     * @param int $categoryId Id der Wurzelkategorie
     * @param int $depth Anzahl der Ebenen die angezeigt werden sollen
     * @param bool $open True, wenn nur Elemente der aktiven Kategorie angezeigt werden sollen, sonst FALSE
     * @param bool $ignoreOfflines FALSE, wenn offline Elemente angezeigt werden, sonst TRUE
     *
     * @return string
     */
    public function get($categoryId = 0, $depth = 3, $open = false, $ignoreOfflines = false)
    {
        if (!$this->_setActivePath()) {
            return '';
        }
 
        $this->depth = $depth;
        $this->open = $open;
        if ($ignoreOfflines) {
            $this->addFilter('status', 1, '==');
        }
 
        return $this->_getNavigation($categoryId);
    }
 
    /**
     * @see get()
     *
     * @param int $categoryId
     * @param int $depth
     * @param bool $open
     * @param bool $ignoreOfflines
     * @return void
     */
    public function show($categoryId = 0, $depth = 3, $open = false, $ignoreOfflines = false)
    {
        echo $this->get($categoryId, $depth, $open, $ignoreOfflines);
    }
 
    /**
     * Generiert eine Breadcrumb-Navigation.
     *
     * @param string|false $startPageLabel Label der Startseite, falls FALSE keine Start-Page anzeigen
    </div>

<!-- = Content ================================================================ -->
<div id="content" class="p20">
<?php echo $this->getArticle('4'); ?>
<div class="container">
        <!-- links -->
        <div class="col-lg-9 col-md-9 col-sm-12 col-xs-12"><?php echo $this->getArticle('1'); ?></div>
        <!-- links -->
        <!-- rechts -->
        <div class="col-lg-3 col-md-3 col-sm-12 col-xs-12">
<div class="mtb"></div>
<div id="seitmenu">

<?php 
$P = explode("|",$this->getValue("path").$this->getValue("article_id")."|"); 
$rexnav2 = rex_navigation::factory(); 
$rexnav2->addFilter('cat_domain', '~\|right\|~ism', 'regex');
$rexnav2->addCallback('rex_ycom_auth::articleIsPermitted');
echo $rexnav2->get($P[1],5,FALSE,TRUE); 
?>
</div>
<?php echo $this->getArticle('2'); ?>
</div>
        <!-- rechts -->
</div>
<?php echo $this->getArticle('3'); ?>

<div class="clear"></div>

</div>
<?= /* REX_TEMPLATE[5] */ rex_var_template::getTemplateOutput(5, new rex_timer(), require rex_var_template::getTemplateStream(5, $this)), "\r\n" ?>
</body>

</html>
/mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/addons/structure/plugins/content/lib/article_content_base.php
    }
 
    // ----- Template inklusive Artikel zurückgeben
 
    /**
     * @return string
     */
    public function getArticleTemplate()
    {
        if (0 != $this->template_id && 0 != $this->article_id) {
            ob_start();
            try {
                ob_implicit_flush(false);
 
                $TEMPLATE = new rex_template($this->template_id);
 
                rex_timer::measure('Template: ' . ($TEMPLATE->getKey() ?? $TEMPLATE->getId()), function () use ($TEMPLATE) {
                    $tplContent = $this->replaceCommonVars($TEMPLATE->getTemplate());
 
                    require rex_stream::factory('template/' . $this->template_id, $tplContent);
                });
            } finally {
                $CONTENT = ob_get_clean();
            }
 
            return $this->replaceLinks($CONTENT);
        }
 
        return 'no template';
    }
 
    /**
     * @param string $path
     * @param string $content
     * @return string
     */
    protected function getStreamOutput($path, $content)
    {
        if (!$this->eval) {
            $key = 'EOD_' . strtoupper(sha1((string) time()));
Arguments
  1. "rex:///template/8"
    
/mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/lib/util/timer.php
     *
     * On sufficient user permissions - or in debug mode - this timings will be sent over the wire to the browser via server timing api http headers.
     *
     * @template T
     *
     * @param string $label
     * @param callable():T $callable
     *
     * @return T result of callable
     */
    public static function measure($label, callable $callable)
    {
        if (!rex::isDebugMode()) {
            return $callable();
        }
 
        $timer = new self();
 
        try {
            return $callable();
        } finally {
            $timer->stop();
 
            self::measured($label, $timer);
        }
    }
 
    /**
     * Saves the measurement of the given timer.
     *
     * This method should be used only if the measured code can not be wrapped inside a callable, otherwise use `measure()`.
     */
    public static function measured(string $label, self $timer): void
    {
        $duration = self::$serverTimings[$label]['sum'] ?? 0;
        $duration += $timer->getDelta(self::MILLISEC);
 
        self::$serverTimings[$label]['sum'] = $duration;
        self::$serverTimings[$label]['timings'][] = [
            'start' => $timer->start,
/mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/addons/structure/plugins/content/lib/article_content_base.php
 
    // ----- Template inklusive Artikel zurückgeben
 
    /**
     * @return string
     */
    public function getArticleTemplate()
    {
        if (0 != $this->template_id && 0 != $this->article_id) {
            ob_start();
            try {
                ob_implicit_flush(false);
 
                $TEMPLATE = new rex_template($this->template_id);
 
                rex_timer::measure('Template: ' . ($TEMPLATE->getKey() ?? $TEMPLATE->getId()), function () use ($TEMPLATE) {
                    $tplContent = $this->replaceCommonVars($TEMPLATE->getTemplate());
 
                    require rex_stream::factory('template/' . $this->template_id, $tplContent);
                });
            } finally {
                $CONTENT = ob_get_clean();
            }
 
            return $this->replaceLinks($CONTENT);
        }
 
        return 'no template';
    }
 
    /**
     * @param string $path
     * @param string $content
     * @return string
     */
    protected function getStreamOutput($path, $content)
    {
        if (!$this->eval) {
            $key = 'EOD_' . strtoupper(sha1((string) time()));
            return "require rex_stream::factory('$path', <<<'$key'\n$content\n$key);\n";
/mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/addons/structure/plugins/content/boot.php
        $content = $ep->getSubject();
 
        $article = new rex_article_content();
        $article->setCLang(rex_clang::getCurrentId());
 
        if (!$article->setArticleId(rex_article::getCurrentId())) {
            if (!rex::isDebugMode() && !rex_backend_login::hasSession()) {
                throw new rex_exception('Article with id ' . rex_article::getCurrentId() . ' does not exist');
            }
 
            $fragment = new rex_fragment([
                'content' => '<p><b>Article with ID ' . rex_article::getCurrentId() . ' not found.</b><br />If this is a fresh setup, an article must be created first.<br />Enter <a href="' . rex_url::backendController() . '">REDAXO</a>.</p>',
            ]);
            $content .= $fragment->parse('core/fe_ooops.php');
            rex_response::sendPage($content);
            exit;
        }
 
        try {
            $content .= $article->getArticleTemplate();
        } catch (rex_article_not_found_exception) {
            $article = new rex_article_content();
            $article->setCLang(rex_clang::getCurrentId());
            $article->setArticleId(rex_article::getNotfoundArticleId());
 
            $content .= $article->getArticleTemplate();
        }
 
        $artId = $article->getArticleId();
        if ($artId == rex_article::getNotfoundArticleId() && $artId != rex_article::getSiteStartArticleId()) {
            rex_response::setStatus(rex_response::HTTP_NOT_FOUND);
        }
 
        // ----- inhalt ausgeben
        rex_response::sendPage($content, $article->getValue('updatedate'));
    });
}
 
rex_extension::register('EDITOR_URL', static function (rex_extension_point $ep) {
    $urls = [
/mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/lib/extension.php
     */
    public static function registerPoint(rex_extension_point $extensionPoint)
    {
        if ($factoryClass = static::getExplicitFactoryClass()) {
            return $factoryClass::registerPoint($extensionPoint);
        }
 
        $name = $extensionPoint->getName();
 
        rex_timer::measure('EP: ' . $name, static function () use ($extensionPoint, $name) {
            foreach ([self::EARLY, self::NORMAL, self::LATE] as $level) {
                if (!isset(self::$extensions[$name][$level]) || !is_array(self::$extensions[$name][$level])) {
                    continue;
                }
 
                foreach (self::$extensions[$name][$level] as $extensionAndParams) {
                    [$extension, $params] = $extensionAndParams;
                    $extensionPoint->setExtensionParams($params);
                    /** @var T|null $subject */
                    $subject = call_user_func($extension, $extensionPoint);
                    // Update subject only if the EP is not readonly and the extension has returned something
                    if ($extensionPoint->isReadonly()) {
                        continue;
                    }
                    if (null === $subject) {
                        continue;
                    }
                    $extensionPoint->setSubject($subject);
                }
            }
        });
 
        return $extensionPoint->getSubject();
    }
 
    /**
     * Registers an extension for an extension point.
     *
     * @template T as rex_extension_point
     * @param string|string[] $extensionPoint Name(s) of extension point(s)
/mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/lib/util/timer.php
     *
     * On sufficient user permissions - or in debug mode - this timings will be sent over the wire to the browser via server timing api http headers.
     *
     * @template T
     *
     * @param string $label
     * @param callable():T $callable
     *
     * @return T result of callable
     */
    public static function measure($label, callable $callable)
    {
        if (!rex::isDebugMode()) {
            return $callable();
        }
 
        $timer = new self();
 
        try {
            return $callable();
        } finally {
            $timer->stop();
 
            self::measured($label, $timer);
        }
    }
 
    /**
     * Saves the measurement of the given timer.
     *
     * This method should be used only if the measured code can not be wrapped inside a callable, otherwise use `measure()`.
     */
    public static function measured(string $label, self $timer): void
    {
        $duration = self::$serverTimings[$label]['sum'] ?? 0;
        $duration += $timer->getDelta(self::MILLISEC);
 
        self::$serverTimings[$label]['sum'] = $duration;
        self::$serverTimings[$label]['timings'][] = [
            'start' => $timer->start,
/mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/lib/extension.php
                if (!isset(self::$extensions[$name][$level]) || !is_array(self::$extensions[$name][$level])) {
                    continue;
                }
 
                foreach (self::$extensions[$name][$level] as $extensionAndParams) {
                    [$extension, $params] = $extensionAndParams;
                    $extensionPoint->setExtensionParams($params);
                    /** @var T|null $subject */
                    $subject = call_user_func($extension, $extensionPoint);
                    // Update subject only if the EP is not readonly and the extension has returned something
                    if ($extensionPoint->isReadonly()) {
                        continue;
                    }
                    if (null === $subject) {
                        continue;
                    }
                    $extensionPoint->setSubject($subject);
                }
            }
        });
 
        return $extensionPoint->getSubject();
    }
 
    /**
     * Registers an extension for an extension point.
     *
     * @template T as rex_extension_point
     * @param string|string[] $extensionPoint Name(s) of extension point(s)
     * @param callable(T):mixed $extension Callback extension
     * @param self::* $level Runlevel (`rex_extension::EARLY`, `rex_extension::NORMAL` or `rex_extension::LATE`)
     * @param array $params Additional params
     * @return void
     */
    public static function register($extensionPoint, callable $extension, $level = self::NORMAL, array $params = [])
    {
        if ($factoryClass = static::getExplicitFactoryClass()) {
            $factoryClass::register($extensionPoint, $extension, $level, $params);
            return;
        }
/mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/frontend.php
if (rex::isSetup()) {
    rex_response::sendRedirect(rex_url::backendController());
}
 
if (rex::isDebugMode()) {
    header('X-Robots-Tag: noindex, nofollow, noarchive');
}
 
// ----- INCLUDE ADDONS
include_once rex_path::core('packages.php');
 
// ----- caching end für output filter
$CONTENT = ob_get_clean();
 
// trigger api functions. the api function is responsible for checking permissions.
rex_api_function::handleCall();
 
if (rex_extension::isRegistered('FE_OUTPUT')) {
    // ----- EXTENSION POINT
    rex_extension::registerPoint(new rex_extension_point('FE_OUTPUT', $CONTENT));
} else {
    // ----- inhalt ausgeben
    rex_response::sendPage($CONTENT);
}
 
/mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/boot.php
        rex_clang::setCurrentId($clangId);
    }
}
 
// ----------------- HTTPS REDIRECT
if ('cli' !== PHP_SAPI && !rex::isSetup()) {
    if ((true === rex::getProperty('use_https') || rex::getEnvironment() === rex::getProperty('use_https')) && !rex_request::isHttps()) {
        rex_response::enforceHttps();
    }
 
    if (true === rex::getProperty('use_hsts') && rex_request::isHttps()) {
        rex_response::setHeader('Strict-Transport-Security', 'max-age='.(int) rex::getProperty('hsts_max_age', 31536000)); // default 1 year
    }
}
 
rex_extension::register('SESSION_REGENERATED', [rex_backend_login::class, 'sessionRegenerated']);
 
if (isset($REX['LOAD_PAGE']) && $REX['LOAD_PAGE']) {
    unset($REX);
    require rex_path::core(rex::isBackend() ? 'backend.php' : 'frontend.php');
}
 
Arguments
  1. "/mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/frontend.php"
    
/mnt/web006/d3/46/56998646/htdocs/redaxo2022/index.php
<?php
 
unset($REX);
$REX['REDAXO'] = false;
$REX['HTDOCS_PATH'] = './';
$REX['BACKEND_FOLDER'] = 'redaxo';
$REX['LOAD_PAGE'] = true;
 
require $REX['BACKEND_FOLDER'] . '/src/core/boot.php';
 
Arguments
  1. "/mnt/web006/d3/46/56998646/htdocs/redaxo2022/redaxo/src/core/boot.php"
    

Environment & details:

Key Value
downloads
"d-schueler.jpg"
r
"62ba40ead05bd"
empty
empty
empty
empty
Key Value
REDIRECT_STATUS
"200"
UNIQUE_ID
"ZgVCYMDPJK9hN_oqI_VIPwAACrY"
SCRIPT_URL
"/en/website-microbiology/microbe-of-the-year/contact-press/press-images/"
SCRIPT_URI
"https://vaam.de/en/website-microbiology/microbe-of-the-year/contact-press/press-images/"
HTTPS
"on"
DOCUMENT_ROOT
"/home/strato/http/premium/rid/86/46/56998646/htdocs/redaxo2022/"
RZ_php
"81"
PHPRC
"/home/strato/http/premium/rid/86/46/56998646/htdocs/redaxo2022/"
HTTP_HOST
"vaam.de"
HTTP_ACCEPT
"*/*"
HTTP_USER_AGENT
"claudebot"
HTTP_CONNECTION
"close"
PATH
"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
SERVER_SOFTWARE
"Apache/2.4.58 (Unix)"
SERVER_NAME
"vaam.de"
SERVER_PORT
"443"
REMOTE_ADDR
"3.237.91.98"
SERVER_ADMIN
"service@webmailer.de"
SCRIPT_FILENAME
"/home/strato/http/premium/rid/86/46/56998646/htdocs/redaxo2022/index.php"
REMOTE_PORT
"32922"
REDIRECT_URL
"/en/website-microbiology/microbe-of-the-year/contact-press/press-images/"
REDIRECT_QUERY_STRING
"downloads=d-schueler.jpg&r=62ba40ead05bd"
GATEWAY_INTERFACE
"CGI/1.1"
SERVER_PROTOCOL
"HTTP/1.1"
REQUEST_METHOD
"GET"
QUERY_STRING
"downloads=d-schueler.jpg&r=62ba40ead05bd"
REQUEST_URI
"/en/website-microbiology/microbe-of-the-year/contact-press/press-images/?downloads=d-schueler.jpg&r=62ba40ead05bd"
SCRIPT_NAME
"/index.php"
PHP_SELF
"/index.php"
REQUEST_TIME_FLOAT
1711620704.1181
REQUEST_TIME
1711620704
argv
array:1 [
  0 => "downloads=d-schueler.jpg&r=62ba40ead05bd"
]
argc
1
Key Value
REDIRECT_STATUS
"200"
UNIQUE_ID
"ZgVCYMDPJK9hN_oqI_VIPwAACrY"
SCRIPT_URL
"/en/website-microbiology/microbe-of-the-year/contact-press/press-images/"
SCRIPT_URI
"https://vaam.de/en/website-microbiology/microbe-of-the-year/contact-press/press-images/"
HTTPS
"on"
DOCUMENT_ROOT
"/home/strato/http/premium/rid/86/46/56998646/htdocs/redaxo2022/"
RZ_php
"81"
PHPRC
"/home/strato/http/premium/rid/86/46/56998646/htdocs/redaxo2022/"
HTTP_HOST
"vaam.de"
HTTP_ACCEPT
"*/*"
HTTP_USER_AGENT
"claudebot"
HTTP_CONNECTION
"close"
PATH
"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
SERVER_SOFTWARE
"Apache/2.4.58 (Unix)"
SERVER_NAME
"vaam.de"
SERVER_PORT
"443"
REMOTE_ADDR
"3.237.91.98"
SERVER_ADMIN
"service@webmailer.de"
SCRIPT_FILENAME
"/home/strato/http/premium/rid/86/46/56998646/htdocs/redaxo2022/index.php"
REMOTE_PORT
"32922"
REDIRECT_URL
"/en/website-microbiology/microbe-of-the-year/contact-press/press-images/"
REDIRECT_QUERY_STRING
"downloads=d-schueler.jpg&r=62ba40ead05bd"
GATEWAY_INTERFACE
"CGI/1.1"
SERVER_PROTOCOL
"HTTP/1.1"
REQUEST_METHOD
"GET"
QUERY_STRING
"downloads=d-schueler.jpg&r=62ba40ead05bd"
REQUEST_URI
"/en/website-microbiology/microbe-of-the-year/contact-press/press-images/?downloads=d-schueler.jpg&r=62ba40ead05bd"
SCRIPT_NAME
"/index.php"
0. Whoops\Handler\PrettyPageHandler
Report a REDAXO bug