Skip to content

Run a promotion end to end

A promotion on altapac.com is several separate records that the theme ties together. Stock Maropost gives you the product promo price and the content pages. The theme adds the links between them: it matches products to a promotion page by a code, works out the promotion’s end date from a number of days, and shows extra promo images and banners on product pages.

None of these links raise an error when they are wrong. A typo in the code, an empty field or an unassigned product just makes something quietly not appear. Use this page whenever you start, change or end a promotion.

PartWhere you set itWhat it controls
Product promo pricingEach product (standard Maropost promo fields)Whether the product is “on promotion”, the sale price, the countdown, and the “Valid until” date on the product banner
Promotion pageContent page of type PromotionsThe landing page, its card on /promotions, and the banner on product pages
Product assignmentEach product, assigned to the promotion pageWhich products get the banner, and which products the page lists
Promo imageProduct custom fields Product Header Promo Image Zone and Product Header Promo LinkA small image on the product page while it is on promotion
Home page news slideAdvert in the home_news groupThe rotating news strip at the top of the home page

How promotion dates work

The promotion page has no end-date field. The theme works out the end from two fields:

  • Date Posted is the start date.
  • Label 3 is the length in whole days.

The /promotions list compares dates only, not times. A promotion is shown as valid from the Date Posted day through Date Posted + Label 3 − 1 days. On day Date Posted + Label 3 it turns “Expired”.

Worked example: Date Posted is 1 November and Label 3 is 30.

TodayCard on /promotions shows
Up to 31 OctoberStarts 1 November
1 to 30 NovemberValid 1 November - 1 December
From 1 DecemberExpired (in red)

The end date printed on the card, and in the “Promotion Period” line on the promotions page layout, is Date Posted + Label 3. That is the day the promotion stops, not its last day. In the example the last valid day is 30 November but the card says 1 December.

The product side is separate. A product’s sale price, countdown and “Valid until” date come from that product’s own promo start and end dates, not from the promotion page. Nothing keeps the two in step, so set them deliberately (step 1).

Set up a promotion

1. Set the promo pricing on each product

Set the promo price, start date, end date and promotion code on each product using Maropost’s standard product promo fields, or a product import.

  • Promo price must be above $0. If a product is on promotion with a promo price of $0 or blank, its page shows “Contact us for price” and an “Enquire about this product” button instead of Add to Cart.
  • Promotion code: use one code for the whole promotion and write it down. You will type the same code into the promotion page’s Label 1 in step 2.
  • Dates (recommended): start at 12:00 am on the Date Posted day, and end at 12:00 am on the day the card will turn Expired (Date Posted + Label 3). The product page countdown subtracts one minute from the end time, so it reads 11:59 pm on the last valid day (not live yet, AUD-50; today it reads 23:59 pm), matching the /promotions card.

2. Create the promotion page

  1. In Content, add a new page of type Promotions.
  2. Name: the offer, for example “20% Off Rhino-Rack Through November”. It is the page heading, the card heading on /promotions and the heading of the product-page banner.
  3. Date Posted: the first day of the promotion. Always set it.
  4. Label 1: the promotion code from step 1, typed exactly as it is on the products.
  5. Label 3: the number of days, as a whole number (for example 30). Never leave it empty.
  6. Short Description 1: one or two plain sentences. This is the text on the /promotions card.
  7. Main image: upload a 3:1 image, for example 1599 × 533 px. It is the /promotions card image, cropped to 3:1 (2:1 on phones), and the background of the product-page banner. On the promotions layout it is also the page banner, cropped to 3:1.
  8. Alt 1 image: upload at 450 × 450 (square), the site-wide image for a content page. It shows beside Description 1, cropped to 3:2.
  9. Description 1, Description 2, Description 3: see What the page shows for where each appears. It depends on the body template.
  10. Body template: see What the page shows.
  11. Sort Order: the /promotions list is sorted by this field.
  12. Save, and set the page active.

3. Assign the products to the promotion page

Assign every promotion product to the promotion page, the same way products are assigned to category or brand pages. A product only gets the product-page banner when all three of these are true:

  1. It is on promotion (between its own promo start and end).
  2. It is assigned to this promotion page.
  3. Its promotion code exactly matches the page’s Label 1.

If you use the promotions body template, also add the categories you want listed under Related Categories > Related Content on the promotion page. That layout only lists products through those entries (see below).

4. Add the promo image to products (optional)

