Field-tested reference maps for PrestaShop theme and module development across
1.6 → 1.7 → 8 → 9 (Classic and Hummingbird). The parts the official docs
leave thin: which Smarty variable a controller actually passes, which CSS classes
core JS depends on, how a block* module became a ps_* one, and where each
template hook lives in the theme.
Built by reading the source of four PrestaShop releases side by side, not by paraphrasing the manual.
PrestaShop is a large platform with famously uneven documentation. When you customize a theme or override a module, the questions that eat your time are specific and undocumented:
- What's inside
$producton the product page — and how does it differ in the listing? - Which classes must I keep so core JS doesn't break?
- What is the PS 1.6
blockcartcalled now, and where did its template go? - Which hook renders the mini-cart modal?
These maps answer exactly those, with file paths you can open and code fragments that show what changed.
| Map | What it answers |
|---|---|
| Theme Evolution 1.6 → 9 | CSS/ID selectors, category tree, faceted search, cart, JS mechanics (jQuery → Bootstrap → TypeScript), ARIA, theme config, TPL paths, hooks — mapped across every version. Includes a quick-reference conversion table. |
| Modules Evolution 1.6 → 9 | block* → ps_* name map, TPL directory changes, hook renames, theme-override vs base-module differences, new infrastructure/frontend modules. |
| Theme Map — Classic & Hummingbird | Layout tree, {include} map (who pulls in whom), full hook-to-template map, protected JS selectors, prestashop event bus, dynamic runtime classes, theme.yml structure. |
| Standard Modules Reference | Per-module: Smarty variables, protected selectors, JS events, configuration keys, override paths, and "what's TPL vs what's PHP/JS" — for over two dozen native modules (search, cart, faceted search, menu, reviews, wishlist, and more). |
| Controllers → Smarty Variables | What each front controller passes to the template ($product, $listing, $customer, $urls, $cart, …), PS8 vs PS9 differences, and the controller-override pattern for adding your own template data. |
Open the map that matches your task and jump to the section. The maps are meant to be read next to your editor, not front-to-back:
- File paths are given inline throughout, so you can open the exact source when you need the full code.
- Protected selectors tables list the class/ID names you must not remove.
- Quick reference / Quick questions sections at the end of most maps are the fast lookup path.
- In the Theme Evolution map,
[FILES]blocks point to full source and[SEMANTICS]blocks show only the fragments that change meaning.
- Verified against: PrestaShop 1.6.1.24, 1.7.8.11, 8.2.6, and 9.1.2.
- Themes:
default-bootstrap(1.6),classic(1.7/8/9),hummingbird(9). - File paths, selectors, hook names, and Smarty variables are read straight from the source of those releases — open them and they're there. A minor version bump can move a line number or rename a class; if something doesn't match your install, check your version against the ones above.
- What genuinely varies per shop: category / attribute / feature IDs and configuration values. Any specific ID shown in a map is an example only — read your own shop's values (by opening its files or checking the back office) before relying on them.
Corrections and additions are welcome — PrestaShop keeps moving and these maps will drift. Open an issue or a PR with the version you observed and a file path so it can be verified against source.
MIT — use it, fork it, ship it.
Maintained by Marcin Bręczewski (@Breczek) — PrestaShop development and AI tooling.