---
title: "Breaking: Program pages render inside the site layout"
manual: "Academic Programs"
version: "main"
source: "Changelog/3.0/Breaking-ProgramPageRendersInsideTheSiteLayout.rst"
rendered: "2026-09-27T09:40:45+00:00"
---

# Breaking: Program pages render inside the site layout {#breaking-program-page-renders-inside-the-site-layout}

## Description {#description}

The page template of the page type **Academic program**,
`Resources/Private/Pages/AcademicProgram.html`, declared no Fluid layout.
On a site package that renders its header, navigation and footer through a page
layout, as [`bk2k/bootstrap-package`](https://packagist.org/packages/bk2k/bootstrap-package) does, a program page therefore
rendered without any of them. The template rendered every part inline, so a
project that wanted to change one of them had to replace the whole template.
And its paths were registered at the key `100` of the page object, which on a
`PAGEVIEW` site package replaced the package's own paths of that key
on program pages - its layouts and partials were gone there.

From 3.0 on:

-   The template renders the section `Main` of the layout named by the
    new setting `plugin.tx_academicprograms.page.layout`, `Default`
    by default. A site package without a layout `Default` gets a fallback
    layout of this extension, which renders the section alone.
-   The section renders four partials: `Program/Page/Header.html`,
    `Program/Page/Media.html`, `Program/Page/Facts.html` and
    `Program/Page/Content.html`.
-   The header renders the subtitle of the program, and a link back to the
    page named by the new setting `plugin.tx_academicprograms.page.listPid`.
-   `paths`, `templateRootPaths` and
    `partialRootPaths` of the page object use the key `50` instead of
    `100` on program pages. `layoutRootPaths.100`, which named a
    directory that does not exist, is removed.

Both settings are site settings of the aggregate set
`fgtclb/academic-programs` and constants for the static templates, see
[The layout of a program page](../../Configuration/Index.html#program-page-layout).

## Impact {#impact}

-   A program page on a site package with a layout `Default` renders
    inside it: with the header, navigation and footer of the site.
-   A site package whose layout `Default` renders no section
    `Main` renders the program page without its content.
-   A site package without a layout `Default` renders the program page
    as before, without the frame of the site. A layout named by the setting
    that the site package does not have fails the page.
-   A program with a subtitle shows it below the title, in an element with the
    class `academic-programs-detail__subtitle`. The title is wrapped in an
    element with the class `academic-programs-detail__header`.
-   A path a project registered at a key between `50` and `100` now wins over
    the extension, where it lost before. A site package path at `100` is no
    longer replaced on program pages.
-   A project that set, read or cleared `page.10.paths.100`,
    `templateRootPaths.100`, `partialRootPaths.100` or
    `layoutRootPaths.100` inside the condition on the program page
    type reaches nothing of this extension there any more.

## Affected Installations {#affected-installations}

Every installation that renders program pages on a site package with page
layouts, and every installation that styles the markup of the program page or
changes its paths at the key `100`.

An override of the whole `AcademicProgram.html` keeps rendering as
before.

## Migration {#migration}

-   A site package whose layout for program pages has another name sets
    `plugin.tx_academicprograms.page.layout` to it; one whose
    layout renders another section than `Main` overrides
    `Pages/AcademicProgram.html`.
-   A project that overrides `AcademicProgram.html` to change one part
    moves that change to the matching partial below
    `Program/Page/` and removes the template override.
-   Move a path set at the key `100` inside the program page condition to
    `50`, or to a key above it to win over the extension.
-   Set `plugin.tx_academicprograms.page.listPid` to show the link
    back to the program list.
-   Adjust stylesheets that relied on the title being a direct child of the
    flex container.
