惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
月光博客
月光博客
博客园 - 司徒正美
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
量子位
Recent Announcements
Recent Announcements
V
V2EX
P
Proofpoint News Feed
小众软件
小众软件
云风的 BLOG
云风的 BLOG
腾讯CDC
宝玉的分享
宝玉的分享
Microsoft Azure Blog
Microsoft Azure Blog
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
B
Blog
博客园_首页
GbyAI
GbyAI
博客园 - Franky

Example blog

Ghost routing explained with routes.yaml examples — routes, collections & taxonomies Ghost redirects explained with practical redirects.yaml examples How to Serve JSON or XML Data in Ghost How to Change Your Default Post Template in Ghost Ghost Custom Theme Settings How to add Google Fonts to Ghost Themes How to Configure Ghost with Mailgun Ghost Theme Structure & Organization How to Make Custom Templates in Ghost Themes How to Install Ghost CMS via Ghost-CLI How to Add Syntax Highlighting to Ghost The best Ghost CMS hosting platforms Ghost 6.0 — Social Web and Native Ghost Analytics Ghost CMS Social web beta, email 2FA and more author social links How to keep custom design settings when updating your Ghost theme How to use the public preview card in Ghost How to add members-specific sections in Ghost How to customize the default content CTA in Ghost How to build a custom homepage in Ghost An overview of Ghost editor cards and and how they work Ghost CMS News: One-time payments & collecting sales tax How to customize the private site access template in Ghost How to add custom fonts in Ghost themes Ghost CMS News: Additional payment methods & internal linking How to use Code Injection in Ghost How to set meta data of your custom routes & collections in Ghost Ghost CMS News: TK reminders, ActivityPub and improvements How to format dates and use the date helper in Ghost Ghost CMS internationalization, custom fonts & spam protection Understanding and optimizing post and page settings in Ghost CMS
Ghost CMS Match Helper Usage & Tips
Bright Themes · 2022-09-08 · via Example blog

The match helper allows comparing two values, in a way, it's similar to the {{#has}} helper but it's useful in much more situations and can be used in different contexts.

With {{#match}} comparisons, you can execute different template blocks depending on the result, it supports {{else}} block to execute a different block when the condition is not met.

In addition, it is possible to do {{else match ...}}, to chain together multiple options like a switch statement.

Match helper equality operator

The default behavior is equality:

{{#match @custom.font_family '=' 'Inter'}} ... {{/match}}

This means that if the font_family custom setting is "Inter" the block within the match will be executed. And the above code is the same as:

{{#match @custom.font_family 'Inter'}} ... {{/match}}

If you are checking for equality you don't have to specify the operator ("=") as that is the default one.

You can reverse the check:

{{#match @custom.font_family '!=' 'Inter'}} ... {{/match}}

This means that the block within the match will be executed if the font_family custom setting is NOT "Inter".

Match helper numeric comparisons

The match helper supports operators for numeric comparisons: >, <, >=, <=.

This means that within a {{#get "posts"}} you can use it to check the number of posts and then perform different blocks:

{{#match posts.length '>' 2}}
  {{! Output posts when there are more than 2 }}
{{else}}
  {{! Output posts when there are 2 or less }}
{{/match}}

This way you can output posts in a different way after a certain number.

Similarly, you could check if the number of authors is higher than a specific number (within a {{foreach}}):

{{#match authors.length '>' 1}}
  {{! Output multi authors }}
{{else}}
  {{! Outpost single author }}
{{/match}}

Match helper examples

The match helper is great for many use cases, but especially in combination with Custom settings, so let's explore some use cases and examples:

Font family

We are using the match helper to provide different font family settings in our premium themes. Here are the custom settings from the package.json:

{
  ...
  "config": {
    "custom": {
      "font_family": {
        "type": "select",
        "options": [
          "Inter",
          "Outfit",
          "Inconsolata"
        ],
        "default": "Inter"
       }
       ...
    }
  }
}

Then in the HTML head, the chosen settings are checked and the correct font family is loaded:

{{#match @custom.font_family "Inter"}}
  <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" as="style">
  <style>
    body {
      --font-body: 'Inter', sans-serif;
      --font-headings: 'Inter', sans-serif;
    }
  </style>
{{/match}}

In this case, we are using CSS custom properties for the font family, so it's easier to switch to a different font.

Dynamic tag list

Another use case for the match helper is dynamically rendering a list of tags in your Ghost theme. We have the following custom settings setup:

{
  ...
  "tags_slugs": {
    "type": "text",
    "default": "design,ux,ui,web"
  }
}

Then in handlebars, we will use the provided values to fetch a list of tags and then render them in any way we want:

{{#match @custom.tags_slugs '!=' ''}}
  {{#get 'tags' filter='slug:[{{@custom.tags_slugs}}]' limit='all'}}
    {{#if tags}}
      {{#foreach tags}}
        .. render the tag
      {{/foreach}}
    {{/if}}
  {{/get}}
{{/match}}

The first check is to avoid fetching tags when there are no slugs provided, then in the {{get}} helper, we can use the values, which will make the section dynamic with any number of tags, specifically those that you want.

Hero layout

A third example is making a section of the website appear differently, based on the settings chosen from Ghost Admin. In this example, we will look at the hero section layout for the Nikko theme. Here is the custom setting setup:

{
  ...
  "hero_type": {
    "type": "select",
      "options": [
        "cta",
        "featured-slider",
        "none"
      ],
    "default": "none"
   }
}

The admin can select from "cta", "featured-slider" and "none" for the hero type. These options then are implemented in the template files and whichever option is selected is then displayed.

{{#match @custom.hero_type "cta"}}
  {{> hero-subscribe}}
{{/match}}

{{#match @custom.hero_type "featured-slider"}}
  {{> featured-slider}}
{{/match}}

Conclusions

The {{match}} helper is really useful for making Ghost themes more dynamic and especially in combination with custom settings, it provides many more options for theme developers and those who are looking to make their themes more customizable.