Skip to main content

3.6 - Positions

A position is a named slot where a module is published. Corpus declares thirty-six of them: the twenty-nine of the layout, listed here, plus six for the article templates (article-1 to article-6, see Article templates) and three for the error pages.

A position is not a fixed place in the page. It is a name, and the Layout decides where that name appears. You can perfectly well put banner in the footer: just choose it in the Position field of the row concerned.

That is why the list below gives the intended use, not a constraint.

The positions and their intended use

Position Intended use Where the Layout puts it by default
topbar-left Social links, a short reminder Information bar, left side
topbar-right Phone, email, opening hours Information bar, right side
topbar Inherited from Cassiopeia, tools, quick contact None, to be repointed
header-left The area left of the logo in the header Header, slot Header 1
menu The main menu, folded behind a button on phones Navigation bar
search The search module Band below the navigation
breadcrumbs The breadcrumb trail Between navigation and content, always
banner A full-width banner Header, slot Header 2
below-top A band under the header None, to be chosen in a row
top-a First top row Top sections, row 1
top-b Second top row Top sections, row 2
top-c Third top row Top sections, row 3
top-d Fourth top row Top sections, row 4
main-top Inside the content column, above Content, top row
sidebar-left Side column, on the left by default Content, column 1
sidebar-right Side column, on the right by default Content, column 2
main-bottom Inside the content column, below Content, bottom row
bottom-a First bottom row Bottom sections, row 1
bottom-b Second bottom row Bottom sections, row 2
bottom-c Third bottom row Bottom sections, row 3
bottom-d Fourth bottom row Bottom sections, row 4
footer The footer, upper row Footer
footer-bottom The footer, lower row, obligation links Footer
social-links Social networks None, to be chosen in a row
social-media Social networks, second set None, to be chosen in a row
float-pos A floating block, out of flow Rendered as is, with no chrome
debug Joomla's debug bar Bottom of the page
error-403 Modules for the "forbidden" page  
error-404 Modules for the "not found" page  

The distinction that matters: page row or content row

This is the most useful distinction on this page.

A top or bottom section, top-a to top-d, bottom-a to bottom-d, takes the full page width. It lives outside the content, before or after it, and ignores the side columns.

A content row, main-top, main-bottom, stays inside the component's column, above or below it, whatever side columns are published. That is what you want for an alert banner, a reminder or a form that must stay aligned with the article.

The two look alike as long as no side column is published. As soon as there is one, the difference is obvious.

Three positions apart

breadcrumbs cannot be moved. The trail always sits between the navigation and the content, in its own band. This is deliberate: it says where you are, so its place is against the navigation, which says where you can go. Placed inside the content section, it inherited that section's breathing space and floated in the middle of nothing.

float-pos comes out with no chrome at all: no frame, no module title. You style whatever you publish there. Useful for a consent banner or a call button.

It is also the position for the popup, for a precise reason: Corpus renders it at the end of the page, with no container around it. A module set as a panel inside a side column would disappear with that column when it folds away on a phone, panel and icon alike. See Content modules.

debug shows nothing while Joomla's debug mode is off.

Hiding content on phones

Three levels, depending on what you want gone. The threshold is the same everywhere: the one where the menu folds behind its button.

One module, Advanced tab, Module Class Suffix: desktop-only. The word combines with the others: no-card desktop-only. Its opposite is mobile-only.

In the three top rows, only those two classes get through. The information bar, the header and the navigation render their modules without a container, so a class suffix would never reach the HTML. Corpus therefore carries desktop-only and mobile-only over to the slot's own box. The other suffixes, a background, a frame, have no effect there, and that is deliberate: carried over to the box, they would paint the whole area instead of the module.

A whole band, Theme Customizer, Layout tab, the band in question, Classes list: Hidden on phones. The opposite, Phones only, is there too, for a call to action that only makes sense on the move, a number to dial for instance.

A piece of an article, in the source code, Bootstrap's own classes: d-none d-md-block hides below the threshold and shows above it, d-md-none does the reverse.

Read this before using it. Hiding here means display: none: the content disappears for everyone, screen readers included. A visitor using a keyboard or listening loses the information, not just the visual clutter.

Keep it for what is decorative or redundant: an illustration, a column repeating what is already said above. Information the mobile visitor will not find anywhere else must not be hidden: on a public site, that visitor is often the majority.

Before hiding, ask whether you could shorten, reorder or fold into an accordion instead. All three keep the information; hiding removes it.

The footer is built from modules, not from Joomla's Footer module: that one only outputs a copyright line and a link to joomla.org.

Position footer, the upper row. Publish as many blocks as you want columns; they spread out on their own. A Custom module for the introduction, Menu modules for the link lists. Modules come out unframed there: in a footer a frame separates nothing and weighs everything down. Column widths are set in the Theme Customizer, Layout tab, group Footer, auto spreads evenly, 4-4-4 forces three equal columns.

Position footer-bottom: the lower row. Publish a Menu module there with your obligation links: accessibility, legal notice, personal data. Those links differ from one site to the next and one of them is mandatory in France: they are yours, the template does not invent them.

Two things are placed by the template itself: the Display settings button, and the © year + site name line, aligned right. Both can be hidden and rewritten in the Footer group of the Layout tab: see The Layout, § The bottom of the footer.

The site name comes from Joomla's global configuration, not from the logo text: see Appearance, § The logo, for the distinction between the two.

Coming from Cassiopeia

Every Cassiopeia position name is declared in Corpus. Your modules stay published, at the same position, and reappear in the right place as soon as the Layout points at them. main-top and main-bottom behave exactly as they do in Cassiopeia: inside the content column.

One thing to redo: topbar. In Cassiopeia it is the top band; in Corpus that band has two sides, topbar-left and topbar-right. Repoint your modules to one of them, or point the bar at topbar in the Position field of whichever side suits you.

How to see what is published where

Content → Site Modules, Position column, or the Select Position filter. Joomla only lists positions already in use: to see everything Corpus offers, open a module and unfold the Position field, they are grouped there under the template's name.

A module published on a position that no row displays appears nowhere, and nothing warns you. If a module stays invisible, first check that its position is chosen somewhere in the Layout tab of the active style.

Up to date for Corpus 2.1.43.