Each product can show a small promo image while it is on promotion.

  1. Upload the image to the site’s file system and copy its URL. The field description gives 346 × 86 px.
  2. Paste the URL into Product Header Promo Image Zone.
  3. Paste the promotion page’s URL into Product Header Promo Link.

Where it appears:

  • Standard product template: centred under the product name, above the price.
  • Bike-rack product template: at the bottom of the buy card, below the Add to Cart button.

The image only shows while the product is on promotion. You can leave it filled in; it disappears when the product’s promo ends and comes back if the product goes on promotion again. That may not be what you want for the next promotion (see the cleanup checklist).

See also Promotion image and card badge.

5. Add a home page news slide (optional)

The home page news strip shows adverts from the home_news group as a carousel, one at a time, changing every 5 seconds.

  1. Add an advert in Advertising Campaigns and set its group to home_news.
  2. Headline / Alt Text: the first, smaller line of the heading.
  3. Call to Action Link Text: the second, larger line of the heading. It is not button text here.
  4. Ad Text: the paragraph under the heading.
  5. Links To…: the promotion page. The “Find Out More” button appears only when a link is set.
  6. Image: the full-width background. Use the size in Editing the Home Page.
  7. Select location for ad to appear: Home Page.
  8. Set the advert’s date range to match the promotion.

6. Check it

Do these checks on the first day of the promotion. Product pages are cached, so changes to a product’s promo price, banner and countdown can take up to about an hour to appear after the promo starts or ends.

  1. Open /promotions: the card shows “Valid” with the dates you expect.
  2. Open the promotion page: content and product lists look right for its body template.
  3. Open two or three promotion products, including a bike rack if any are in the promotion: the promo banner shows with the right name and date, the price shows the sale price, and the promo image (if used) is there.
  4. Open the home page: the news slide appears and links to the promotion page.

What the page shows

The body template decides what the promotion page itself shows. Both Promotions pages in the 20 October 2026 content pull (the active Rhino-Rack page and an inactive test page) use the category body template. The promotions body template exists but no live page uses it.

Field or featurecategory template (used live)promotions template
Main image as page bannerNot shownShown at top, cropped 3:1
”Promotion Period: start - end” lineNot shownShown when Date Posted is set
Short Description 1Not shown on the page (only on the /promotions card)Shown under the heading
Description 1 with Alt 1 imageShown only if Description 1 is filledShown. Without an Alt 1 image a stock sketch image is used
Related ContentUp to 4 link cards, only when both Label 1 and Description 1 are filledOne product section per related category (up to 6), see below
Product listEvery product assigned to the page, with filters, sorting and pagingOnly through Related Content: up to 6 products per section that are assigned to this page, in that category and currently on promotion
Category advertscategory_ad carousel, plus adverts assigned to the pageNone
Description 2At the bottomUnder Description 1
Description 3Not shownAt the bottom

What this means in practice:

  • category: products stay listed after the promotion ends, at their normal price. The page doesn’t know the promotion is over. The live November 2025 Rhino-Rack page still listed 49 products on 21 October 2026. Setting Label 1 (which you need for the product banner) also switches on the Related Content cards if Description 1 is filled.
  • promotions: no Related Content means no products at all. Products drop off the page by themselves when their promo ends.

What customers see on a product on promotion

WhereWhat shows
Top of the product pagePromotion banner: page name, “Valid until” with the product’s promo end date, and a “View Details” button to the promotion page. Background is the promotion page’s image, or a stock photo if the page has none. Needs all three conditions in step 3
Price, standard templateRRP struck through, “WAS” normal price, “Now” promo price, and “SAVE x%!“. The RRP line and the SAVE percentage only show when the product has an RRP above its selling price, and the percentage is measured against RRP
Price, bike-rack template”Save $x” badge (normal price minus promo price), the promo price, and “was” normal price. No RRP line
Countdown”Sale ends in” with a running timer and the end time (promo end minus one minute). Standard template: only when the product has an RRP above its selling price. Bike-rack template: only when the promo price is below the normal price
Product cards in lists”Now” promo price and a “Sale” label

Trade customers and price-on-request products don’t get the countdown or the “Sale” label.

What breaks without warning

