HubL構文の概要
HubLは、広く利用されている他のテンプレート言語(PHPなど)と同様に、コード テンプレート ファイル、つまりHubLテンプレートモジュール内でHTMLに組み込むことができます。HubLの開始位置と終了位置を見分けられるように、区切り文字として機能する主な記号を理解しておいてください。
HubL文は、編集可能なモジュールの作成、条件付きテンプレートロジックの定義、forループの構成、変数の定義などに使用します。文は{%
で区切ります。これによるページ出力はありません。
式は、テンプレートのコンテキストに格納されている値を出力します。式は{{
で区切ります。例えば、変数は文として定義する必要がありますが、変数を出力するにはHubL式を使用します。
最後に紹介する区切り文字は、HubLコメントです。HubLでの開発時に見かけるだけでなく、実際に使用する機会もあるはずです。コメントは、{#
のように定義します。
モジュールは、エンドユーザーがコンテンツエディター上でカスタマイズできるテンプレート内の動的な領域です。例えば、テンプレートファイルをゼロからコーディングする場合に、HubLタグを使用してモジュールをテンプレートに追加することにより、制作担当者がページの特定の領域を編集できるようになります。
モジュールタグは以下の要素で構成されます。
- モジュールのタイプ:レンダリングするモジュールを指定します。使用可能な各種モジュールタイプの一覧については、HubLでサポートされているタグのページを参照してください。
- モジュールの固有名:テンプレートのコンテキスト内で重複しないIDをモジュールに指定します。
- パス:タグに応じて、デザインマネージャーでのモジュールの位置を定義します。HubSpotの既定モジュールのパスは常に@hubspot/で始まり、その後にモジュールのタイプが続きます。詳しくは、以下の例とテンプレートページでのモジュールの使用のページを参照してください。
- パラメーター:追加のモジュール情報を指定します(任意)。
上記の例は、labelパラメーターとvalueパラメーターが指定されたテキストモジュールを示しています。labelはエディターのヘルプテキストを定義し、valueはそのモジュールの既定のテキストを設定します。エディター内でどのように表示されるかについては、以下のサンプルgifを参照してください。

HubLには、アプリから有用な値を出力する定義済みのHubSpot変数が数多く用意されています。また、テンプレートで独自の変数を定義することもできます。以下の例では、primaryColor
という変数を文で定義し、HubL式により出力しています。この例では、HubL変数とCSSを組み合わせています。
HubLマクロでは、動的な値を使用して複数の文を出力できます。この手法は、同様の基本的なコードを繰り返し記述するものの、特定の値だけは変更する場合に役立ちます。以下の例では、マクロを使用して、全てのベンダープレフィックスが含まれるCSS3 transitionプロパティーを出力しています。マクロについて詳しくは、こちらをご覧ください。
HubLにフィルターを追加することで、テンプレート変数の値を変換または変更できます。日付変数の書式を設定するシンプルな例を以下に示します。フィルターでは|(パイプライン記号)を使用し、スペースなしで変数に適用します。
以下の例では、ブログ記事が4月29日に公開されたことを想定しています。記事の公開日の書式が、datetimeformat
フィルターにより設定されます。全てのフィルターの一覧については、こちらを参照してください。
フィルターは変数のレンダリングに影響しますが、関数では値とアカウント情報を処理し、その情報をレンダリングできます。例えば、特定のブログの合計記事数を取得する場合や、色変数を特定の量だけ明るくするか暗くする場合には、関数を使用します。
この例では、designers.hubspot.com/blogのブログ記事の合計数が出力されます。(ブログダッシュボードのURLに含まれる)ブログIDパラメーターを使用して、ターゲットにするブログを指定します。全ての関数の一覧については、こちらを参照してください。
if文では、条件ロジックを使用して、if
、elif
、else
、endif
のHubL文の条件ロジックがテンプレートによってどのようにレンダリングされるかを指示できます。if文は、if
で始まりendif
で終わります。
以下の例では、エンドユーザーがドロップダウンから部門を選択できるchoiceモジュールを定義しています。ユーザーがエディターで選択した内容に基づいて、テンプレート上で採用情報ページの見出しが動的に作成されます。この例では、export_to_template_context
パラメーターを使用する必要があります。
forループを使用すると、シーケンスとして格納されている項目に対し、繰り返し処理を行うことができます。主に、ブログコンテンツをリスト形式でレンダリングする場合に使用されます。forループは、for
文で始まりendfor
文で終わります。
以下の例では、熊の種類の配列を変数bears
に格納しています。次に、forループを使用してさまざまな熊の種類を順に処理し、種類ごとにリスト項目として出力しています。
includeタグを使用することで、複数の.html
ファイルを1つのHubLテンプレートにインクルードできます。標準テンプレート変数を必要としないHTMLファイルを作成するには、[このテンプレートを新しいコンテンツで利用できるようにする]オプションをオフにする必要があります。以下に構文を示します。
また、同じincludeタグを使用して、複数のCSSファイルを1つのCSSファイルにコンパイルすることもできます。親ファイルを公開すると、親のコードによって子ファイルが1つの縮小CSSファイルとしてコンパイルされます。
複雑なテンプレートを作成するときは、親テンプレートを拡張する区画となるブロックを作成して使用できます。
まず、必須のstandard_header_includes
変数とstandard_footer_includes
変数を含む親テンプレートを作成します。このテンプレート内で、以下の構文を使用して一意のブロックを定義する必要があります。このmy_sidebar
は重複しない名前にします。
次に、そのブロックにデータを提供する子HTMLファイルを作成します。まず、親のパスを参照するextends文を宣言する必要があります。このコードブロックは親テンプレートでレンダリングされますが、扱いやすい小さいファイルとして管理できます。この手法は全てのユーザー向けではありませんが、複雑なEメールテンプレートやページテンプレートをコーディングする際の整理に役立ちます。この手法を使用する場合、コンテンツの作成時に子テンプレートを選択する必要があります。
ページエディターでは、ドラッグ&ドロップセクションのHubLマークアップをコピーして、コードを必要に応じて再利用できます。これは、コードファイル内でドラッグ&ドロップセクションを再作成する場合に便利です。
詳しくはセクションのHubLのコピーをご確認ください。
貴重なご意見をありがとうございました。