Skip to content

Maintain the parts finder

The parts finder is the Find Your Vehicle pop-up that opens from the car icon in the site header. It has four dropdowns (Product, Make, Model, Sub-Model/Year) and a GO button. Stock Maropost has no parts finder. This theme builds it from a tree of content pages in a dedicated parts-finder content type, which the store publishes as a data feed that the pop-up reads.

Use this page when you add a product line or a vehicle, link products to a vehicle, or rename or retire a node. Almost every mistake here fails silently: the pop-up still opens, but an option is missing, blank, in the wrong place, or leads to an empty page.

How it fits together

The four-level tree

Every option in the pop-up is one content page of the parts-finder type. Its level comes only from where it sits in the tree: a page with no parent is a Product, its children are Makes, and so on.

LevelDropdownWhat the page representsExample from the live tree
1ProductA brand plus product lineRhino Rack Roof Racks
2MakeVehicle make, under one product lineGWM
3ModelVehicle model, under one makeTank 300
4Sub-Model/YearBody style, series or year rangeGen 1 With Raised Rail 5DR SUV (01/2023-Current)

Each product line has its own copy of the vehicle tree. Toyota under Rhino Rack Roof Racks and Toyota under Piak Bullbar are separate pages, and adding a vehicle to one doesn’t add it to the other. On 21 October 2026 the feed held 9,356 pages across 24 named product lines, 6,700 of them at level 4.

The feed and the pop-up

  1. The store exports every parts-finder page to /export//pfdata.json: its id, name, URL and parent id. The theme doesn’t build this file. It is a back-office export.
  2. The first time a visitor’s browser tab opens any page, the pop-up fetches the feed and keeps a copy for the rest of that tab session. It doesn’t fetch it again until the tab is closed.
  3. The Product dropdown lists every page with no parent. Picking an option fills the next dropdown with that page’s children.
  4. Within each dropdown, options are sorted by name in natural order, so numbers inside names sort by value (Mazda 2, 3, 6, 323, 626, 929). Pages with a blank name are left out. The Sort Order field has no effect on the pop-up.
  5. GO becomes active as soon as anything is picked at any level, and goes to the URL of the deepest page chosen. A shopper who stops at Model lands on the Model page.

What shoppers see on a node page

Each node has its own page under /parts-finder/, for example /parts-finder/rhino-rack-roof-racks/gwm/tank-300/. Live node pages use the same layout as category pages: heading, product list, and a filter sidebar that includes item-specific filters (for example Drawer Setup on MSA Drawers pages). See Category Templates for the description and image fields on that layout.

What shoppers see on a product page

A product assigned to a parts-finder page gets a More for your Vehicle row near the bottom of its product page. It lists other products assigned to the same parts-finder page, leaving out the product being viewed: up to 4 on the standard product page, up to 7 on the bike-rack layout.

Add a vehicle or product line

  1. In cPanel, go to the content pages of the parts-finder content type and find the page the new one belongs under. For a new year range, that’s the Model page. For a new model, the Make page. For a new product line, there’s no parent.
  2. Add a page with:
    • Content type: the parts-finder type.
    • Parent (ParentContentID): the page from step 1. Leave it empty only for a new product line.
    • Name (ContentName): exactly what shoppers should read in the dropdown. Match the spelling and capitalisation of the sibling pages.
  3. Leave the URL for the store to generate. It creates one when the page is created, and node URLs follow the tree, for example /parts-finder/msa-drawers/mazda/bt-50/2020-onwards/.
  4. Leave the body template matching the existing nodes. Don’t set it to parent-category (see The parent-category template below).
  5. Set the page active and save.
  6. For a new product line, build all four levels before you link products. Products go on level-4 pages.
  7. Assign the products (see the next section).
  8. Check it: open a new private window, open the pop-up, pick down to the new page and press GO. A tab you already had open is still using its old copy of the list.
  1. Assign the product to the level-4 page for each vehicle it fits, the same way you assign a product to a category in stock Maropost. A roof rack that fits five vehicles is assigned to five level-4 pages.
  2. Save the product, then open its product page and check that More for your Vehicle appears and lists other products for that vehicle.

How the product page uses the link:

  • Only one of the product’s parts-finder pages feeds the row, even when it’s assigned to many. You can’t choose which one from the theme.
  • If that page has no other products, the row is replaced by Related products, from the product’s own Related Products list in cPanel.
  • If the product isn’t assigned to any parts-finder page, neither row appears.

Rename a node

  1. Open the page and change Name only.
  2. Save. Page URLs are fixed by default, so a rename leaves the URL as it was. To match the URL to the new name, edit the URL by hand. Maropost creates a redirect from the old URL automatically. The automatic URL update toggle also exists, but leave it off.
  3. Check the pop-up in a new private window. The option moves to its new alphabetical place.

