ブロックエディターユニット


ブロックエディターユニットは、テキスト、画像、ファイルなどの様々なコンテンツを「ブロック」単位で自由に組み立てることができ、表示みたまま編集することができ、記事やページの構成を直感的に編集できます。

表示みたまま編集可能なリッチなエディタ
ブロックエディタ編集画面

使用するための設定

管理画面 > 編集画面 > 編集設定 の「ユニットメニュー」にブロックエディターを追加します。

  • モードを「block-editor」を設定

  • ラベルは任意のラベル

モードには「block-editor」を設定してください。
ユニットメニュー画面

上記が設定できると、エントリー編集画面の「ユニットを追加」ボタンから、ブロックエディタを追加できます。

ユニット追加ボタンを押すと、ユニットの選択肢が表示されるので、設定で追加したブロックエディターを追加します。
エントリー編集画面のユニット追加ボタン

ブロックエディターの設定・カスタマイズ

ブロックエディターの基本的な使い方や設定方法、カスタマイズ手順については、
「組み込みJSのブロックエディター」セクションで詳しく解説しています。

ブロックエディターについて詳しく見る

グループユニットを使って、レイアウト・スタイルをつける


グループユニットは、複数のユニット(テキスト、画像、見出しなど)を div や section で囲んでグループ化することができるユニットです。ラベル(選択時の名前) や クラス(HTML の class 属性) を柔軟に設定できるため、直感的で自由度の高いレイアウト作成が可能です。

グループユニット
グループユニット

使用するための設定

管理画面 > 編集画面 > 編集設定 の「ユニットメニュー」にグループユニットを追加します。

  • モードに「group」を設定

  • ラベルは任意のラベル

ユニットメニュー画面
ユニットメニュー画面

上記が設定できると、エントリー編集画面の「ユニットを追加」ボタンから、グループユニットを追加できます。

ユニット追加メニュー
ユニット追加メニュー

class属性の設定

グループユニットのclass属性は 管理画面 > 編集画面 > 編集設定 の「グループユニット class属性」から設定できます。

グループユニット class属性設定
グループユニット class属性設定
  • ラベル:メニュー表示で表示されるテキスト

  • クラス:追加したブロック要素に付与されるクラス

グループユニット ラベルメニュー
グループユニット ラベルメニュー

HTML要素の設定

グループユニットのHTML要素は 管理画面 > 編集画面 > 編集設定 の「グループユニット HTML要素」から設定できます。

グループユニット HTML要素設定
グループユニット HTML要素設定

以下の要素のみ使用することができます。

  • div

  • section

  • article

  • header

  • footer

  • main

  • aside

  • nav

設定したHTML要素はグループユニットの3点リーダーから(︙)の「タグ」から設定することができます。

グループユニット タグ設定
グループユニット タグ設定

グループユニットでは、タグの設定に加えて「id 属性」を設定できます。これにより、ページ内リンク(アンカーリンク)を利用したセクション設定が可能になります。

グループユニット id設定
グループユニット id設定

グループユニットの適応方法

グループユニットを適用するには、まずユニット追加メニューからグループユニットを追加します。

ユニット追加メニューからグループユニットを追加
ユニット追加メニューからグループユニットを追加

追加したグループユニットに、適応したいラベル(例:横並び)を設定します。

グループユニット 横並びを適応
グループユニット 横並びを適応

最後に、適用したいユニットを新規追加するか、既存のユニットをドラッグ&ドロップでグループユニット内に移動させることで、グループ化が完了します。

グループユニット内にユニットを追加
グループユニット内にユニットを追加

グループユニットを適用した結果、ページ上に2つの画像が横並びで配置された状態で表示されます。

横並びで配置された2つの画像
横並びで配置された2つの画像

多階層のグループユニットの設定

グループユニットは 入れ子構造に対応しており、複数のグループユニットを階層的に組み合わせることができます。これにより、複雑なページ構成や柔軟なレイアウトデザインが可能になります。

新しいグループユニットを追加し、その中に先ほど作成したグループユニットをドラック&ドロップで入れ込みます。または、既存のグループユニットの3点リーダーから(︙)から「グループ化」をクリックすると、一階層上のグループユニットで囲むことができます。

メニューからユニットをグループ化
メニューからユニットをグループ化

追加されたグループユニットに、適応したいラベル(例:背景色:グレイ)を設定します。

グループユニット 背景色:グレイを適応
グループユニット 背景色:グレイを適応

グループユニットを2階層に設定した結果、横並びで配置された2つの画像にグレイの背景色が付いた状態で表示されます。

横並びで配置された2つの画像に背景色を追加
横並びで配置された2つの画像に背景色を追加

グループを解除する方法

