オフキャンバスメニュー
画面下部からスライドインするモバイル対応メニュー。メインメニュー、サブメニュー(アコーディオン形式)、ソーシャルアイコン、言語・国設定切替に対応している。
コード
97 行 / liquid<div
id="offcanvas-menu"
class="offcanvas offcanvas-bottom"
tabindex="-1"
data-bs-backdrop="false"
aria-label="{{ 'general.accessibility.menu' | t }}">
<div class="offcanvas-body">
{% unless block.settings.main_menu == nil %}
<ul class="nav accordion-nav mb-9">
{% for link in linklists[block.settings.main_menu].links %}
{% if link.links == blank %}
<li class="nav-item">
<a
class="nav-link {% if link.active %}active{% endif %}"
href="{{ link.url }}"
aria-current="{% if link.active %}page{% endif %}">
{{ link.title }}
</a>
</li>
{% else %}
<li class="nav-item collapse-wrapper">
<a
class="nav-link {% if link.child_active %}active{% endif %}"
href="#offcanvas-menu-collapse-{{ forloop.index }}"
aria-controls="offcanvas-menu-collapse-{{ forloop.index }}"
aria-expanded="{% if link.child_active %}true{% else %}false{% endif %}"
data-bs-toggle="collapse"
role="button">
{{ link.title }}
{% render 'svg-icons', icon: 'chevron-down', size: 18 %}
</a>
<div
id="offcanvas-menu-collapse-{{ forloop.index }}"
class="collapse {% if link.child_active %}show{% endif %}">
<ul class="nav flex-column">
{% for child_link in link.links %}
<li>
{% if child_link.title == '-' %}
<hr class="my-3">
{% else %}
<a
class="dropdown-item {% if child_link.active %}active{% endif %}"
href="{{ child_link.url }}"
aria-current="{% if child_link.active %}page{% endif %}">
{{ child_link.title }}
</a>
{% endif %}
</li>
{% endfor %}
</ul>
</div>
</li>
{% endif %}
{% endfor %}
</ul>
{% endunless %}
{% if block.settings.social_icons %}
<div class="social-icons-wrapper text-center mb-5">
{% render 'social-icons', show_title: false %}
</div>
{% endif %}
{% unless block.settings.secondary_menu == nil %}
<ul class="nav nav-secondary justify-content-center mb-4">
{% for link in linklists[block.settings.secondary_menu].links %}
<li class="nav-item">
<a
class="nav-link py-2 px-4 {% if link.active %}active{% endif %}"
href="{{ link.url }}"
aria-current="{% if link.active %}page{% endif %}">
{{ link.title }}
</a>
</li>
{% endfor %}
</ul>
{% endunless %}
<ul class="nav justify-content-center mb-4">
{% if localization.available_countries.size > 1 %}
<li class="nav-item">
<a
class="nav-link nav-link-icon"
href="#modal-localization"
data-bs-toggle="modal"
aria-controls="modal-localization"
aria-label="{{ 'general.accessibility.localization' | t }} {{ localization.country.name }}"
role="button">
{{ localization.country | image_url: width: 20, height: 20 | image_tag }}
</a>
</li>
{% endif %}
</ul>
</div>
</div>
出典・ライセンス
- Repository:
- https://github.com/kondasoft/ks-bootshop
- License:
- MIT
このコードは kondasoft 著作の MIT ライセンスソースです。 原本の著作権は kondasoft が保有します。日本語訳は ALSEL によるものです。
関連項目
Alpine.js統合のメニュー開閉
Alpine.js の @click ディレクティブと :class バインディングを使ったメニュー開閉コンポーネント。ボタンクリックで open 状態を切り替え、ul 要素に expanded クラスを条件付きで付与する。
ヘッダーのレイアウト構造
Web Component のカスタムエレメント `<c-header>` でラップしたヘッダー要素。Tailwind CSS のユーティリティクラスを使い、レスポンシブなパディングとフレックスボックスレイアウトを実装している。
ナビゲーションバーのロゴ
ストアのロゴをナビゲーションバーに表示し、クリックでホームページに戻るコンポーネント。ロゴ画像がない場合はストア名をテキストで表示する。
決済方法アイコン
ストアで有効な決済手段のアイコンをリスト表示するスニペット。Shopify が提供する `payment_type_svg_tag` フィルタを使い、クレジットカード・Apple Pay・Google Pay などのロゴを自動的に描画する。
グローバルナビゲーションメニュー
Shopify 管理画面の「メインメニュー」リンクリストをループし、トップレベルメニュー + 1階層のサブメニューを描画するスニペット。link.title と sub_link.title を escape フィルターでエスケープして XSS 対策を施している。
フッター
ストア共通のフッターセクション。管理画面で設定したフッターメニュー(リンクリスト)をループ表示し、著作権表記を出す。