Contao Open Source CMSのAPIの変更
バージョン3.3から3.4
PHPのバージョン
Contao 3.4では、新しいBlowfishモードを使用して潜在的な高次ビット攻撃に対処しています。このため、PHPの最低のバージョンは5.3.2から5.3.7に上げました。
バージョン3.2から3.3
processFormDataフック
"processFormData"フックの最初の引数に$_SESSION['FORM_DATA']
の代わりに$arrSubmitted
を渡すようになりました。これは実際にはバグ修正で、今までの単に現在のフォームの項目の代わりに、セッションに保持されているすべてを渡します。
しかし、この変更は後方互換性を損なうことを意味します、なぜなら以前の実装では$arrData
を変更してフォームの項目が追加できたからです。
public function myProcessFormData(&$arrData, …) {
$arrData['new_field'] = 'new_value';
}
バージョン3.3では、代わりに$_SESSION['FORM_DATA']
に追加しなければなりません:
public function myProcessFormData($arrData, …) {
$_SESSION['FORM_DATA']['new_field'] = 'new_value';
}
バージョン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>
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.4.5に付属のUPGRADE.mdの翻訳です。