EC-CUBEのAMP HTML化
このたびEC-CUB 4 AMPプラグインリリースの際、
では、
EC-CUBE 4の商品詳細ページでのユーザインタラクション
EC-CUBE 4をAMP HTML化するにあたり、
たとえば、
- 商品金額を変更
 - 商品コードを変更
 - セレクトボックスのoption要素の値を変更
 - 在庫有無の判定
 - フォーム送信時の値の変更
 - amp-list
 - amp-mustache
 - amp-bind
 
EC-CUBE 4のデフォルトではインタラクションの制御をJavaScriptが担っていますが、
セレクトボックスのユーザインタラクションに必要なAMPコンポーネント
セレクトボックスを操作し、
大まかな流れとしては、
EC-CUBE 4への実装
実装する際、
<script async src="https://cdn.ampproject.org/v0.js">
<script async custom-element="amp-list" src="https://cdn.ampproject.org/v0/amp-list-0.1.js">
<script async custom-template="amp-mustache" src="https://cdn.ampproject.org/v0/amp-mustache-0.2.js">
<script async custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.js">
そして以下がAMPコンポーネントを組み込んだEC-CUBE 4の商品詳細ページのソースコードになります。
実際はこのコードに加えて、
AMP HTMLが組み込まれた詳細なTwigのテンプレートを確認したい場合は、
<amp-list class="ec-selectList" layout="flex-item" src="https://◯◯◯.com/classCategories.json">
  <template type="amp-mustache">
    {{#classcategory_1.0}}
      {{^classcategory_1.0.classcategory_2}}
        <div class="ec-select">
          <select id="classcategory_id1" name="classcategory_id1" class="form-control" on="change: AMP.setState({selectResult: classCategories.items[0].classcategory_1.filter(elm => elm.id == event.value)[0]})">
            <option value="__unselected">選択してください
              {{#classcategory_1}}
                <option value="{{id}}">{{name}}
              {{/classcategory_1}}
          </select>
        </div>
      {{/classcategory_1.0.classcategory_2}}
      {{#classcategory_1.0.classcategory_2.0}}
        <div class="ec-select">
          <select id="classcategory_id1" name="classcategory_id1" class="form-control" on="change: AMP.setState({selectOption: classCategories.items[0].classcategory_1.filter(elm => elm.id == event.value)[0], selectResult: ''})">
            <option value="__unselected">選択してください
            {{#classcategory_1}}
              <option value="{{id}}">{{name}}
            {{/classcategory_1}}
          </select>
        </div>
      {{/classcategory_1.0.classcategory_2.0}}
    {{/classcategory_1.0}}
  </template>
</amp-list>
<amp-list class="ec-selectList" layout="flex-item" [src]="selectOption || 'https://◯◯◯.com/classCategories.json'" src="./classCategories.json">
  <template type="amp-mustache">
    {{^classcategory_2}}
      {{#classcategory_1.0.classcategory_2.0}}
        <div class="ec-select">
          <select id="classcategory_id2" name="classcategory_id2" class="form-control">
            <option value="__unselected">選択してください
          </select>
        </div>
      {{/classcategory_1.0.classcategory_2.0}}
    {{/classcategory_2}}
    {{#classcategory_2.0}}
      <div class="ec-select">
        <select id="classcategory_id2" name="classcategory_id2" class="form-control" on="change: AMP.setState({selectResult: selectOption.classcategory_2.filter(elm => elm.id == event.value)[0]})">
          <option value="__unselected">選択してください
          {{#classcategory_2}}
            <option value="{{id}}">{{name}}
          {{/classcategory_2}}
        </select>
      </div>
    {{/classcategory_2.0}}
  </template>
</amp-list>
後述しますが、
<amp-state id="classCategories" src="https://◯◯◯.com/classCategories.json">
ここまでで、
上記のセットアップが完了したページを読み込むと、
EC-CUBE 4は
今回はここまでとし、
