カスタムフィールドグループ

カスタムフィールドグループとは、単体の項目であるカスタムフィールドを複数まとめて取り扱うことができる機能です。カスタムフィールドの項目を追加したり、削除したりすることができます。
カスタムフィールドグループはカスタムフィールドと同じように画像やテキストのカスタムフィールドを組み合わせて使えます。


カスタムフィールドグループのサンプル

カスタムフィールドグループのサンプル


例)画像とテキスト、テキストエリアを組み合わせたカスタムフィールドグループです。

<table class="js-fieldgroup-sortable">
  <!-- BEGIN bfd_field_unit_group:loop -->
  <tr class="sortable-item">
    <td class="item-handle">
      <div class="acms-form-group"><span class="acms-icon acms-icon-sort2"></span></div>
      <a class="item-delete acms-btn-admin acms-btn-admin-danger block-level" href="#" onclick="return false;">削除</a>
    </td>
    <td>
      <table class="nestTable">
        <tr>
          <th>小画像</th>
          <th>小見出しとURL</th>
          <th>小概要</th>
        </tr>
        <tr>
          <td>
              <!-- BEGIN bfd_field_unit_image:veil -->
              <img src="%{ARCHIVES_DIR}{bfd_field_unit_image@path}" />
              <!-- END bfd_field_unit_image:veil -->
              <br />
              <label><input type="checkbox" name="bfd_field_unit_image@edit[{i}]" value="delete" />削除</label>
              <input type="file" name="bfd_field_unit_image[{i}]" class="acms-form-width-full" />
              <input type="hidden" name="bfd_field_unit_image@width[{i}]" value="200" />
            </td>
            <td>
              <div class="acms-form-group">
                <input type="text" name="bfd_field_unit_lead[{i}]" value="{bfd_field_unit_lead}" class="acms-form-width-full" />
              </div>
              <input type="text" name="bfd_field_unit_url[{i}]" value="{bfd_field_unit_url}" class="acms-form-width-full" />
            </td>
            <td>
              <textarea name="bfd_field_unit_summary[{i}]" class="acms-form-width-full" >{bfd_field_unit_summary}</textarea>
            </td>
        </tr>
      </table>
    </td>
  </tr>
    <!-- END bfd_field_unit_group:loop -->
    <tr class="sortable-item item-template">
      <td class="item-handle">
        <span class="acms-icon acms-icon-sort2"></span>
      </td>
      <td>
        <table>
          <tr>
            <th>小画像</th>
            <th>小見出しとURL</th>
            <th>小概要</th>
          </tr>
          <tr>
            <td>
              <input type="file" name="bfd_field_unit_image[]" class="acms-form-width-full" />
              <input type="hidden" name="bfd_field_unit_image@width[]" value="200" />
            </td>
            <td>
              <div class="acms-form-group">
                <input type="text" name="bfd_field_unit_lead[]" value="" class="acms-form-width-full" />
              </div>
              <input type="text" name="bfd_field_unit_url[]" value="" class="acms-form-width-full" />
            </td>
            <td>
              <textarea name="bfd_field_unit_summary[]" class="acms-form-width-full" ></textarea>
            </td>
          </tr>
        </table>
      <input type="hidden" name="bfd_field_unit_image@old[{i}]" value="{bfd_field_unit_image@path}" />
    </td>
  </tr>
  <tfoot>
      <tr>
      <td colspan="3">
        <input type="button" class="item-insert acms-btn-admin" value="項目を追加する" />
      </td>
    </tr>
  </tfoot>
</table>

<input type="hidden" name="@bfd_field_unit_group[]" value="bfd_field_unit_lead" />
<input type="hidden" name="field[]" value="bfd_field_unit_lead" />
<input type="hidden" name="@bfd_field_unit_group[]" value="bfd_field_unit_url" />
<input type="hidden" name="field[]" value="bfd_field_unit_url" />
<input type="hidden" name="@bfd_field_unit_group[]" value="bfd_field_unit_summary" />
<input type="hidden" name="field[]" value="bfd_field_unit_summary" />