Names appear in the dropdown exactly as typed. The live tree mixes styles between product lines (for example FORD under Hayman Reese Towbars but Ford under Yakima Roof Racks; more than 100 of the 391 Make pages are typed in capitals). Within one product line, match the siblings so the list reads cleanly.

Retire a node

  1. Move or unassign the products on the page first, so their More for your Vehicle row draws on a page that is still in use.
  2. Retire level-4 pages before their parents. Don’t retire a Make or Model while it still has active children you want to keep.
  3. Set the page inactive and save.
  4. Check the feed and the pop-up (new private window) to confirm it has gone.

The parent-category template

The theme has a parent-category body template with parts-finder handling built in: under the product list it shows a link to each child page. No live page uses this template. Don’t assign it to parts-finder pages:

  • Its child-link list only appears for content type code part-finder. The store’s code is parts-finder, so the list never appears.
  • On this template the item-specific filter groups in the sidebar have no heading, so shoppers can’t open them. A page like MSA Drawers would lose its Drawer Setup filter.

What breaks: common mistakes

  • Change not showing. Each browser tab keeps the list it loaded for its whole session. Test in a new private window.
  • Sort Order changed, nothing moved. The pop-up sorts by name only.
  • Wrong parent. A page under the wrong parent shows in the wrong dropdown, or under the wrong product line, with no warning.
  • Too few levels. If a branch stops at level 3, the next dropdown stays disabled and GO goes to the level-3 page. Yakima Roof Racks > Ford > “5 Dr SUV 2023 On” is one example; the shopper sees it in the Model dropdown.
  • Two pages with the same name under one parent. Both appear, and shoppers can’t tell them apart. None exist today.
  • Item-specific filter missing on a node page. The page may be on parent-category. Set it back to match the other nodes.

Quick reference

You changeWhere shoppers see itNotes
NameDropdown option, node page headingSorted by name in natural order. Never blank: a blank-named page and its children drop out of the pop-up
ParentWhich dropdown and branch the option is inNo parent means a Product (level 1)
Sort OrderNothing in the pop-upThe pop-up sorts by name only
ActiveThe node page
Product assigned to a level-4 pageNode page product list; More for your Vehicle on the product pageOnly one parts-finder page feeds the row
Product’s Related ProductsProduct page, only if its parts-finder page has no other productsNot shown on products outside the parts finder
Body templateNode page layoutKeep it matching other nodes; not parent-category

For developers

For developers

This page is based on these files in Altapac-ReDev (branch development), under src/templates/ unless noted:

  • headers/template.html and headers/empty-main-content.template.html: car icon (data-target="#partFinder") and the Find Your Vehicle modal, which loads the include below. Not cached
  • headers/includes/components/pf_feed_App_v1.template.html: the four pf_select_N selects, GO button, and loads js/pf_feed_V0.5.4.js via footer_javascript
  • src/js/pf_feed_V0.5.4.js: fetches /export//pfdata.json, strips a trailing comma, caches it in sessionStorage key pfdata; level 1 = rows with no parent_id; natural localeCompare sort over the whole array; skips blank names (e.name.trim()); level 5 only logs a console error; GO follows data-url for http(s) only
  • products/template.html:214-240 and products/bikeRacks.template.html:251-277: content_path id:'[@inventory_id@]' type:'parts-finder' limit:'1', then thumb_list filter_category:'[@content_id@]' filter_exsku1:'[@pf_exsku@]' (limit 4 / 7) with related_products in *ifempty. This is the only related_products call on either product template
  • cms/parent-category.template.html:320-321: content_type_code eq 'part-finder' and content_menu content_type:'part-finder'
  • cms/includes/sidebar.template.html:186-195: templatebody eq 'parent-category' sets specific_autohide, which drops the variation-filter headings while their collapsed lists still render
  • cms/category.template.html: the layout live node pages render with
  • Live main (739c101 on 21 October 2026) still has the old year-style sort, no blank-name guard, and filter_exsku# (ignored by the platform). See docs/records/2026-09-25-repo-audit/backlog.md AUD-102 and AUD-112
  • Altapac-Content’s 2026-10-20 pull skipped the parts finder on purpose (commit 369acdd). Its 421 pages sit in content types 1, 2, 9, 10, 12, 13 and 16, so the parts-finder type is none of those, and none of the 9,356 feed ids is in the pull. The parts-finder type id isn’t recorded anywhere
  • The export template that produces pfdata.json isn’t in the repo. ~/src/altapac/parse-pf-strings holds offline scripts that normalise supplier fitment strings (make, model, variant, year range); it doesn’t touch the store