For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Dev Portal
DocsAPI ReferenceLearnCommunityChangelog
DocsAPI ReferenceLearnCommunityChangelog
  • Overview
    • Quick Start
    • Sandboxes
    • Tools & SDKs
    • Support
  • Docs
      • Getting Started
        • Overview
            • Custom Templates
            • Modify the Login Form
            • Checkout Confirmation
            • Order Confirmation
            • Blog Commenting with Disqus
            • Dynamic Template Rendering
        • B2B Edition for Stencil
    • Archive
    • Closed Beta Programs
Dev Portal
LogoLogo
On this page
  • Handlebar partial blocks for Stencil
DocsStorefrontStencilThemesTemplates

Rendering HTML with Ajax

Was this page helpful?
Previous

Blog Commenting with Disqus

Next

Elements

Built with

Stencil allows you to render dynamic components on the fly. For example, note this default code in templates/components/products/quick-view.html (note also this file name, which Handlebars will reference later in this example):

templates/components/products/quick-view.html
<div class="modal-body quickView">
{{> components/products/product-view schema=false}}
</div>

To render a different template, you would instead reference that template’s file name. For example, assume that you want to substitute a custom template that you’ve named: templates/components/products/quicker-view.html.

This next code block is from the Stencil default theme’s /assets/js/theme/global/quick-view.js file. Note the quicker-view.html statements brought in to reference the new file name:

/assets/js/theme/global/quick-view.js
let $modal = $('#modal'),
$modalContent = $('.modal-content', $modal),
$modalOverlay = $('.loadingOverlay', $modal),
modalModifierClasses = 'modal--large';
$('body').on('click', '.quickview', (event) => {
let productId = $(event.currentTarget).data('product-id');
event.preventDefault();
// clear the modal
$modalContent.html('');
$modalOverlay.show();
// open modal
$modal.foundation('reveal', 'open');
//quicker-view.html statement, replacing the standard template's quick-view.html template
utils.api.product.getById(productId, {template: 'products/quicker-view'}, function done(err, response) {
$modalOverlay.hide();
$modalContent.html(response);
return new ProductDetails($modalContent, context);
});
});

Handlebar partial blocks for Stencil

Stencil supports handlebar partial blocks to help you create reusable templates with dynamic content. You can define a partial block using the following use cases:

{{#> components/ul }}
{{> components/li text="Item 1" link="item_link_1"}}
{{> components/li text="Item 2" link="item_link_2"}}
{{> components/li text="Item 3" link="item_link_3"}}
{{/components/ul}}

component/ul

<ul>
{{> @partial-block }}
</ul>

component/li

<li>
<a href="{{link}}">{{text}}</a>
</li>

Result:

<ul>
<li>
<a href="item_link_1">Item 1</a>
</li>
<li>
<a href="item_link_2">Item 2</a>
</li>
<li>
<a href="item_link_3">Item 3</a>
</li>
</ul>

Content placed inside the block will replace the partial’s default content, allowing you to inject custom content while preserving the partial’s structure and logic. This format makes it easier to reuse templates with varying content across your application.