<input type="hidden" name="bfd_field_unit_image:extension" value="image" />
<input type="hidden" name="@bfd_field_unit_group[]" value="bfd_field_unit_image@path" />
<input type="hidden" name="@bfd_field_unit_group[]" value="bfd_field_unit_image@x" />
<input type="hidden" name="@bfd_field_unit_group[]" value="bfd_field_unit_image@y" />
<input type="hidden" name="@bfd_field_unit_group[]" value="bfd_field_unit_image@edit" />
<input type="hidden" name="@bfd_field_unit_group[]" value="bfd_field_unit_image@old" />
<input type="hidden" name="field[]" value="bfd_field_unit_image" />
<input type="hidden" name="field[]" value="@bfd_field_unit_group" />

カスタムフィールドグループ内で使用可能なclass属性

カスタムフィールドグループ内では、いくつかの特殊なclass属性の記述があります。これらは、実際にブラウザ上で表示される際に機能します。

js-fieldgroup-sortable

このclass属性が適用されている範囲内で、カスタムフィールドグループが使用できます。 ひな形となり、この要素の内容が追加されます。

item-handle

このclass属性が記述されている要素が、順番を変更する時に「つかむ(ドラッグする)」部分になります。js-fieldgroup-sortable内で使用可能です。

item-delete

このclass属性が記述されている要素で、該当するカスタムフィールドグループが削除できます。js-fieldgroup-sortable内で使用可能です。

item-max

このclass属性が記述されている要素のvalueにある値がカスタムフィールドグループに挿入できる項目の最大数となります。例えば以下のソースコードで、7以上の項目を追加しようとすると警告文が表示されます。js-fieldgroup-sortable内で使用可能です。

<input type="hidden" class="item-max" value="6" />


例で使用したカスタムフィールドの解説

カスタムフィールドの定義

カスタムフィールドのグループ名(@bfd_field_unit_group)とカスタムフィールド変数名(bfd_field_unit_lead)をセットで定義します。

<input type="hidden" name="@カスタムフィールドのグループ名[]" value="カスタムフィールド変数名" />
<input type="hidden" name="field[]" value="カスタムフィールド変数名" />

カスタムフィールドのグループ名(@bfd_field_unit_group)はカスタムフィールドのグループ名を記述しています。

<input type="hidden" name="field[]" value="@カスタムフィールドのグループ名" />

テンプレートに表示する

エントリーカスタムフィールドで作成した場合は、Entry系モジュールのentry:loop内にカスタムフィールドグループを記述してください。

<!-- BEGIN bfd_field_unit_group:loop -->
<div style="width:200px; float:left; margin-right:20px;">
<!-- BEGIN bfd_field_unit_image:veil -->
<img src="%{ARCHIVES_DIR}{bfd_field_unit_image@path}" alt="" width="200">
<!-- END bfd_field_unit_image:veil -->
<h3><a href="%{HTTP_ROOT}{bfd_field_unit_url}">{bfd_field_unit_lead}</a></h3>
<p>{bfd_field_unit_summary}</p>
</div>
<!-- END bfd_field_unit_group:loop -->


上記のような bfd_field_unit_group:loop のブロック中に変数を書くことで複数件のデータを表示させるのがカスタムフィールドグループの利用としては一般的ですが、ループさせずに 2番目だけ 表示させたいという場合には、{bfd_field_unit_lead[1]} のような記述でも「小見出し2です」を表示させることが可能です。(配列の添字は 0 から始まります)

カスタムユニットを動的化してみよう


通常カスタムユニットを変更しようと思った場合にはテンプレートを修正する必要が出てきます。ですがカスタムユニットの項目をカスタムフィールドで作ることによってテンプレートを触ることなくカスタムユニットの内容を変更できるようになります。

ハンズオン概要

今回は動的カスタムユニットを使ってインタビュー記事を作成していきます。カスタムユニットの完成イメージはこちらです。


カスタムユニット完成イメージ


今回動的化する箇所は画像になります。画像をブログのカスタムフィールドで登録できるようにし、その登録内容をカスタムユニットに表示できるように実装していきましょう。今回使用するテクニックは エスケープと Set Rendered / Get Rendered になります。

