ここでは BcAddonMigrator を利用して、baserCMS4のテーマを baserCMS5用に変換する手順を説明します。
BcAddonMigratorプラグインは、baserCMS4から、baserCMS5への移行をサポートするプラグインです。
baserCMS5では、かなりの大きな仕様変更が入っており、完全に自動変換することはできませんが、BcAddonMigratorプラグインを利用することで、手作業で変更する部分を最小限にすることができます。
OSの機能やツールを使って既存のテーマをZIP化します。
既存のサイトをそのままbaserCMS5系にアップグレードすることはできません。新しい環境にbaserCMS5をインストールしておく必要があります。
GitHub 、または、baserマーケット 、もしくは、composer より、BcAddonMigratorプラグインを取得し、新しい環境の /plugins/
フォルダに配置します。
その後、プラグイン管理よりインストールを実行します。
プラグイン一覧より、BcAddonMigratorプラグインの右側にある歯車マークををクリックします。
既存の環境のZip化したテーマをアップロードすると変換が始まります。baserCMS5用への変換が完了するとダウンロードボタンが表示されますのでダウンロードします。
問題が発生した場合は、ユーザーズフォーラム に報告するか、GitHubのIssue を作成してください。
新しい環境の、/plugins/
に、ダウンロードしたテーマを解凍して、配置します。
その後、管理システムの「テーマ管理」よりテーマを適用します。
フロントページにアクセスに問題が発生していないか確認します。
問題がなければ、これで、baserCMS4のテーマをbaserCMS5用の環境に移行することができました。お疲れ様でした。
問題が発生していたら、テーマを問題の内容に合わせて修正します。
以下に、手動による調整についてポイントを記載しています。
モデルより取得したデータは配列よりエンティティオブジェクトに変更となりました。
// 例)$post の name を参照する場合
// 配列の第一階層のキーとなるモデル名は削除となる
// baserCMS4
$post['BlogPost']['name'];
// baserCMS5
$post->name;
手作業で変更してもいいですが、テンプレート内にて正規表現を利用して置換するには次の文字列を利用してください。
# 正規表現
\$([a-zA-Z0-9]+?)\['([a-zA-Z0-9]+?)'\]\['([a-zA-Z0-9_]+?)'\]
# 置き換え後の文字列(後方参照)
\$$1->$3
配列形式で指定しているURLには次の変更が必要です。
// 例
$this->BcBaser->link([
'controller' => 'search_indexes',
'action' => 'search'
]);
// 置き換え後
$this->BcBaser->link([
'plugin' => 'BcSearchIndex'
'controller' => 'SearchIndexes',
'action' => 'search'
]);
$this->BcForm->create()
の第一引数をエンティティ、もしくは、null
に設定します。
フォームの初期値を設定したい場合にエンティティを指定しますが、そうでない場合は null
とします。
// 例)以前まモデル名を指定していた
$this->BcForm->create('SearchIndex');
// 置き換え後
$this->BcForm->create($searchIndex);
$this->BcForm->create(null);
// 次でも可
$this->BcBaser->createForm($searchIndex);
第一引数のモデル名を削除します。また、メソッド名が input
より control
に変更となっています。
// 置き換え前
$this->BcForm->input('SearchIndex.q');
// 置き換え後
$this->BcForm->control('q');
// 置き換え前
echo $this->BcForm->hidden('SearchIndex.s', ['value' => $siteId]);
// 置き換え後
echo $this->BcForm->control('s', ['type' => 'hidden', 'value' => $this->getRequest()->getAttribute('currentSite')->id]);
// 例)
$this->BcPage->content();
// 置き換え後
echo $page->contents
blog_comments.php エレメントについて、BcFront テーマを参考に Javascript 読込処理を変更します。
vendor/baserproject/bc-front/templates/plugin/BcBlog/element/blog_comments.php
// メンテンナンス中かどうか
Configure::read('BcRequest.isMaintenance')
// 置き換え後
$this->getRequest()->is('maintenance')
// 一覧の表示件数
$this->passedArgs['limit']
// 置き換え後
$this->getRequest()->getQuery('limit')
テーマで初期データを利用している場合は変更が必要です。
フォルダ直下のCSVファイルについて、BaserCoreフォルダを作成し、その中に移動します。
baserCMS5より、プラグイン名に Bc
というプレフィックスが追加されました。
それに伴いフォルダをリネームします。
Blog
→ BcBlog
Mail
→ BcMail
baserCMSのコア BaserCore をシンプルにするという方針から、各種機能がコアプラグイン化されました。
それに伴いCSVファイルを移動します。
theme_configs.csv
を BcThemeConfig
フォルダへ移動widget_areas.csv
を BcWidgetArea
フォルダへsearch_indices.csv
を BcSearchIndex/search_indexes
へeditor_templates.csv
を BcEditorTemplate
フォルダへcontent_links.csv
を BcContentLink
フォルダへDB設計書 を参考にし、カラムの変更を行います。
plugin
カラムの値について、プレフィックスを追加します。site_id
を 0 から 1 に変更します。
固定ページではPHPの関数が利用できなくなりました。
contents
カラムで関数を利用していた場合は削除してください。
name
: editor
のレコードついて、value
の値を BcCkeditor
から BaserCore.BcCkeditor
に変更します。
widgets
カラムのデータについてシリアライズされていますが、内部的に、プラグイン名が利用されており、前述同様、Bc
プレフィックスを追加する必要があります。
PHPのプログラムでアンシリアライズ化し、内容を変更した上で、シリアライズ化する必要がありますが、面倒な場合は、空文字にして諦めるというのも手です。
$value = @unserialize(base64_decode($value));
// 内容を変更後
$value = base64_encode(serialize($value));
site_id
カラムを 0 から 1 に変更します。
自分で解決できない場合は、ユーザーズフォーラム に相談するか、GitHubのIssue を作成してください。
例えば、コードの置換処理で追加したいものがある場合は、GitHubでプルリクエストを送信してください。Issueの作成でも構いません。
一緒にコードを育てる事で他の人も喜びます。
こちらも合わせてご覧ください。