Theme Inheritance¶
nti.nikola_chameleon support themes that extend themes. In fact, with a well designed and documented base theme, nti.nikola_chameleon makes it easy to customize as much or as little as you’d like.
Extending a theme is just like creating a theme.
The only difference is that you need to specify the parent
theme
that you’re extending by name. For example, here’s the theme meta file
for the bootstrap3-chamaleon
theme, which extends the
base-chameleon
theme:
[Theme]
engine = nti.nikola_chameleon
author = NextThought
author_url =
license = Apache2
based_on = Bootstrap 3 <https://getbootstrap.com/>
tags = bootstrap
parent = base-chameleon
[Family]
family = bootstrap3
[Nikola]
bootswatch = True
From that point on, you can override and customize the necessary pieces of the theme. Specifically how you do that will depend on the theme you’re extending.
Replacing Files¶
If you have a *.tmpl.pt
with the same name as one from the parent
theme, your file will replace that file when it is used as a
template name by Nikola and when it is used as
a view name for the purposes of using macros.
(Make sure you define the necessary macros!) This is a little bit
blunt, so we don’t usually recommend replacing entire files (or using
file views to find macro names for that matter).
Replacing Macros¶
Any macros you define with the same name (and specificity) as macros
defined by the parent theme will replace the parent theme macros. For
example, any macros defined in *.macro.pt
files in your theme will
override such macros defined in *.macro.pt
files in the parent
theme (because macros defined that way all have the same, very low,
specificity).
You can override a macro of a given name for only some kinds of objects with an appropriate definition in your theme.zcml.
Extending and Replacing Viewlets¶
Adding to or replacing viewlets defined in the parent theme is the same as doing so in a single theme: just pay attention to the names and the specificity of your viewlet declarations.
ZCML Execution¶
The theme.zcml
files are executed from the base theme down to the
most derived theme. The execution context is the same for each
execution, so base themes can provide features
that child themes can test for.