ブログのカスタムフィールド

この記事で使用しているテーマはbeginner2019ですが他のテーマで実施していただいても問題ありません。

まずは、画像の選択肢を追加するためのカスタムフィールドを作っていきます。カスタムフィールドメーカーを使ってソースコードを生成することもできますが、今回は下記ソースコードを使用してください。

下記入力用ソース/themes/beginner2019/admin/blog/field.html に追加してください。

<!-- スタッフリスト -->
<h2 class="acms-admin-admin-title2">スタッフリスト</h2>
<table class="js-fieldgroup-sortable adminTable acms-admin-table-admin-edit">
  <thead class="acms-admin-hide-sp">
    <tr>
      <th class="acms-admin-table-left acms-admin-admin-config-table-item-handle"> </th>
      <th class="acms-admin-table-left">コード</th>
      <th class="acms-admin-table-left">画像</th>
      <th class="acms-admin-table-left">名前</th>
      <th class="acms-admin-table-left acms-admin-admin-config-table-action">削除</th>
    </tr>
  </thead>
  <tbody>
    <!-- BEGIN group_staff:loop -->
    <tr class="sortable-item">
      <td class="item-handle acms-admin-table-nowrap">
        <i class="acms-admin-icon-sort"></i>
      </td>
      <td>
        <input type="text" name="group_staff_code[]" value="{group_staff_code}" class="acms-admin-form-width-sm" />
      </td>
      <td class="js-media-field">
        <div class="js-droparea" data-thumbnail="{group_staff_img@thumbnail}" data-type="image" style="width:150px"></div>
        <p class="js-text acms-admin-text-danger" style="display:none">許可されていないファイルのため挿入できません。</p>
        <div class="acms-admin-margin-top-mini">
          <button type="button" class="js-insert acms-admin-btn" data-type="image">選択</button>
        </div>
        <input type="hidden" name="group_staff_img[]" value="{group_staff_img}" class="js-value" />
      </td>
      <td>
        <input type="text" name="group_staff_name[]" value="{group_staff_name}" class="acms-admin-form-width-full" />
      </td>
      <td class="acms-admin-table-nowrap">
        <input type="button" class="item-delete acms-admin-btn-admin acms-admin-btn-admin-danger" value="削除" />
      </td>
    </tr>
    <!-- END group_staff:loop -->
    <tr class="sortable-item item-template">
      <td class="item-handle acms-admin-table-nowrap">
        <i class="acms-admin-icon-sort"></i>
      </td>
      <td>
        <input type="text" name="group_staff_code[]" value="" class="acms-admin-form-width-full" />
      </td>
      <td class="js-media-field">
        <div class="js-droparea" data-type="image" style="width:150px"></div>
        <p class="js-text acms-admin-text-danger" style="display:none">許可されていないファイルのため挿入できません。</p>
        <div class="acms-admin-margin-top-mini">
          <button type="button" class="js-insert acms-admin-btn" data-type="image">選択</button>
        </div>
        <input type="hidden" name="group_staff_img[]" value="" class="js-value" />
      </td>
      <td>
        <input type="text" name="group_staff_name[]" value="" class="acms-admin-form-width-full" />
      </td>
      <td class="acms-admin-table-nowrap">
        <input type="button" class="item-delete acms-admin-btn-admin acms-admin-btn-admin-danger" value="削除" />
      </td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td colSpan="5">
        <input type="button" class="item-insert acms-admin-btn-admin" value="追加" />
      </td>
    </tr>
  </tfoot>
</table>
<input type="hidden" name="@group_staff[]" value="group_staff_code" />
<input type="hidden" name="field[]" value="group_staff_code" />
<input type="hidden" name="group_staff_img:extension" value="media" />
<input type="hidden" name="@group_staff[]" value="group_staff_img" />
<input type="hidden" name="field[]" value="group_staff_img" />
<input type="hidden" name="@group_staff[]" value="group_staff_name" />
<input type="hidden" name="field[]" value="group_staff_name" />
<input type="hidden" name="field[]" value="@group_staff" />

