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
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-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;
}
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()
)
);
}
});
}
}