concrete5 のブロックタイプセットを程よく設定する方法 (上級編)

concrete5 トリック集

Block Designer や Block Designer Pro を使って、ブロックを新規で作成し登録をした時に、うっかり、bdDefaultSet の登録を忘れる時があります。

concrete5.7.x 以降は、ブロックの種類によってグループ分けを行うことができます。

※ ここにかかれている手法は MySQL テーブルを直接触って変更するテクニックなので、サイトのデータを壊してしまう可能性があるので、絶対に最新の注意を払ってください。
※ concrete5.7.5.6 時点での情報です。

ブロックタイプセットについて

デフォルトでは

名前

ハンドル

Basic (基本)

basic

Navigation (ナビゲーション)

navigation

Forms (フォーム)

form

Social Networking (ソーシャル・ネットワーキング)

social

Multimedia (マルチメディア)

multimedia

が登録されています。

実は、ブロックタイプセットは自由に増やすことができます。

ブロックを特定のブロックタイプセットに追加する

ブロックのコントローラーに下記の $btDefaultSet を加える事で、ブロックをブロックタイプセットに登録できます。

<?php
namespace Application\Block\XXXXXX;

use Concrete\Core\Block\BlockController;
// いろいろ省略

class Controller extends BlockController
{
    // いろいろ省略
    protected $btDefaultSet = '[ブロックタイプセットハンドル]';
    // いろいろ省略
}

このブロックタイプセットは存在していないハンドルを記入すると、そのブロックタイプセットが新規作成されます。

パッケージからブロックタイプセットを新規作成する

パッケージのインストール時に、ブロックタイプセットを登録すると、ハンドルの他に名前を追加できます。

<?php
namespace Concrete\Package\XXXXX;

use Package;
use BlockType;
use BlockTypeSet;
// いろいろ省略

class Controller extends Package
{
    // いろいろ省略
    public function install()
    {
        // いろいろ省略
        $pkg = parent::install();
        BlockTypeSet::add('[ブロックタイプセットハンドル]', '[ブロックタイプ名]', $pkg);
        // いろいろ省略
    }

    // いろいろ省略

}

を加える事でブロックタイプ名月のブロックタイプをインストールできます。

を入れて、ブロックをインストールすると、自動的にブロックタイプセットに登録されます。

危険だけど:既存のブロックのブロックタイプセットを変更するには

いつか、便利な管理アドオンが出てきそうなんですが、インストール済みのブロックのブロックタイプセットを変更するすべは、現在ありません。

裏ワザで MySQL のテーブルを直接いじって変える方法があります。

すごく危険ですが、わかったうえで実行してください。

  1. BlockTypes テーブルの中身を見て、希望するブロックの btID を書き留める
  2. BlockTypeSets テーブルの中身を見て、希望するブロックタイプセットの btsID を書き留める
  3. BlockTypeSetBlockTypes テーブルに行って、btID が既に存在しているか調べる
  4. [btID が存在していた場合] btsID の部分を書き換える
  5. [btID が存在していない場合] 新たにエントリーを作り、btID と btsID に希望する数字を入れて、displayOrder の数字を適宜調整する。

これで、インストール済みのブロックのブロックタイプセットも変更できます。

以上