これで、カスタムフィールドグループを使い自由に画像を追加できるようになりました。管理ページ > ブログ > カスタム設定 を開き「スタッフリスト」が追加されているのを確認して下さい。


ブログのカスタムフィールド


インタビュー記事に使えそうな画像をブログのカスタムフィールドにいくつか登録しておきましょう(適当な人型の画像をご用意いただくか、下記URLなどの素材サイトから画像をダウンロードしてください)。また、各行に好きなコード名をふっておいて下さい。コード名は半角英数字が望ましいです。

今回のハンズオンの例では、かわいいフリー素材集 いらすとや さんの画像を使わせていただきました。

カスタムユニットの作成

次に、画像とテキストと吹き出しの向きを設定できるカスタムユニットを作成していきます。

入力側の設定

下記の入力用ソース/themes/beginner2019/admin/entry/unit/extend.html に貼り付けます。指定したフォルダやファイルが無い場合は作成してください。

<!-- BEGIN custom_interview -->
<table class="acms-admin-table-admin-edit">
  <tr>
    <td colspan="2">
      <!-- BEGIN_MODULE Blog_Field -->
      <!-- BEGIN group_staff:loop -->
      <div style="display:inline-block;">
        <div style="margin-bottom:10px;" class="acms-admin-form-radio">
          <input type="radio" name="interview_code\{id\}" value="{group_staff_code}" \{interview_code:checked#{group_staff_code}\} id="input-radio-interview_code-{group_staff_code}-\{id\}" class="acms-admin-btn-radio" />
          <label for="input-radio-interview_code-{group_staff_code}-\{id\}">
            <div style="width:70px;height:70px;">
              <img class="js-focused-image" data-focus-x="{group_staff_img@focalX}" data-focus-y="{group_staff_img@focalY}" alt="{group_staff_img@alt}" src="%{MEDIA_ARCHIVES_DIR}{group_staff_img@path}[resizeImg(70)]" />
            </div>
            <!-- BEGIN_IF [{group_staff_name}/nem] -->
            <p style="margin:5px 0 10px;font-size:10px;text-align:center;">{group_staff_name}</p>
            <!-- END_IF -->
          </label>
        </div>
      </div>
      <!-- END group_staff:loop -->
      <input type="hidden" name="unit\{id\}[]" value="interview_code\{id\}" />
      <!-- END_MODULE Blog_Field -->
    </td>
  </tr>
  <tr>
    <th>吹き出しの向き</th>
    <td>
      <select name="interview_control{id}" class="acms-admin-form-width-sm">
        <option value="right" {interview_control:selected#right}>右</option>
        <option value="left" {interview_control:selected#left}>左</option>
      </select>
      <input type="hidden" name="unit{id}[]" value="interview_control{id}" />
    </td>
  </tr>
  <tr>
    <th>テキスト</th>
    <td>
      <textarea name="interview_text{id}" class="acms-admin-form-width-full">{interview_text}</textarea>
      <input type="hidden" name="unit{id}[]" value="interview_text{id}" />
    </td>
  </tr>
</table>
<!-- END custom_interview -->

ここでのポイント!!

ポイント1
ブログのカスタムフィールド情報を表示させるために Blog Field モジュールを使用しています。

ポイント2
custom_interview ブロック内で Blog Field モジュールを展開しているため、custom_interview ブロックの変数が先に解決されないようにバックスラッシュでエスケープしています。

<input type="radio" name="interview_code\{id\}" value="{group_staff_code}" \{interview_code:checked#{group_staff_code}\} id="input-radio-interview_code-{group_staff_code}-\{id\}" class="acms-admin-btn-radio" />
          <label for="input-radio-interview_code-{group_staff_code}-\{id\}">

ポイント3
interview_code の value には {group_staff_code} を指定します。スタッフコードで一元管理し、ブログのカスタムフィールドを変更した時にエントリー側も変更されるようにしています。

<input type="radio" name="interview_code\{id\}" value="{group_staff_code}" \{interview_code:checked#{group_staff_code}\} id="input-radio-interview_code-{group_staff_code}-\{id\}" class="acms-admin-btn-radio" />

出力側の設定

下記出力用ソース/themes/beginner2019/include/unit/extend.html に貼り付けてください。指定したフォルダやファイルが無い場合は作成してください。

<!-- BEGIN unit#custom_interview -->
<div class="interview-{interview_control}-photo">
<!-- GET_Rendered id="{interview_code}" -->
</div>
<div class="interview-{interview_control}"><p>{interview_text}[escape|nl2br]</p></div>
<!-- END unit#custom_interview -->

ここでのポイント!!

ポイント1
カスタムユニット内で Blog Field モジュールを呼び出すようなことはしません。カスタムユニット内で Blog Field モジュールを呼び出してしまうとユニットが追加されるたびにモジュールが動くため、重たいページになってしまいます。なので Set Rendered / Get Rendered を使ってユニットの軽量化をしていていきます。

<!-- GET_Rendered id="{interview_code}" -->

ポイント2
IDは {interview_code} を設定します。 {group_staff_code} で管理できるようにしたいため、スタッフコードが入っている {interview_code} をIDとして使用します。

ポイント3
吹き出しの向きによってスタイルを変更したいため、クラス名に変数 {interview_control} を含めます。CSSについては後ほど追記していきますが、.interview-right と .interview-left というセレクタ名でスタイルを分けていきます。

次に、下記 Blog_Field の出力用ソース/themes/beginner2019/news/_entry.html のbodyタグ内に貼り付けてください。
※beginner2019 ではお知らせカテゴリーが用意されていますので、今回はそのお知らせカテゴリー内にインタビュー記事を作成します。

<!-- BEGIN_MODULE Blog_Field -->
<!-- BEGIN group_staff:loop -->
<!-- BEGIN_SetRendered id="{group_staff_code}" -->
<div style="width:80px;height:80px">
	<img class="js-focused-image" data-focus-x="{group_staff_img@focalX}" data-focus-y="{group_staff_img@focalY}" alt="{group_staff_img@alt}" src="%{MEDIA_ARCHIVES_DIR}{group_staff_img@path}[resizeImg(80)]" />
</div>
<p class="interview-name">{group_staff_name}</p>
<!-- END_SetRendered -->
<!-- END group_staff:loop -->
<!-- END_MODULE Blog_Field -->

ここでのポイント!!

ポイント1
カスタムユニット内で Blog_Field のループを何度も回して処理が重たくなるのを防ぐため、ユニットの外であらかじめモジュールを呼び出すようにしています。Set Rendered で変数化することで Get Rendered するだけで読み込めるようにしています。

ポイント2
SetRendered の ID には {group_staff_code} を指定し、スタッフコードを ID として使用します。

管理画面での設定

まず、管理画面上で custom_interview ユニットを登録します。 管理ページ > コンフィグ >デフォルトの[コンフィグ] > 編集設定 の「ユニット追加ボタン」にて [追加] ボタンをクリックし、モード:拡張、ユニット名:custom_interview 、ラベル:インタビュー、で新規ユニットを追加します。


新規ユニット追加


次に、管理ページ > コンフィグ >デフォルトの[コンフィグ] > ユニット設定 の一番下にある[インタビュー]ボタンをクリックして追加したユニットが表示されるようにします。


ユニット設定


スタイルの読み込み

/themes/beginner2019/include/head/link.html に下記スタイルコードを追加してください。

<style>
  /*--------------------
  インタビューユニット
  ----------------------*/
  .entry .interview-right,
  .entry .interview-left {
    display: block;
    position: relative;
    margin: 5px 10px 60px 10px;
    padding: 20px 30px;
    -webkit-border-radius: 20px;
    -moz-border-radius: 20px;
    border-radius: 20px;
  }

  .entry .interview-right p,
  .entry .interview-left p {
    margin: 0;
  }

  .entry .interview-left {
    background-color: #FFE4E6;
    margin-right: 100px;
  }

  .entry .interview-left:before {
    position: absolute;
    content: "";
    display: inline-block;
    border: 8px solid transparent;
    border-left-color: #FFE4E6;
    right: -16px;
  }

  .entry .interview-left-photo {
    width: 80px;
    margin: 0 10px 0 0;
    height: 80px;
    float: right;
    position: relative;
    -webkit-border-radius: 40px;
    -moz-border-radius: 40px;
    border-radius: 40px;
    text-align: center;
    font-weight: 400;
    font-size: 12px;
    line-height: 1.9;
  }

  .entry .interview-right {
    background-color: #DEF7FF;
    margin-left: 100px;
  }

  .entry .interview-right:before {
    position: absolute;
    content: "";
    display: inline-block;
    border: 8px solid transparent;
    border-right-color: #DEF7FF;
    left: -16px;
  }

  .entry .interview-right-photo {
    width: 80px;
    margin: 0 0 0 10px;
    height: 80px;
    float: left;
    position: relative;
    -webkit-border-radius: 40px;
    -moz-border-radius: 40px;
    border-radius: 40px;
    text-align: center;
    font-size: 12px;
    line-height: 16px;
  }

  .entry .interview-name {
    font-size: 10px;
    margin-top: 5px;
  }
</style>

これでインタビュー記事を作成する準備は整いました。

インタビュー記事の作成

それでは実際にインタビュー記事のエントリーを作成してみましょう。「お知らせ」カテゴリーのテンプレートに Blog_Field の出力用ソース を貼り付けたかと思いますので、エントリー作成時には「お知らせ」カテゴリーを指定してください。上手く作成できましたか?

今回のハンズオンではブログのカスタムフィールドで登録した画像をカスタムユニットに使用することで動的なカスタムユニットを作成しました。インタビュー記事だけでなく他のカスタマイズにも使えるテクニックなので是非今後のサイト制作に役立ててください。

デモサイトのようにタイトルや説明を変更したい

カスタムフィールドによる情報の書き換え

a-blog cmsのデモサイトでは、サイトタイトルや説明、フッターのテキストはカスタムフィールド(自由に追加できるエントリー、カテゴリー、ブログ固有の入力フィールド)でできています。

ブログのカスタムフィールドはご利用のテーマに /admin/blog/field.html を置くことで読み込むことができます。

ブログカスタムフィールドの記述に関するファイル

/themes/(ご利用のテーマ)/admin/blog/field.html

a-blog cmsをダウンロードしていただき、v2.0 以降に同梱されている「site2014」テーマのブログカスタムフィールドを参考にしてみてください。

site2014のブログカスタムフィールドの記述に関するファイル

/themes/site2014/admin/blog/field.html

表示されていないカスタムフィールドの値を削除しないようにする

通常、エントリーデータの変更時にはカスタムフィールドの値は全て更新が行われます。そのエントリーに登録されているカスタムフィールドの値を全て削除したのちに、入力されている値を登録します。
例えば、新規エントリー登録時には、カスタムフィールドとしてTEL、FAXの項目にデータを入力して保存します。誤って編集時はカスタムフィールドのTEL、FAXの項目を記述しておらず、保存してしまいました。本来ならカスタムフィールドが無い状態で保存したため先ほど入力したTELとFAXの値は消えてしまいますが、下記の記述をするとカスタムフィールドの値が削除されないようになります。
エントリーのカスタムフィールドだけではなく、カテゴリーやブログのカスタムフィールドも同様に値を保持することができます。

全て削除してから登録するのではなく、画面に存在している値のみ上書きするには、下記の2行を入力・編集画面のformブロック内に記述します。

<input type="hidden" name="updateField" value="on" />
<input type="hidden" name="field[]" value="updateField" />

ユーザーがわかりやすい管理画面を作ろう

Ver. 2.10 がリリースされ管理画面のカスタマイズがテンプレートではなく、管理画面からでも設定で可能な部分が多くなりました。その点を理解するためのハンズオンになります。HTMLのテンプレートを触る必要もない設定のみになりますので、ディレクターさんも是非お試しください。

コンフィグセット

コンフィグの設定をブログやカテゴリー毎に細かく設定したり、その設定をグローバル指定し共有することができるようにコンフィグのセットを必要な数だけ作ることができるようになりました。( Ver. 2.10 より )

例えば、多店舗ブログを管理するような場合に、全店舗のブログの設定をコンフィグセットで設定して管理しておくことで一括で設定変更も可能になります。


コンフィグセットの一覧画面

多店舗サイトのプロトタイプを作ってみよう

以下のようなカタチで、子ブログ・孫ブログを作成します。

1. 子ブログ「ショップ(shop) 」を作成

2. ショップ(shop) のコンフィグセットに「店舗用コンフィグ」を作成

各店舗ブログ(孫ブログ)で共有するためのコンフィグを「店舗用コンフィグ」としてコンフィグセットを作成します。


名前 店舗用コンフィグ
グローバル チェックを入れる

コンフィグセット設定例

3. 孫ブログ 「東京(tokyo) 」「大阪(osaka) 」「名古屋(nagoya) 」を作成


孫ブログの設定例


コンフィグセット 店舗用コンフィグ
コードネーム 「shop/tokyo」、「shop/osaka」、「shop/nagoya」

複数の孫ブログを作成する際には、コンフィグセットを「デフォルト」から「店舗用コンフィグ」を設定して作成してください。

※ コードネームの欄は、shop/tokyo と設定することで http://localhost/shop/tokyo/ となり、tokyo とだけ書くと http://localhost/tokyo/ で表示が可能になります。つまり、ブログの URL はブログの階層構造を無視して設定が可能になりますので shop/ が必要な場合にはコードネームで設定をするようにしてください。

4.「店舗用コンフィグ」を編集

ショップのコンフィグに作られている「店舗用コンフィグ」を修正することで設定が各店舗のブログの設定が変わることを確認してみてください。

分かりやすいところでいえば、テーマ設定を変更してみてください。

5. この機会に「カテゴリーのグローバル化」も体験してみよう

せっかく多店舗ブログの設定を行ったので、カテゴリーのグローバルについても体験してみましょう。

ショップブログ(shop) のカテゴリーの管理画面にアクセスして、お知らせ (topics) をカテゴリーで作成して、グローバルのチェックをつけて作成してみてください。

すると、孫ブログ側でも お知らせ (topics) が利用できるようになります。

メニュー管理

管理ページの左側に並んでいる管理メニュー項目がブラウザからカスタマイズ可能になる「メニュー管理」機能が増えました。「メニュー管理」機能はルートブログのコンフィグまたは左端のサイドメニューのヘルプメニューからご利用できます。

メニュー管理では、例えば「コメント」「スケジュール」「カート」など、使わないメニューを削除することが簡単にできます。


メニュー管理機能の設定画面

また、項目を追加 をすることでオリジナルのメニューを追加可能です。

メニュー管理のカスタマイズ

1.「外部リンク」列を追加

外部リンクをメニューを用意し、Googleアナリティクス・サーチコンソールへのリンクを常時管理画面のメニューに追加してみましょう。

列を追加」ボタンをクリックすると新規のメニューグループが追加されます。「 新規」 のテキスト部分はクリックすると編集可能になりますので、「外部リンク」に書き換えてみてください。


メニューグループを新規追加した画面


項目を追加」 で、Googleアナリティクス・サーチコンソールのリンクを設定します。

最後に、このメニューグループはドラッグして順番が変更できますので、最後に持っていきましょう。そして、「保存」すると作業は完了です。

管理メニューの反映を確認するためには、ブラウザのリロードが必要です。

2. 管理画面のショートカットとして利用

制作中によく利用する管理画面をリンクとして出しておくことも管理画面の移動回数を減らすことができ、便利にお使いいただけます。※入力欄にはグローバル変数の利用が可能です


タイトル URL
カスタムフィールドメーカー /bid/%{BID}/admin/customfield_maker/
コンフィグ /bid/%{BID}/admin/config_index/

ルールの新しい機能

今回、ログインユーザーやログインユーザーの権限によるルールが追加されています。

実用的な例だと、クライアントのみに開発中のサイトをテストデータではなくCMSに登録されている実データを元にチェックしていただくことが可能です。

  1. ルートブログ(bidが1のブログ)にクライアントを想定したユーザーを作成してください。
  2. ルールを新しく作成し、作成したユーザーのIDを「ログインユーザーID」に設定してテーマを切り替えてみてください。