Stories

Detail Return Return

Markdown 模板變量的使用 - Stories Detail

原文鏈接:https://www.nocobase.com/cn/tutorials/markdown-template-varia...

親愛的小夥伴們,歡迎來到本教程!在這一節中,我們將一步步學習如何利用 Markdown 和 Handlebars 模板引擎實現動態內容展示。之前在《Markdown 區塊的妙用》中,你已瞭解了基本語法、創建方法及變量填充,接下來讓我們深入探討模板變量的高級用法。

1 模板引擎 Handlebars 簡介

在你創建 Markdown 區塊後,右上角的配置中會看到一個“模板引擎”選項,默認即為 Handlebars。Handlbars 能幫助你根據條件動態呈現頁面內容,使Markdown也能響應變化。

模板引擎示意圖

1.1 Handlebars 的作用

儘管 Markdown 原生只支持靜態內容展示,但通過 Handlebars,你可以依靠條件(如狀態、數字或選項)來動態切換展示的文案和樣式。這樣,即使面對多變的業務場景,你的頁面也能時刻更新顯示正確的信息。

2 實際應用場景

現在,我們來看幾個實用的場景,並一步步實現它們的功能。

2.1 處理訂單狀態

在一個在線 Demo 中,我們往往需要根據訂單狀態來展示不同的提示信息。假設你的訂單數據表中有一個狀態字段,其狀態如下:

訂單狀態字段

以下是 4 個狀態對應的展示內容:

選項標籤 選項值 展示內容
Pending Approval 1 訂單已提交,等待內部審核。
Pending Payment 2 等待客户付款。請密切關注訂單狀態。
Paid 3 付款已確認,請進行後續處理。指定顧問將在1小時內與客户聯繫。
Rejected 4 訂單審批未通過。如有需要,請複查並重新發起。

在頁面中,我們能夠捕獲到訂單狀態的值,進而動態地展示不同信息。下面我們將詳細講解如何使用 if、else 和 else if 語法實現這一功能。

2.1.1 if 語法

使用 if 條件,可以顯示符合條件的內容。例如:

{{#if 條件}}
  <p>展示結果</p>
{{/if}}

此處的“條件”需採用 Handlebars 的語法(如 eq、gt、lt 等)。試試這個簡單例子:

{{#if (eq 1 1)}}
  <p>展示結果: 1 = 1</p>
{{/if}}

效果參考下圖:

if 示例1
if 示例2

2.1.2 else 語法

當條件不滿足時,可以用 else 指定備用內容。例如:

{{#if (eq 1 2)}}
  <p>展示結果: 1 = 2</p>
{{else}}
  <p>展示結果:1 ≠ 2</p>
{{/if}}

效果如下:

else 示例

2.1.3 多條件判斷

若要根據多個條件進行判斷,可以使用 else if。示例代碼:

{{#if (eq 1 7)}}
  <p>展示結果: 1 = 7</p>
{{else if (eq 1 5)}}
  <p>展示結果: 1 = 5</p>
{{else if (eq 1 4)}}
  <p>展示結果: 1 = 4</p>
{{else}}
  <p>展示結果: 1 ≠ 7 ≠ 5 ≠ 3</p>
{{/if}}

對應效果圖:

多條件判斷示例

2.2 效果展示

配置好訂單狀態後,頁面會根據不同狀態動態切換顯示。請看下圖:

訂單狀態動態效果

頁面中代碼如下:

{{#if order.status}}
  <div>
    {{#if (eq order.status "1")}}
      <span style="color: orange;">⏳ Pending Approval</span>
      <p>訂單已提交,等待內部審核。</p>
    {{else if (eq order.status "2")}}
      <span style="color: #1890ff;">💳 Pending Payment</span>
      <p>等待客户付款。請密切關注訂單狀態。</p>
    {{else if (eq order.status "3")}}
      <span style="color: #52c41a;">✔ Paid</span>
      <p>付款已確認,請進行後續處理。指定顧問將在1小時內與客户聯繫。</p>
    {{else if (eq order.status "4")}}
      <span style="color: #f5222d;">✖ Rejected</span>
      <p>訂單審批未通過。如有需要,請複查並重新發起。</p>
    {{/if}}
  </div>
{{else}}
  <p class="empty-state">當前無待處理訂單。</p>
{{/if}}

試着切換訂單狀態,觀察頁面內容是否隨之更新,驗證你的代碼是否正確。

2.3 展示訂單明細

除了訂單狀態展示,訂單明細(如商品詳情列表)也是常見需求。下面,我們利用 each 語法來實現該功能。

2.3.1 each 語法基本介紹

each 用於循環遍歷列表。例如,對於數組 [1,2,3],你可以這樣寫:

{{#each 列表}}
  <p>展示結果:{{this}}</p>
  <p>索引:{{@index}}</p>
{{/each}}

在循環中,{{this}} 表示當前元素,{{@index}} 表示當前索引。

2.3.2 商品明細示例

假如你需要展示訂單中的所有商品信息,可以使用下面的代碼:

{{#each $nRecord.order_items}}
    <p>{{@index}}</p>
    <p>{{this.id}}</p>
    <p>{{this.price}}</p>
    <p>{{this.quantity}}</p>
    <p>{{this.product.name}}</p>
---
{{/each}}

如果發現頁面未出現數據,請確保訂單明細字段已被正確展示,否則系統會認為這部分數據為冗餘信息而不作查詢。
20250305122543_handlebar_each

你可能會發現 商品對象的名稱(product.name) 沒有打印出來,和上面的原因一樣,我們需要把商品對象也展示出來才行
20250305122543_each2

展示出來後,我們在聯動規則設置隱藏這個關聯字段
20250305122543_hidden_each

2.4 最終成品:訂單商品列表

完成上述步驟後,你將實現一個完整的訂單商品列表展示模板。請參考以下代碼:

### 訂單商品列表

{{#if $nRecord.order_items}}
  <div class="cart-summary">總計: {{$nRecord.order_items.length}} 件商品,總價格: ¥{{$nRecord.total}}</div>
  
  <table>
    <thead>
      <tr>
        <th>序號</th>
        <th>商品名稱</th>
        <th>單價</th>
        <th>數量</th>
        <th>小計</th>
      </tr>
    </thead>
    <tbody>
      {{#each $nRecord.order_items}}
        <tr style="{{#if this.out_of_stock}}color: red;{{/if}}">
          <td>{{@index}}</td>
          <td>{{this.product.name}}</td>
          <td>¥{{this.price}}</td>
          <td>{{this.quantity}}</td>
          <td>¥{{multiply this.price this.quantity}}</td>
          <td>
            {{#if this.out_of_stock}}
              <span>缺貨</span>
            {{else if this.low_stock}}
              <span style="color:orange;">庫存緊張</span>
            {{/if}}
          </td>
        </tr>
      {{/each}}
    </tbody>
  </table>
{{else}}
  <p>訂單為空</p>
{{/if}}

運行後,你會看到如下效果:

訂單商品列表效果

為了更好地展示 Handlebars 的靈活性,我們在訂單詳情中添加了“缺貨”(out_of_stock)和“庫存緊張”(low_stock)字段:

  • 當 out_of_stock 為 true 時,會顯示“缺貨”,且商品條目變為紅色。
  • 當 low_stock 為 true 時,右側提示“庫存緊張”並採用橙色顯示。

額外效果:缺貨與庫存緊張

3 總結與建議

通過以上講解,你已學會如何利用 Handlebars 實現 Markdown 模板的動態渲染,包括 if/else 條件、each 循環等核心語法。在實際開發中,對於更復雜的邏輯,建議結合聯動規則、計算字段、工作流或 script 節點來提升靈活性和擴展性。

希望你能通過練習掌握這些技巧,並在項目中靈活應用。繼續努力,探索更多可能性吧!


若在操作過程中遇到任何問題,歡迎前往NocoBase社區交流或查閲官方文檔。希望本指南能幫助您根據實際需求順利實現用户註冊審核,並根據需要靈活擴展。祝您使用順利,項目成功!

user avatar u_16756731 Avatar u_17470194 Avatar huamingshixunkeji Avatar haitangyijiu_640e92f08aef6 Avatar
Favorites 4 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.