baserCMS5のテーマはまだ少なく、過去バージョンのテーマをマイグレーションする機能も存在しません。(2023/04/10現在)
ここでは baserCMS4のテーマを baserCMS5用に変換する手順を説明します。
CakePHP4より、テーマもプラグインとして扱われることとなりました。
次のファイルが必要となります。クラスの中身は空でも構いません。
// Sample という名称のテーマの場合
// /plugins/Sample/src/Plugin.php
namespace Sample;
use BaserCore\BcPlugin;
class Plugin extends BcPlugin {}
配列を返却する形式に変換となりましたので例に習って書き換えます。
また、その際、type
キーを追加し、Theme
を設定する事でテーマ管理に認識されます。
// 例
return [
'type' => 'Theme',
'title' => 'BcColumn',
'description' => 'bcColumnは「1カラム」「2カラム左サイド」「2カラム右サイド」のレイアウトが準備されているデザインテーマです。
管理画面からレイアウトを選択することで、基本的な3パターンのレイアウトを簡単に切り替えることができるのが、名前のコンセプトです。
基本的なテーマカラーはテーマ設定から変更できることはもちろん、どんな色にもマッチするサブカラーで『シンプルでカッコいい』デザインを目指しています。
レスポンシブデザインなので、システム設定の「スマホ対応しない」を選択してください。',
'author' => '小桃クリップ',
'url' => 'https://komomo.biz/'
];
webroot
フォルダを作成し、img / js / css / files をそこに移動します。
templates
フォルダを作成し、テンプレートは全てそこに移動します。
Layouts
を layout
にリネームします。
Elements
を element
にリネームします。
Config
を config
にリネームします。
Blog
、Mail
など、プラグインのコンテンツテンプレートを templates/plugin/{PluginName}/
へ移動します。
# Blog の場合
templates/plugin/BcBlog/Blog/
# Mail の場合
templates/plugin/BcMail/Mail/
baserCMS5でフィードは削除となりました。
テンプレートの Feed
フォルダがあれば削除します。
また、config/data/Feed/
が存在する場合、そちらも削除します。
モデルより取得したデータは配列よりエンティティオブジェクトに変更となりました。
// 例)$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 読込処理を変更します。
plugins/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設計書を参考にし、カラムの変更を行います。
https://baserproject.github.io/5/ucmitz/specification/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 に変更します。