concrete5.7 ブロックタイプ（最少）を作ってみる

# はじめに

concrete5 のブロックタイプが動く、最少のファイルを作ってみます。`Hello, World!` が表示されるブロックタイプを作ります。

用語の整理で、今回作るブロックタイプを、ページに配置したものをブロックと言うそうです。用語の使い分けをすると混乱がないと思います。

# ブロックタイプ関連ファイルの置き場所

```
/application/blocks
```

今回は、hello_wolrld というフォルダに作ります。`/conrete/blocks` というフォルダには、既定の `block` が配置されていますので、名前が被らないように作ります。

```
/application/blocks/hello_world
```

今回は、`hello_world` という名前にします。

# アイコン画像をつくります

管理画面に表示されるブロックタイプのサムネイルに表示する画像を保存します。50x50pixel の PNG 形式で、`icon.png` という名前で保存します。

![icon.png](https://qiita-image-store.s3.amazonaws.com/0/1154/2b3fec0c-6838-246d-6dbb-cb2b4d9a9de0.png)
[フリー写真素材ぱくたそ](https://www.pakutaso.com)

※本来は、透過PNGで作成するようです。今回は、手抜きです。

# view を作ります

view には、画面に表示したい情報を記載します。今回は、`Hello, World!` です。

```lang:/application/blocks/hell_world/view.php
<?php
    // おまじない
    defined('C5_EXECUTE') or die("Access Denied.");
?>
Hello, World!
```

# controller を作ります。

controller には、いくつかの初期情報を記載します。

```lang:/application/blocks/hello_world/controller.php
<?php
namespace Application\Block\HelloWorld;
use \Concrete\Core\Block\BlockController;

class Controller extends BlockController {

  // キャッシュに関する設定を行います。
  // キャッシュするには true を、しない場合は false を指定。
  protected $btCacheBlockRecord = true;
  protected $btCacheBlockOutput = true;
  protected $btCacheBlockOutputOnPost = true;
  protected $btCacheBlockOutputForRegisteredUsers = true;

  // ブロックタイプの説明を出力
  public function getBlockTypeDescription() {
    return t("Hello, World! を表示します。");
  }

  // ブロックタイプのタイトルを出力
  public function getBlockTypeName() {
    return t("Hello, World!");
  }

}
```

## キャッシュ関係の設定

`namespace Application\Block\HelloWorld;`
名前空間を指定します。`HelloWorld` の部分を、ブロックタイプに合わせて変更してください。この部分は、作ったフォルダ名の _ で区切った文字列の先頭を大文字にして、_ を省略します。この部分を間違うと、エラーになります。

`use \Concrete\Core\Block\BlockController;`
名前空間のエイリアスを指定します。これは、必ず書きます。

`protected $btCacheBlockRecord = true;`
ブロックに対する設定を保存するかどうかを指定。

`protected $btCacheBlockOutput = true;`
この block の出力をキャッシュするかどうかを指定。

`protected $btCacheBlockOutputOnPost = true;`
フォームの POST が発生しているときにも、ブロックの出力をキャッシュするかどうかを指定。

`protected $btCacheBlockOutputForRegisteredUsers = true;`
ユーザーがログインしているとき、ブロックの出力をキャッシュするかどうかを指定

※キャッシュの説明については、もうちょっと、詳しく書きたいけど、これ以上は分からない。

## Grid の設定（オプション）

`protected $btIgnorePageThemeGridFrameworkContainer = true;`
Bootstrap3 などで利用される Grid の Container 領域内とするか、領域外にしたい場合はこれを指定してください。

参照 : [エリアとブロックのコンテナ](http://concrete5-japan.org/help/5-7/developer/designing-for-concrete5/adding-grid-support-to-your-theme/area-and-block-containers/) こちらに詳しいです。

# 管理画面から有効化します。

[管理画面]-[スタックとブロック]-[ブロックタイプ] の順にメニューを開きます。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/1154/775becaa-7a46-3725-9b83-a7cd11c260dc.png)

ここに、作ったブロックが表示されていますので、インストールをクリックして、使えるようにします。

![02.jpg](https://qiita-image-store.s3.amazonaws.com/0/1154/85764929-48c3-6645-0c60-8e74f1a176e5.jpeg)

インストールすると、ブロックタイプが使えるようになりますので、ドラッグ＆ドロップでエリアに配置すると使えます。

# さいごに

編集機能や設定機能など、他にもいろいろな機能がありますが、とりあえず、表示系のブロックタイプを作れるようになりますでしょうか？

#参考

[concrete5ブロック開発（１）「ページトップへ戻る」ブロックを作る](http://notnil-creative.com/blog/archives/3444)
[エリアとブロックのコンテナ](http://concrete5-japan.org/help/5-7/developer/designing-for-concrete5/adding-grid-support-to-your-theme/area-and-block-containers/)