MetaInfos nur für bestimmte Ebenen einblenden

REDAXO bietet aktuell zwar die Möglichkeit Meta-Felder ab einer bestimmten Kategorie darzustellen, mit der nachfolgenden Lösung ist es jedoch möglich, Metafelder nur in einem festgelegten Level der Struktur anzuzeigen. Zur Steuerung der Dartsellung werden hier Fieldsets verwendet, die nur eingeblendet werden, wenn man sich im gewünschten Level befindet.

Achtung! Die Felder werden nur per CSS ausgeblendet. Es sollten ggf. Maßnahmen ergriffen werden ein Autofill zu vermeiden.

Metainfo

MetaInfo Feld legend anlegen mit den Feldattributen data-hide-levels data-show-level="1" Damit sagt man, dass alles was in diesem fieldset liegt, nur auf der ersten Ebene angezeigt wird. Bei anderen Ebenen entsprechend das Level anpassen.

Wichtig: Ganz am Ende ein Feld legend anlegen damit der Button Metadaten aktualisieren nicht verschwindet sobald die MetaInfos versteckt werden.

CSS

CSS-Datei meta-info.css

im Assets-Ordner des Projekt-AddOns anlegen.

.rex-main-sidebar [data-hide-levels],
.rex-main-sidebar [data-hide-levels] ~ * {
    display: none;
}

[data-structure-level="1"] .rex-main-sidebar [data-show-level="1"],
[data-structure-level="1"] .rex-main-sidebar [data-show-level="1"] ~ * {
    display: block;
}

[data-structure-level="2"] .rex-main-sidebar [data-show-level="2"],
[data-structure-level="2"] .rex-main-sidebar [data-show-level="2"] ~ * {
    display: block;
}

[data-structure-level="3"] .rex-main-sidebar [data-show-level="3"],
[data-structure-level="3"] .rex-main-sidebar [data-show-level="3"] ~ * {
    display: block;
}

[data-structure-level="4"] .rex-main-sidebar [data-show-level="4"],
[data-structure-level="4"] .rex-main-sidebar [data-show-level="4"] ~ * {
    display: block;
}

[data-structure-level="5"] .rex-main-sidebar [data-show-level="5"],
[data-structure-level="5"] .rex-main-sidebar [data-show-level="5"] ~ * {
    display: block;
}

boot.php

Den nachfolgenden Code in der boot.php des project-AddOns einsetzen.

if (\rex::isBackend()) {
    if (\rex_be_controller::getCurrentPage() == 'content/edit') {
        \rex_view::addCssFile($this->getAssetsUrl('css/meta-info.css'));
        \rex_extension::register('OUTPUT_FILTER', function(\rex_extension_point $ep) {
            $article = \rex_article::get(rex_request('article_id', 'int'));
            if ($article) {
                $level = count($article->getPathAsArray());
                $ep->setSubject(
                    str_replace(
                        'class="rex-main-frame"',
                        'class="rex-main-frame" data-structure-level="' . $level . '"',
                        $ep->getSubject()
                    )
                );
            }
        });
    }
}