【翻訳】アドオン開発者向け:Concrete CMS 9.0 に対応させる方法

菱川拓郎
菱川拓郎

Concrete CMS バージョン9がリリースされましたが、Web制作者やアドオン作者にとって、これまでのアドオンやテーマがそのまま動くのかどうかは、大きな関心事だと思います。幸い、バージョン6から7へのような大きな変化はなく、ほとんどのアドオンはそのまま動くことと思います。しかし、いくつか重要な変更がありますので、公式ドキュメントに解説記事「Add-On Developers: Get Your Add-Ons Ready for Concrete CMS 9.0」がアップされています。今回はこちらの記事の日本語訳を掲載しますので、アドオンやテーマの開発者の方は参考にしてください


jQuery をデバッグしましょう

テーマやブロック、シングルページの動作で不可解な JavaScript のエラーが発生しましたか?それはおそらく、 jQuery が犯人です。8.5.5 に同梱されていた jQuery はとても古いバージョンでした。バージョン9では jQuery が最新安定版(本ドキュメントの執筆時点では3.6.0)にアップグレードされました。説明のつかない JavaScript エラーに遭遇したら、まずは jQuery を疑ってみてください。

$app->make() と Core::make の挙動が変わりました

これはよく出てきます。もし Core::make() や $app->make() や $this->app->make() を使ってクラスをビルドし、そのクラスに引数を渡していた場合、おそらくコードの変更が必要になります。

実行中に引数を渡さずにクラスを作成していますか?その場合は変更不要です

クラスのコンストラクタで引数があっても、特にカスタム引数を渡さずにシンプルなクラスをビルドしていますか?こんな風に?

$object = $this->app->make(MyClass::class);

何も変えなくて大丈夫です。

実行時にクラスに引数を渡していますか?コードを確認してください

クラスのコンストラクタに実行時に引数を渡している場合、おそらくコードを修正する必要があります。例えばこのようなクラスです。

<?php

class MyClass
{

    public function __construct($someVariable, $someOtherVariable)
    {
        // ... your code here.
    }

}

もし $app->make() を使ってクラスをビルドしていて、引数として $someVariableを渡している場合、おそらく以前はこのようなコードを使っていたはずです。

$var1 = 'foo';
$var2 = 'bar';
$object = $this->app->make(MyClass::class, [$var1, $var2]);

このコードはバージョン9では動きません。Application オブジェクトの基盤となる Laravel Container ライブラリがこの方式をサポートしなくなったからです。代わりに、どの引数にどの値をセットするのかを次のように明示的に指定する必要があります。

$var1 = 'foo';
$var2 = 'bar';
$object = $this->app->make(MyClass::class, ['someVariable' => $var1, 'someOtherVariable' => $var2]);

言い換えれば、こう言うことです。

  1. 作成しようとしているクラスの __constructor メソッドを確認してください
  2. パラメーター名を控えてください
  3. makeをコールする際にそれらのパラメーター名( $ を除いた部分) をキーにした配列を第二引数に渡してください

グッドニュース:これらの変更は 8.5.5以前のバージョンと互換性があります。

テーマレベルのエレメントのパスの変更

バージョン8から、テーマからコアのエレメントをオーバーライドできる機能が追加されました。例えば、コアが View::element(‘conversations/add_post’); のようにエレメントを読み込む際、 concrete/elements/conversations/add_post.php をロードします。しかし、現在アクティブなテーマがこのエレメントを themes/my_theme/elements/concrete/conversations/add_post.php で提供する場合、このファイルが代わりに使われます。この concrete/ ディレクトリを elements ディレクトリから削除することにしました。つまり、テーマからコアのエレメントをオーバーライドしたい場合は、コアと同じパスでテーマの elements/ ディレクトリ内にファイルを設置すれば良くなったと言うことです。

CSS/JavaScriptアセットの登録とロード

Concrete CMS のアセットシステムは独自の CSS や JavaScript のアセットを登録して読み込むことができます。よくあるコードは次のようなものです。

$al = AssetList::getInstance();
$al->register(
    'javascript',
    'SomeHandle',
    'js/some-js-file.js',
    [
        'version' => 1.0.0,
        'position' => Asset::ASSET_POSITION_FOOTER,
        'minify' => true,
        'combine' => true,
    ],
    $pkg
);

バージョン9では 'minify' と 'combine' オプションが削除されました。

これらをコードに残しておいても特に悪影響はありませんが、何も変化は起こりません。そして、次の4つについて考慮をお願いします。

  • コードの後方互換性を維持したい場合は、これらのオプションをそのまま残しておいてください
  • バージョン9でのみ動作させる場合は、これらのオプションは削除してください
  • あなたのプロジェクトにとって重要なことですが、すでにミニファイされた、そして連結されたアセットを提供するようにしてください
  • もしあなたのコードがコアに同梱されていた minifier クラスに依存している場合、代替を探してください。このクラスも同時に削除されました

キュー

ジョブシステムがバージョン9で完全に置き換えられたため、Queuingクラスを含むコアに同梱されていたいくつかのクラスは必要なくなり、削除されました。

これらのクラスはジョブを開発する際以外にも、長時間実行するタスクに使うために使われていました。

もしあなたのコードがこれらのクラスを使用していた場合、代替を探してください。

今後も更新されます

フォーラムに投稿される質問をもとにこのドキュメントは追加されます。フォーラムに投稿された質問はできるだけ早く回答したいと思います!

 

原文:Add-On Developers: Get Your Add-Ons Ready for Concrete CMS 9.0