テーマ内のカスタムテンプレートをデフォルトに設定する

すでに解説したように、パッケージ化されたテーマには、ブロックのカスタムビューテンプレートを含めることはできますが、デフォルトのビューテンプレートをオーバーライドすることはできません。パッケージの blocks ディレクトリにコアブロックタイプの view.php を置いても、デフォルトブロックの表示は変わりません。しかし、新規にブロックをページに追加した際に、デフォルトで選ばれるカスタムテンプレートをテーマから指定することはできます。この方法で、テーマを利用するユーザーにデフォルトのビューの代わりにカスタムテンプレートを使用するように案内しなくてもよくなります。

では、その方法をご紹介しましょう。以前にカスタマイズした画像スライダーのデフォルトビューテンプレートを思い出してください。このビューテンプレートは application/blocks/image_slider/view.php に設置しました。このビューテンプレートを、"Enterprise" という名前のテーマを使用している際に画像スライダーブロックを追加する際にデフォルトのテンプレートとして使われるようにしてみましょう。

まず、カスタムテンプレートをテーマのパッケージディレクトリ内に作成します。

mkdir packages/enterprise/blocks
mkdir packages/enterprise/blocks/image_slider/
mkdir packages/enterprise/blocks/image_slider/templates
mv application/blocks/image_slider/view.php packages/enterprise/blocks/image_slider/template/enterprise_image_slider.php

ここで、"Enterprise Image Slider" という名前のカスタムテンプレートを作成しています。そして、このテンプレートを使うと、Enterprise テーマで美しく表示されるとします。このままでは、テーマのユーザーにそのことを説明しないといけません。そうでないと、ユーザーのページに崩れた表示の画像スライダーが表示されてしまうことでしょう。ありがたいことに、Enterpriseテーマ内で画像スライダーブロックが追加された際に、このカスタムテンプレートがデフォルトで選ばれるようにすることは難しくありません。

その際、テーマには PageTheme クラスが必要です。このファイルに詳しくない場合は(5.7以降の新しい機能です)、このページを先に読んでください。基本的に、PageTheme クラスはテーマの機能や属性について指定するファイルです。この場合、Enterprise テーマの PageTheme クラスに次のコードを追加します。

public function getThemeDefaultBlockTemplates()
{
    return array(
        'image_slider' => 'enterprise_image_slider'
    );
}

これだけです!Enterprise テーマが使われたページで画像スライダーブロックを追加すると、"Enterprise Image Slider" カスタムテンプレートが、画像スライダーブロックのデフォルトテンプレートの代わりに選択されています。

原文:Default a block to a custom template in a theme