---
title: "Important: The study plan renders through the Default layout"
manual: "Academic StudyPlan"
version: "main"
source: "Changelog/3.0/Important-StudyPlanRendersThroughTheDefaultLayout.rst"
rendered: "2026-10-02T15:38:26+00:00"
---

# Important: The study plan renders through the Default layout {#important-study-plan-renders-through-the-default-layout}

## Description {#description}

The study plan content element offers editors the **Appearance** tab
with the layout, the frame, the space before and the space after, and none of
those choices had any effect. The element also carried no `id="c<uid>"` anchor, so a
link pointing at it landed on the page and not on the element.

The cause was the template. `AcademicStudyPlan.html` rendered its markup
directly, and the `Header/All` partial with it, without a Fluid layout.
The frame wrapper, the spacing classes and the anchor are rendered by the
`Layouts/Default` layout of whichever package provides
`lib.contentElement` \- `EXT:fluid_styled_content`, or a site package
such as [`bk2k/bootstrap-package`](https://packagist.org/packages/bk2k/bootstrap-package), which renders a frame of its own. A
template without that layout gets none of them.

The template now starts with `<f:layout name="Default" />` and wraps its
markup in an `<f:section name="Main">`. The explicit render of
`Header/All` is gone, because the layout renders the header section
itself.

## Impact {#impact}

**The rendered markup changes on every installation**, whether or not the
**Appearance** tab was ever touched:

**Before**

```html
<div class="academic-study-plan container" data-study-plan="1">
    <header><h2>Study plan B.Sc.</h2></header>
    <nav>...</nav>
</div>
```

**After**

```html
<div id="c1" class="frame frame-default frame-type-academic_study_plan frame-layout-0">
    <header><h2>Study plan B.Sc.</h2></header>
    <div class="academic-study-plan container" data-study-plan="1">
        <nav>...</nav>
    </div>
</div>
```

Two things moved: the element gained the frame wrapper around it, and the header
moved out of `.academic-study-plan` to above it.

**The settings of the two Appearance palettes start taking effect**, and on an
installation whose editors used that tab some of them were configured long ago:

-   **Layout**, **Frame**, **Space Before** and
    **Space After** \- the four fields of the **frames** palette
    \- now render their classes, so rulers and spacing appear where they were
    chosen and a layout variant reaches the stylesheet as
    `frame-layout-<n>`.
-   The element carries its `id="c<uid>"`, so a link to it jumps to it.
    That also repairs **Section Index**: the menu element always listed
    the study plan, but linked to an anchor that did not exist.
-   **Link to top** renders the *to top* link of the layout's footer
    section. It is the one addition that shows up with no CSS involved.

The interaction is unchanged. The filter, the semester toggles and the module
dialogs address the markup inside the wrapper, which is untouched, and the
JavaScript contract is the same.

## Migration {#migration}

**A stylesheet that addressed the header inside the study plan wrapper stops
matching it.** The header is now a sibling of that wrapper rather than a child:

**Before**

```css
.academic-study-plan header h2 { ... }
```

**After**

```css
.frame-type-academic_study_plan header h2 { ... }
```

Dropping the ancestor works as well where the selector is specific enough
without it. Nothing else has to be changed.

## Affected Installations {#affected-installations}

Every installation that renders the study plan content element with the shipped
template. An installation that ships its own copy of
`AcademicStudyPlan.html` keeps rendering that copy and is unaffected -
including a copy that was made to add the layout in the first place, which can
be dropped once nothing else in it was changed.

One case is worth naming because the header does not move there but disappears:
a site package that provides its own `lib.contentElement` whose
`Default` layout renders no `Header` section at all. Such a layout
suppresses the header of every core content element as well, so it is a choice
that site made; the study plan now simply follows it.
