エリアとブロックのコンテナ
前のページで、テーマ内のエリアでグリッドフレームワークをサポートする方法を学びました。作業しながら、次の行に疑問を持ったかもしれません。
$area->enableGridContainer();
このメソッドはグリッドフレームワークが有効にされたテーマ内のエリアにのみ有効です。Bootstrap3以外のグリッドフレームワークも、"container" クラスに該当する仕組みがあります。例えば、Bootstrapのグリッドフレームワークのコンテナは次のように定義されています。
public function getPageThemeGridFrameworkContainerStartHTML() { return '<div class="container">'; } public function getPageThemeGridFrameworkContainerEndHTML() { return '</div>'; }
Bootstrap3のグリッドがサイト内で使用されると、エリアが上記のメソッドでコンテナを使用するように指定されていれば、ほとんどのブロックはコンテナで囲まれます。ただし、ブロックのControllerクラスで次のようにコンテナを使用しないように設定されたブロックは除きます。
protected $btIgnorePageThemeGridFrameworkContainer = false;
この設定はHTMLブロック、水平線ブロック、画像スライダーブロックの controller.php で指定されています。
なぜ?
このことは、高度なページレイアウトの表現を可能にします。例えば、標準インストールされているElementalテーマでは、Mainエリアに追加したブロックはほぼ中央に揃って表示されます。画像スライダー、水平線、HTMLブロックのみ、ページの幅いっぱいに表示されます。これは、これらのブロックでは container クラスで囲まないように定義されているからです。
オプトイン&オーバーライド
この機能はオプトイン(明示的に指定しないと使われない)であることを強調しておきましょう。まず、テーマではグリッドフレームワークを明示的に有効化する必要があります。そして、エリアごとにグリッドコンテナを使用するかを指定する必要があります。この機能を使いたくない場合は、エリアに enableGridContainer() を追加しなければよいのです。