トップページの「カードタイプ切り替え」機能を追加する方法

Cocoonカスタマイズ集
この記事は約5分で読めます。
記事内に広告が含まれています。

はじめに

THE THORでは、トップページに「ワイドレイアウト」「カードレイアウト」「ノーマルレイアウト」の切り替えボタンを設置できます。

これと同様に、トップページにカードタイプ切り替えボタンを追加します。

この記事では、この方法について説明します。

Cocoon設定→インデックス→カードタイプは、以下のいずれかに設定してください。

  • 縦型カード(2列)
  • デフォルト
  • 大きなカード

完成イメージ

実装手順

以下の手順で実装します。

  • ラベル
    JavaScriptを追加

    以下のコードをjavascript.jsに追加します。

    jQuery(function ($) {
      const $list = $('.list');
    
      // カードタイプごとに適用するクラスの対応マップ
      const layoutMap = {
        'ect-entry-card'      : ['ect-entry-card'],
        'ect-big-card'        : ['ect-big-card'],
        'ect-vertical-card-2' : ['ect-vertical-card-2', 'ect-vertical-card', 'ect-2-columns']
      };
    
      if ($list.length) {
        const formHtml = `
          <form class="layout-switcher" id="layoutForm">
            <label class="layout-switcher__item">
              <input class="layout-switcher__input" type="radio" hidden name="layout" value="ect-entry-card">
              <span class="layout-switcher__icon dashicons dashicons-align-wide"></span>
            </label>
            <label class="layout-switcher__item">
              <input class="layout-switcher__input" type="radio" hidden name="layout" value="ect-vertical-card-2">
              <span class="layout-switcher__icon dashicons dashicons-screenoptions"></span>
            </label>
            <label class="layout-switcher__item">
              <input class="layout-switcher__input" type="radio" hidden name="layout" value="ect-big-card">
              <span class="layout-switcher__icon dashicons dashicons-align-full-width"></span>
            </label>
          </form>
        `;
    
        // 「カードタイプ切り替え」ボタンを追加
        $list.before(formHtml);
    
        // layoutMapに定義されているすべてのクラス名を重複なくリスト化
        const allLayoutClasses = Object.values(layoutMap).flat();
    
        // ローカルストレージから取得
        const savedKey = localStorage.getItem('my_layout_class') || 'ect-entry-card';
        const savedClasses = layoutMap[savedKey] || layoutMap['ect-entry-card'];
    
        // 保存されているレイアウトクラスを適用
        $list
          .removeClass(allLayoutClasses.join(' '))
          .addClass(savedClasses.join(' '));
    
        // 保存されているレイアウトを選択状態に設定
        $(`input[name="layout"][value="${savedKey}"]`).prop('checked', true);
    
        // レイアウトが変更された場合
        $('input[name="layout"]').on('change', function () {
          const selectedKey = $(this).val();
          const selectedClasses = layoutMap[selectedKey] || layoutMap['ect-entry-card'];
    
          // 選択したレイアウトのクラスを付与
          $list
            .removeClass(allLayoutClasses.join(' '))
            .addClass(selectedClasses.join(' '));
    
          // 選択されたレイアウトをローカルストレージに保存
          localStorage.setItem('my_layout_class', selectedKey);
        });
      }
    });
  • ラベル
    CSSを追加

    以下のコードをstyle.cssに追加します。

    .layout-switcher {
      display: flex;
      gap: 10px;
      justify-content: flex-end;
    }
    
    .layout-switcher__item {
      color: #ccc;
      cursor: pointer;
    }
    
    .layout-switcher__input:checked + .layout-switcher__icon {
      color: #333;
    }

さいごに

今回紹介した方法を使えば、THE THORのように、トップページにカードタイプの切り替えボタンを設置できます。
ユーザーにとって見やすいレイアウトを選べるようになるため、回遊率の向上や直帰率の改善にもつながります。

タイトルとURLをコピーしました