Choose a page template, and what each field means on it
Every content page in the cPanel has a Body Template. It decides the page layout and which fields show. Stock Maropost treats the content fields as plain text slots. This theme gives them jobs, and the job changes with the template. On one template Label 1 is a heading. On another it is a hidden on/off switch. On a promotion page it is a promotion code. Fill the wrong field, or the right field on the wrong template, and the page just looks a bit empty. Nothing tells you why.
Use this page when you create a content page, when you change a page’s template, or when a field you filled in doesn’t show.
Checked against the theme’s development branch and the live site on 21 October 2026. The live site can run a little behind development.
1. Pick the template
Start from what the page is. Most pages should keep the default for their content type: leave Body Template blank.
| You are making | Body Template | Notes |
|---|---|---|
| A product category or brand page | leave blank (gives category) | Product list, filters sidebar, optional description and image |
| A blog post or Learn article | leave blank (gives content) | Banner, author and date, body, related cards |
| A policy or general information page | leave blank (gives content) | Same layout as a blog post |
| A Learn section page that lists its articles | default | Three child cards per page, with page numbers |
| A service page (Services content type) | leave blank (gives services) | Hero, description, optional product cards and Typeform |
| A service page that also needs the “Why Choose Altapac?” block | serviceNew | Same as services plus a fixed block of stats, reviews and links |
| A Services section page that lists child services | service-parent | Hero, child service cards, description |
| A Learn section page laid out like a service page (Locations, each store’s location page) | learn-parent | Hero, description, child cards |
| A store’s individual service page under a location (for example Burwood Bullbars) | services | Has to be typed in. These are Learn pages, whose default is content |
A form page under /form/ | modal, plus a header template | See Contact forms and enquiry buttons |
| A promotion page | see the caution below | Promotions content type |
The rest of the theme’s templates are for one particular page each, or aren’t in use. Don’t put them on a new page without asking the web team: home, contact, brands, promotions-list, products, store_finder, parent-category, builder-content.
2. Set it
- Open the page in the cPanel content editor.
- Go to the Template & Design section.
- In Body Template, enter the template name exactly as it appears on this page, including capitals and hyphens (
serviceNew,service-parent,learn-parent). To use the content type’s default, leave it blank. The store accepts any name: one the theme doesn’t have renders as if the field were blank, with no error. - Leave Header Template and Footer Template blank unless the page is a form (see Header templates).
- Leave Search Results Template blank.
- Fill the fields the template reads (step 3), save, then open the live page and check it. Add
?nc=and any number to the address to get past the page cache.
3. Fill the fields the template reads
Live use of each template
Counts are active pages in the Altapac-Content pull of 20 October 2026, plus one Learn article added on 21 October. “Blank” means the page leaves Body Template empty and gets the template as its content-type default.
| Template | Active pages | Examples |
|---|---|---|
category | 258 (173 categories and 84 brands, all blank; 1 promotion, set by name) | /roof-racks/, /brand/bluetti/, /promotions/rhino-rack-november/ |
services | 41 (28 Services pages blank; 12 location service pages and /tint-warranty-information/ set by name) | /services/wholesale/, /locations/burwood/bullbars |
content | 21 (14 Learn pages and 7 general pages, all blank) | /learn/about-altapac/, /returns-policy/ |
modal | 11 | /privacy-policy/, /zip-own-it-now-pay-later/, most /form/ pages |
default | 8 (4 form pages blank; 4 set by name) | /learn/guides-faq/, /learn/adventure-hub/, /form/ask-a-question-about-this-product/ |
service-parent | 5 | /services/window-tinting/, /services/vehicle-protection/ |
learn-parent | 3 | /locations, /locations/burwood, /locations/artarmon |
serviceNew | 1 | /services/accessory-fitment-solutions/roof-rack-installation/ |
home | 1 | the home page |
contact | 1 | /contact-altapac/ |
brands | 1 | /brands/ |
promotions-list | 1 | /promotions |
products | 0 (1 inactive) | /products/, inactive |
store_finder | 0 (1 inactive) | /store-finder/, inactive |
promotions | 0 | none |
parent-category | 0 | none |
builder-content | 0 | none |
The theme also has 404, search_results and promo_search_results. These aren’t body templates for content pages, so don’t choose them as one. One live page, /form/notify-me/, has Body Template notifyme, which isn’t in the theme at all (see What breaks).
The labels
The core of this page: what Label 1, Label 2 and Label 3 do on each template. “Not used” means the template ignores the field, so text in it changes nothing.
| Template | Label 1 | Label 2 | Label 3 |
|---|---|---|---|
category | Switch. Any text turns on up to 4 Related Content cards below the description. The text itself never shows. Only works when Description 1 is filled | Not used | Not used on the page |
services, serviceNew | Heading and switch. Shown as the heading of the service products section. Blank means no product section at all | Not used | Typeform embed ID (the data-tf-live value from the form’s embed code, not the ID in a share link). Embeds that Typeform at the top of the Description 2 block. Only shows when Description 2 is filled |
service-parent, learn-parent | Heading above the child page cards, going by the theme source (not yet tested on a real page). Blank means no heading (the cards still show) (not live yet, AUD-87) | Not used | Not used |
promotions | Not used on the page (see the next row) | Not used | Promotion length in whole days. Used for the “Promotion Period” line under the heading and the end date given to search engines |
| Any Promotions content type page, whatever its template | Promotion code. Must exactly match the code on the products. That match makes the promotion banner show on product pages | Not used | Promotion length in days. The page’s card on /promotions works out “Valid”, “Starts” or “Expired” from Date Posted plus this number |
builder-content | Not used | Builder.io model name. The page loads the Builder.io entry for this model and the page’s own address | Not used |
content, default, brands, contact, home, modal, parent-category, products, promotions-list, store_finder | Not used | Not used | Not used |
On a promotion page that uses category, both rows apply. Label 1 is the promotion code, and because it isn’t blank it also turns on the Related Content cards whenever Description 1 is filled. You can’t have the code without the switch.
On service-parent and learn-parent, the theme reads Label 1 before it builds the child cards and prints it as a heading only when it has text. No live parent page has been tested with Label 1 filled, so check the page after you set it.
Images
Upload Alt image 1 at 450 × 450, square. It’s the page’s site-wide image (menu thumbnails, cards and the side image beside Description 1), so pick one that still reads at menu-thumbnail size, with the subject filling the frame. Upload the Main image at 3:1, for example 1599 × 533. Each template then crops them as below.
| Template | Main image | Alt image 1 |
|---|---|---|
content | Banner above the heading, cropped to 3:1 | Beside Description 1, cropped to 3:2. Only shows when Description 1 is filled. With no Alt image 1, a placeholder sketch shows |
default | Banner below the heading, cropped to 3:1 | Beside Description 1, cropped to 3:2. Always shows, with the placeholder sketch if there’s no Alt image 1 |
brands | Banner below the heading, cropped to 3:1 | Beside Description 1, cropped to 3:2 |
promotions | Banner above the heading, cropped to 3:1 | Beside Description 1, cropped to 3:2, placeholder sketch if missing |
category | Not shown on the page | Beside Description 1, cropped to 3:2. Only shows when Description 1 is filled |
services, serviceNew, service-parent, learn-parent | Hero background behind the heading, at least 300px tall, cropped to fill the width. The crop changes with screen size, so keep the subject in the centre | Beside Description 1, cropped to 3:2. Always shows (an empty box if there’s no Alt image 1) |
contact | Hero background, at least 500px tall, cropped to fill | Not used |
promotions-list | Banner below the heading, at its own proportions (no crop) | Not used |
parent-category | Not shown | Not shown. The child category tiles use each child’s own image |
home, modal, products, store_finder, builder-content | Not used | Not used |
A page’s images also appear on other pages, cropped differently:
- Alt image 1 as a card image. Cards that link to this page use its Alt image 1: a square box on
contentrelated cards, a 200px-tall crop onservice-parentandlearn-parentchild cards, and uncropped oncategoryrelated cards,defaultchild cards and/brandscards. The square oncontentrelated cards isn’t a crop: the whole image is squeezed into the square, so a wide image comes out squashed from the sides. The desktop menu panel sizes it at 450 × 300, a 3:2 shape (see Edit the menus). A 450 × 450 square Alt image 1 avoids the stretch. - Main image of a Promotions page. Shown on its
/promotionscard cropped to 3:1 (2:1 on phones) and as the background of the promotion banner on product pages. This happens even under thecategorytemplate, which doesn’t show the main image on the page itself.
Text fields
| Template | Short Description 1 | Description 1 | Description 2 | Description 3 | Short Description 2 and 3 |
|---|---|---|---|---|---|
content | Italic, centred intro under the heading | Left column, beside Alt image 1 | Main body, full width | Not used | Not used |
default | Italic intro under the date line | Left column, beside Alt image 1 | Below the child cards | Below Description 2 | Not used |
category | Not shown on the page | Left column, beside Alt image 1. Leave it blank and the image and related cards go too | Very bottom, after the product list | Not used | Not used |
parent-category | Short intro. With Description 1 also filled, Description 1 is folded away behind a “read more” arrow | Category description. On its own, anything after the first paragraph folds away once it passes 100 words | Very bottom | Not used | Not used |
services, learn-parent | Plain-text line in the hero | Beside Alt image 1, under the hero | Bottom section (services: with the Typeform above it) | Not used | Not used |
serviceNew | Plain-text line in the hero | Beside Alt image 1, under the hero | With the Typeform above it | Very bottom. Filling Description 2 or 3 also shows the fixed “Why Choose Altapac?” block | Not used |
service-parent | Plain-text line in the hero | Beside Alt image 1, below the child cards | Bottom section | Not used | Not used |
brands | Italic intro | Beside Alt image 1 | Below the brand cards | Below Description 2 | Not used |
promotions | Plain-text line under the heading. Also used as the offer description in the page’s search-engine data | Beside Alt image 1 | Full width below | Below the product sections | Not used |
promotions-list | Not shown on the page | Intro under the banner | Below the promotion cards | Below Description 2 | Not used |
contact | Not used | Subheading in the hero. Keep it to one short line of plain text | Not used | Not used | Not used |
home | Not used | Block between “Within Reach” and the category grid | Not used | Not used | Not used |
modal | Not used | The whole page. Nothing else prints, not even a heading | Not used | Not used | Not used |
products, store_finder | Printed in a row with Short Descriptions 2 and 3 | Printed in a row with Descriptions 2 and 3 | (with Description 1) | (with Description 1) | Printed after Short Description 1 |
builder-content | Not used | Printed twice: once above the Builder.io area and once inside it | Not used | Not used | Not used |
Short Description 1 is also the card text when another page links to this one with a card: related cards, child cards and /promotions cards (/brands cards show the name only). So fill it even on a template that doesn’t show it on the page. When SEO Meta Description is blank, Maropost also builds the page’s meta description from the Name and Short Description 1.
On default, Short Description 1 and Descriptions 1 to 3 only show on page 1 of the child cards. Pages 2 and up show just the cards.
Other fields
| Field | Where it does something |
|---|---|
| Date Posted | content: shown as “Last Updated” followed by the date. Leave it empty and the author and date line disappears. default: “Last Updated” line, shown on its own. promotions: start of the “Promotion Period”. Any Promotions page: start date for its /promotions card. Ignored everywhere else |
| Author | content: name badge, only when Date Posted is set. A blank author shows “Altapac Team”. default: “Author:” line, shown whether or not there’s a date. Ignored everywhere else |
| Related Content | content: up to 4 cards at the bottom, always on (no switch). category: up to 4 cards, only when Label 1 and Description 1 are both filled. promotions: one section per related category (up to 6), each listing up to 6 of this promotion’s products from that category. It also feeds the mega-menu panels, whatever the template (see Edit the menus) |
| SEO Page Heading | Replaces the Name as the page’s main heading on most templates. Exceptions: products and store_finder always use the Name; home has a fixed heading; modal and builder-content print no heading |
| Page comments (“allow reviews” setting) | default only: shows a share button, comments and a “Leave a comment” form. Every other template ignores it |
parent-category lists parts-finder child pages only when the page’s content type code is part-finder. The store’s code is parts-finder, so that list never appears. No live page uses parent-category, so this doesn’t affect anything today.
Header templates
Leave Header Template blank for normal pages. That gives the full site header, menus and search. The other header templates are for pages that are shown inside another page.
| Header Template | What it does | Use it for |
|---|---|---|
| blank | Full site header and menus | Every normal page |
iframe | No site header. Hidden from search engines, no tracking code | A form that only appears inside another page or the contact modal |
empty | No site header. Still indexed by search engines, tracking still runs | The three store forms on the contact page and the two thank-you pages use it today |
Pair iframe or empty with Footer Template empty. Contact forms and enquiry buttons has the full list of form pages and their settings.
The theme also has checkout, print, nr_print and empty-main-content headers. No content page uses them. Don’t pick them.
What breaks
None of these show an error. The page just looks incomplete.
- Author missing on a blog post. On
content, author and date show together or not at all. Set Date Posted. - Text typed into a label the template ignores. For example, Label 1 on
contentor Label 3 oncategory(outside Promotions). Nothing shows. Check the labels table before using a label. - Moving a page from one template to another. Fields move or disappear. Moving from
contenttocategoryhides the main image and Short Description 1. Moving fromservicestoservice-parentdrops the product section and Typeform. Re-check every field against the tables after a switch. - A mistyped template name. The store accepts it and the page renders as if Body Template were blank. Check the live page after any template change.
- Learn pages under a location need
servicestyped in. A new page under/locations/<store>/is a Learn page. Leave Body Template blank and it renders as a blog post (content), not a service page. - Paragraphs in hero text. Short Description 1 on the service templates and
promotions, and Description 1 oncontact, sit inside a heading or paragraph. Keep them to plain text. Pasted paragraphs or lists can break the layout. - ”Why Choose Altapac?” appears unexpectedly. On
serviceNew, any text in Description 2 or 3 shows the fixed block. Its stats, reviews and links are in the theme, not the cPanel. To change them, ask a developer. On altapac.com today the block is only styled properly on Roof Rack Installation, which carries its own copy of the CSS (not live yet, AUD-86). - Builder.io page shows a “not found” message.
builder-contentloads the Builder.io entry for the model in Label 2 and the page’s own address. If no entry matches, the page shows Builder’s not-found screen. The entry’s title also replaces the browser tab title. - A child page missing from
/learn/guides-faq/and otherdefaultlists. These show three cards per page, with page numbers. The child may be on page 2.
Reference
| Field | Templates that read it |
|---|---|
| Label 1 | category (switch), services and serviceNew (heading and switch), service-parent and learn-parent (heading), any Promotions page (promotion code) |
| Label 2 | builder-content only |
| Label 3 | services and serviceNew (Typeform embed ID), promotions and any Promotions page (days) |
| Main image | content, default, brands, promotions, promotions-list (banner); service family, learn-parent, contact (hero); Promotions pages (card and product banner) |
| Alt image 1 | Beside Description 1 on most templates; card image everywhere |
| Short Description 2 and 3 | products and store_finder only |
| Description 3 | default, brands, promotions, promotions-list, serviceNew, products, store_finder |
| Date Posted | content, default, promotions, any Promotions page |
| Author | content (needs Date Posted), default |
| Related Content | content, category (needs Label 1 and Description 1), promotions, menus |
For developers
Theme repo Altapac-ReDev, branch development, paths under src/templates/:
cms/category.template.html: Label 1 gate inside the Description 1 block (109-217),category_adcarousel (223), Description 2 (448-452). No main image.cms/content.template.html: related-card imagesaspect-ratio: 1/1with noobject-fit(inline style, 21-25), so they stretch; banner 3:1 (26-31, 114-119), author only inside the Date Posted test (125-133), Alt image 1 inside the Description 1 test (140-151), related list limit 4 with no gate (158).cms/default.template.html: Alt image 1 always rendered (84-86), childthumb_listlimit 3 with paging (90-147), Descriptions 2 and 3 (148-155),content_allow_reviewscomments (158-229).cms/services.template.htmlandcms/serviceNew.template.html: Label 1 product section fed by/export//service-product.json, filtered oncategorycontaining the content ID; Label 3 asdata-tf-liveinside the Description 2 test. Feed repair and hidden-until-a-card-renders wrapper arec4bfdae(AUD-36).serviceNew“Why Choose Altapac?” block on Description 2 or 3 (308-404), styled by.ap-modrules fromb987e8f(AUD-86).cms/service-parent.template.htmlandcms/learn-parent.template.html: Label 1 captured aschildren_headingwith[%set%]before thecontent_menuand printed only when non-empty (406e84c, AUD-87;mainprints[@content_label1@]unguarded inside the menu’s header param); child menus of typeservicesandlearn.cms/promotions.template.html: Label 3 in the Promotion Period andvalidThrough(17, 49); related categories × in-promo products (109-114). Only CMS template that linkscss/blog-containers.css.cms/promotions-list.template.html:content_type=promotionslist and date maths (112-133). The main-image banner has no crop rule because this template’s inline styles don’t define_cover-banner.products/template.html:2-7andproducts/bikeRacks.template.html:7: product banner onpromo_id eq content_label1viacontent_path type:'promotions'.products/template.html:215usesparts-finder;cms/parent-category.template.html:320-321usespart-finder.cms/builder-content.template.html: Label 2 tocmsModelLabel; Description 1 printed at lines 2 and 12. Bundlesrc/content-app/index-DJYEhrs8.jscallsbuilder.get(cmsModelLabel, url: pathname)and renders its 404 when nothing matches.headers/template.html:267-276: oncategorypage types, Alt image 1 is also written as a.category-bannerbackground, but no CSS gives it a height, so it renders 0px tall (checked live on/roof-racks/).headers/iframe.template.html+headers/includes/head_empty.template.html(noindex, no tracking);headers/empty.template.html+head.template.html.- Not in the theme:
headers/vue(deleted in f0f1e8c, 2024-04-18),headers/modal,footers/modal,cms/notifyme.
Live template use comes from Altapac-Content/pages/**/meta.json (pulled 2026-10-20). Blank-template defaults were inferred from template-specific markup on live pages (21 October 2026), not from cPanel settings. Unknown template names: Altapac-Content/CLAUDE.md and commit 2f26b05 (owner observation, 2026-10-20); /form/notify-me/ and the ask-a-question thank-you page checked live on 21 October 2026. Image upload sizes: Altapac-Content/CLAUDE.md.