🏗️ テーマ基盤中級
条件付きラッパー要素の切り替え
3D モデル対応の有無に応じて、ラッパー要素を `product-media` または `div` に切り替えるスニペット。Liquid の `assign` と条件分岐を組み合わせて、動的にタグ名を変更する。
用途
商品ページで 3D モデル表示に対応するときに、メディアコンテナのタグ名をコンテンツに応じて変えたいケース。`product-media` カスタム要素での機能追加と通常の `div` の共存を実装できる。
設置場所
商品メディアセクションやスニペット内の、メディアコンテナ部分に組み込む。`has_3d` 変数が事前に定義されていることを前提に、`{% render 'media-wrapper', has_3d: has_3d %}` のように呼び出す。
注意点
`<{{ wrapper }}>` の構文は Liquid パーサーが完全にサポートしていない環境があるため、ブラウザの開発者ツールでタグ名が意図どおり描画されているか確認する。`has_3d` が未定義の場合は `else` ブロックが実行されるため、デフォルト値の指定が必要ならコンポーネント呼び出し側で初期化する。`loading="lazy"` 属性は `product-media` カスタム要素では無視される可能性があるため、3D モデル用の読み込み制御は JavaScript で別途実装するとよい。
コード
13 行 / liquid{% liquid
if has_3d
assign wrapper = 'product-media'
else
assign wrapper = 'div'
endif
%}
<div>
<{{ wrapper }} loading="lazy">
Content that goes in the middle
</{{ wrapper }}>
</div>
出典・ライセンス
- Source:
- Shopify/theme-tools/packages/prettier-plugin-liquid/src/test/html-liquid-drop-name/index.liquid
- Repository:
- https://github.com/Shopify/theme-tools
- License:
- MIT
このコードは Shopify 著作の MIT ライセンスソースです。 原本の著作権は Shopify が保有します。日本語訳は ALSEL によるものです。
関連項目
🏗️ テーマ基盤中級
セクションスキーマのカスタムブロック定義
セクションの schema ブロック内でカスタムブロックタイプを定義する方法を示すサンプル。@theme と _private というプレフィックスで異なるブロック種別を宣言する。
📁 theme-tools·MIT·7 行
🏗️ テーマ基盤初級
セクション呼び出しのフォーマット
Liquid の section タグを複数行に記述する際の正しいフォーマット例。タグ名を改行で分割しても正しく認識される書き方を示す。
📁 theme-tools·MIT·7 行
🏗️ テーマ基盤初級
レイアウトテンプレートの指定
Liquid の `layout` タグを使い、テーマのレイアウトファイルを指定する構文。複数のレイアウト候補と whitespace 制御(ダッシュ記号)の使い方を示す。
📁 theme-tools·MIT·8 行
🏗️ テーマ基盤上級
Liquid フォーマッター互換のセクション表記
Prettier Liquid プラグインのテストケースで、セクションタグの様々な書式を検証する。異なる間隔・改行・ホワイトスペーストリミングの組み合わせでもセクション名が崩れないことを確認する。
📁 theme-tools·MIT·9 行
🏗️ テーマ基盤初級
基本的なHTMLレイアウト
Prettier Liquid プラグインのテスト用に作られた最小限の HTML テンプレート。DOCTYPE から body タグまでの基本的なドキュメント構造を示す。
📁 theme-tools·MIT·10 行
🏗️ テーマ基盤上級
layout タグのフォーマット
Liquid の layout タグの書式をコード品質ツール(Prettier)でフォーマットするテストケース。スペースや改行位置の違いを正規化し、レイアウト名が壊れないことを検証する。
📁 theme-tools·MIT·10 行