グループ化を解除するには、グループユニットの3点リーダー(︙)メニューから「グループ解除」をクリックすると、グループ化が解除されます。

メニューからグループ化を解除
メニューからグループ化を解除

Twigとは


Twigは、PHPで広く利用されているテンプレートエンジンの1つです。
HTMLとPHPのコードを分離し、読みやすく保守しやすいテンプレートを作成できるのが特徴です。SymfonyやDrupalなど多くの有名フレームワークやCMSでも採用されています。

テンプレート内では、変数の出力、条件分岐、ループ処理、フィルターや関数の利用などを簡潔な構文で記述できます。また、変数を自動的にエスケープする仕組みが備わっており、クロスサイトスクリプティング(XSS)などのセキュリティリスクを軽減します。

  • 可読性の高い構文 … PHPコードを直接埋め込む必要がなく、デザイナーやフロントエンドエンジニアも理解しやすい。

  • セキュリティ … 自動エスケープにより、安全なHTML出力が可能。

  • 拡張性 … 独自のフィルターや関数を追加できるため、柔軟なカスタマイズが可能。

  • 高速動作 … コンパイルされたPHPコードとしてキャッシュされるため、パフォーマンスに優れる。

Ver. 3.2 で追加されたTwigテンプレートを利用することで、テンプレートの保守性・再利用性が向上し、チーム開発や長期運用の負担を軽減できます。

テンプレートの継承


Twigでも従来テンプレートと同じようにテンプレートの継承機能が利用できます。Twig標準の仕様に従います。

継承元テンプレート

継承元テンプレートでは、シンプルなHTMLレイアウトを定義します。

<!DOCTYPE html>
<html>
  <head>
    {% block headMeta %}
      {{ include('/include/head/meta.twig') }}
    {% endblock %}
    {% block headLink %}
      {{ include('/include/head/link.twig') }}
    {% endblock %}
    {% block headJs %}
      {{ include('/include/head/js.twig') }}
    {% endblock %}
  </head>
  <body>
    <header>
      <h1>ヘッダー</h1>
    </header>
    <main>
      {% block main %}
        <p>継承してメインコンテンツを設定してください</p>
      {% endblock %}
    </main>
    <footer>
      {% block footer %}
        <p>Site Footer</p>
      {% endblock %}
    </footer>
  </body>
</html>

この例では block タグを使用して、継承(子)テンプレートが継承する5箇所のブロックを定義しています。

このblockタグが行うことは、子テンプレートがテンプレートのその部分を上書きする可能性があることをテンプレート エンジンに伝えることだけです。

継承(子)テンプレート

継承(子)テンプレートは次のようになります。

{% extends 'parent_template.twig' %}

{% block headLink %}
  {{ parent() }}
  <link rel="stylesheet" href="/include/edit/custom.css" />
{% endblock %}

{% block main %}
  <p>
    メインコンテンツを上書き
  </p>
{% endblock %}

extendsタグは、テンプレートエンジンにこのテンプレートが別のテンプレートを「拡張」していることを伝えます。このテンプレートを評価する際、まず親テンプレートを探します。extendsタグはテンプレートの最初のタグである必要があります。

ここでは headLink ブロックと main ブロックを上書きしてます。子テンプレートは、 headMeta headJs footer ブロックを定義していないため、代わりに親テンプレートの値が使用されることに注意してください。

親ブロック

親ブロックの内容をレンダリングするには、  parent 関数を使用します。これにより、親ブロックの結果が返されます。

{% block headLink %}
  {{ parent() }}
  <link rel="stylesheet" href="/include/edit/custom.css" />
{% endblock %}

名前付きブロック

Twig では、読みやすさを向上させるために、終了タグの後にブロック名を置くことができます。

{% block main %}
  <p>
    メインコンテンツ...
  </p>
{% endblock main %}

Twigのブロック名にはいくつかの命名規則があります

  • 英字(アルファベット)と数字、アンダースコア(_)のみが使用可能

  • 英字から始めなければならない

有効なブロック名の例

  • headJs

  • head_js

  • headJs123

無効なブロック名の例

  • head-js

  • 123headJs

タッチモジュールの使用方法


Twigを拡張し、タッチモジュールを呼び出すa-blog cms独自の関数を追加しています。関数で呼び出すことで真偽値が返却されるので、if記法と併用して出し分けます

{% if touch('Touch_Login') %}
  <p>ログイン中です</p>
{% endif %}

touch関数は、module関数と違い既存のすべてのタッチモジュールを呼び出せます


表示・非表示を制御しているのは、単なる「ifタグ」なので、条件式をtouch関数だけではなく組み合わせて利用することもできます。

{% if touch('Touch_Login') and IS_ADMIN %}
  <p>ログイン中 かつ 管理ページの場合</p>
{% endif %}