Contao Open Source CMSのAPIの変更

バージョン 3.1から3.2

Controller::addImageToTemplate()

Contao 3.2.2より前は、addImageToTemplate()メソッドは画像のURLやリンク先の"href"属性が既に設定されている場合でも上書きしていました。これは"href"属性にイベントの詳細のURLを入れている、イベントのテンプレートで問題となりました。

このため、"href"属性が設定されている場合はその代わりに、addImageToTemplate()メソッドでは画像のURLやリンク先を"imageHref"属性に入れるようにしました。しかし、イベントの画像を描画するevent_*のカスタマイズしたテンプレートに調整が必要となります。これはコアのテンプレートには影響しないことに注意してください。

バージョン3.2.2より前での使い方:

<h2><a href="<?php echo $this->href; ?>Event title</a></h2>
<p><a href="<?php echo $this->href; ?>"><img src="..."></a></p>

バージョン3.2.2以降の新しい使い方:

<h2><a href="<?php echo $this->href; ?>Event title</a></h2>
<p><a href="<?php echo $this->imageHref; ?>"><img src="..."></a></p>

FilesModel::findByPk()

Contao 3.2より前のバージョンでは、$this->singleSRC$this->multiSRCのような項目は、テーブルtl_filesの行を参照する整数の配列でした。しかし、ContaoはファイルのUUIDを使用するようになり、この項目の値はUUIDやUUIDの配列に自動的に変更されます。

その結果、これらのUUIDの項目の1つを引数にしてfindByPk()findMultipleByIds()の呼び出しは(IDを使用するとまだ動作しますが)失敗するので、あなたの独自のコードを以下のように調整が必要ないか確認してください:

Contao 3.0と3.1での使い方:

$objFile = FilesModel::findByPk($this->singleSRC);
$objFiles = FilesModel::findMultipleByIds($this->multiSRC);

Contao 3.2以降の新しい使い方:

$objFile = FilesModel::findByUuid($this->singleSRC);
$objFiles = FilesModel::findMultipleByUuids($this->multiSRC);

buttons_callback

Contao 3.0で導入した"buttons_callback"によって、複数のレコードを選択したときに独自のボタンを追加できました。この機能をContao 3.2では強化して、選択するボタンだけではなく、任意のボタンのセットの変更や既存のボタンの削除もできます。

このために既存の"buttons_callback"を使用するように決めました、なぜなら本質的に同じことのために別のフックを追加するのは合理的ではありません。しかし、この決定は後方互換性を崩すことを意味します、それはフックのAPIを次のように変更しなければならないからです。

Contao 3.0と3.1での使い方:

$GLOBALS['TL_DCA']['tl_page']['edit'] => array
(
    'buttons_callback' => array
    (
        array('tl_page', 'addAliasButton')
    )
);

/**
 * Buttonのコールバック
 * @return string
 */
public function addAliasButton()
{
    return '<input...';
}

Contao 3.2以降の新しい使い方:

// ボタンを「複数を変更」の表示に追加
$GLOBALS['TL_DCA']['tl_page']['select'] => array
(
    'buttons_callback' => array
    (
        array('tl_page', 'addAliasButton')
    )
);

// 「項目を編集」の画面にボタンを追加
$GLOBALS['TL_DCA']['tl_page']['edit'] => array
(
    'buttons_callback' => array
    (
        array('tl_page', 'addAliasButton')
    )
);

/**
 * Buttonのコールバック
 * @param array
 * @return array
 */
public function addAliasButton($arrButtons)
{
    // 保存のボタンをアンセット
    unset($arrButtons['edit']);

    // 独自の"alias"ボタンを追加
    $arrButtons['alias'] = '<input … >';

    // ボタンの配列を返す
    return $arrButtons;
}

"buttons_callback"を使用している場合は、あなたの機能拡張でも対応する調整をしてください。

Model::save()

Contao 3.0と3.1の両方では、Model::save()メソッドにtrueを渡して、同じデータベースのレコードの2つのモデルを作成できました。しかし、これは、あるエッジケースでデータの紛失を招く可能性があったので、モデルレジストリを実装してデータベースのレコードに1つのモデルだけが存在することを保証しました。

ところが、レジストリはモデルを複製するためにcloneコマンドの使用を必要となり、そのため引数の$blnForceInsertを削除しなければなりませんでした。これをあなたの独自の機能拡張で使用していた場合は、対応するコードの調整が必要ないか確認してください。

Contao 3.0と3.1での使い方:

$objPage = PageModel::findByPk(1);
$objPage->title = 'New page title';
$objPage->save(true);

Contao 3.2以降の新しい使い方:

$objPage = PageModel::findByPk(1);
$objCopy = clone $objPage;
$objCopy->title = 'New page title';
$objCopy->save();

Contao 3.2.21に付属のUPGRADE.mdの翻訳です。