Other things that fail quietly:

  • End date printed one day late. The /promotions card and the Promotion Period line print the day the promotion stops, not its last day (see the worked example).
  • ”Valid until” vs the countdown. The product banner prints the date of the product’s promo end. With a midnight end time, the banner shows the next day’s date while the countdown shows 11:59 pm on the last day.
  • No countdown on standard product pages without an RRP. If the product’s RRP is empty or not above the selling price, the standard template shows no “Sale Ends in” timer and no SAVE percentage.
  • Promo image link on its own does nothing. Product Header Promo Link without Product Header Promo Image Zone shows nothing. An image without a link shows, but clicking it just reloads the page.
  • No page image. Without a Main image the product banner uses a stock photo, and the /promotions card has a broken or empty image.
  • Expired cards stay listed. /promotions shows past, current and upcoming promotions. An ended promotion stays there as “Expired” until you deactivate its page.
  • Short Description 1 on the category template. It only appears on the /promotions card, not on the page.
  • Caching. Product-page promo changes can take up to about an hour to show.
  • Fifth home page advert. The home_news strip shows 4 at most.

End-of-promotion cleanup

Do this on the day the promotion ends.

  • Check each product’s promo pricing has ended, or clear it. The sale price, countdown and banner follow the product’s own promo end, not the page.
  • Clear Product Header Promo Image Zone and Product Header Promo Link on the promotion products. Otherwise the old image comes back the next time the product goes on promotion.
  • If the page uses the category template, unassign the products from the promotion page. The page keeps listing them at full price otherwise.
  • Decide whether to keep the promotion page. Leave it active to keep its “Expired” card on /promotions, or deactivate it to remove the card and the page.
  • End or deactivate the home_news advert if its date range didn’t already end it. This frees one of the 4 slots.
  • End the matching discount in the Promotions/Discounts module, if you used one.
  • About an hour later, check a few former promotion products show their normal price and no banner.

Quick reference

FieldUsed forNotes
Date PostedStart dateDate only matters on /promotions; time is ignored
Label 1Promotion codeMust match the products’ code exactly. On category, also switches on Related Content cards
Label 3Length in daysWhole number. Empty means “Expired” from day one
Short Description 1/promotions card textNot shown on the category page
Main imageCard image, product banner background, promotions page bannerUpload 3:1, for example 1599 × 533. Cropped 3:1 on the card and page banner
Alt 1 imageBeside Description 1Upload 450 × 450. Cropped 3:2
Sort OrderOrder of cards on /promotions
Product Header Promo Image ZoneProduct promo image346 × 86 px. Shows only while on promotion
Product Header Promo LinkLink on the promo imageUsually the promotion page URL
home_news advertHome page news strip4 adverts at most
For developers

This page is based on these files in Altapac-ReDev (development branch), checked against altapac.com and Altapac-Content pages/promotions/**/meta.json on 21 October 2026:

  • src/templates/cms/promotions-list.template.html: /promotions list. content_type=promotions list (line 112), date maths (119-122), status branches (127-133), empty fallback (150-154, not yet on main)
  • src/templates/cms/promotions.template.html: banner (36-41), Promotion Period (47-51), related-content product lists with filter_inpromo (109-161), Description 3 (165)
  • src/templates/cms/category.template.html: Label 1 related cards nested in the Description 1 check (109-217), category_ad (223), unfiltered thumb_list (314)
  • src/templates/products/template.html and products/bikeRacks.template.html: promo banner, content_path type:'promotions', promo_id eq content_label1, glenworth.jpg fallback, “Valid until” from promo_end (lines 3-38)
  • src/templates/products/includes/buying_options.template.html: misc11/misc29 (57-61), promo price branch (109-127), countdown gated on save (198-209)
  • src/templates/products/includes/bikerack/buycard.template.html: ar_save (29), sale block, countdown (84-91), misc11/misc29 (147-151)
  • src/templates/products/includes/price_state.template.html: por set when the promo price is $0 or less
  • src/templates/products/includes/product_scripts.template.html: countdown target from promo_end
  • src/templates/thumbs/product/template.html: “Now” price and “Sale” label
  • src/templates/cms/home.template.html: home_news, limit:'4' (line 5)
  • .claude/skills/base-templating/references/caching.md: product display cache, default ttl 3600 s
  • .claude/skills/base-templating/references/value-formats.md: misc11 and misc29 cPanel labels
  • Banner background: asset_url type:'content' with no thumb renders the page’s base image <id>.jpg, the Main image file that thumb:'full' also gives (live check 2026-10-21 on /locations and Learn article 15977, whose 15977.jpg is 1599 × 533). Upload sizes: Altapac-Content CLAUDE.md

Open owner decision: whether Promotions pages should use the category or promotions body template.