CakePHPライクの設定ファイルを作成することで管理画面へ簡単にカスタムフィールドを追加することができます。 グループごとに項目やページ分けすることが可能なので、見やすいフィールドを作成することが出来ます。
CakePHPのformヘルパーやバリデーション形式の記述をするだけなので、1度作成手順を覚えてしまえば画面設計書を作るよりも短い時間で、動く管理画面を作成することも可能になります。 また、viewファイルなどを見てもらうとわかりますが、baserCMSのコア知識が無くても直感的にカスタマイズしやすいように作ってありますので、プラグインの開発キットのような使い方も可能です。 プラグインに無いフォームパーツなども独自追加可能ですので色々お試しください。
- 使用したいthemeフォルダにPluginディレクトリを作成し、その中にAddConfigプラグインを追加する。※zipを解凍した場合はAddConfig-masterをAddConfigにリネームしてください。
- テーマ管理からプラグインの入ったテーマを選択する。
- プラグイン管理からAddConfigプラグインを選択してインストールする。
- BcFormヘルパーのinputのtypeで設定できる入力パーツ
- baserCMSアップローダーへのファイルアップロード
- baserCMSのヴィジュアルエディタ(ckeditor)
- テーブルの見出し追加やヘルプ、フォーム前後へのテキスト表示など
AddConfig/Config/settings.phpに、 $config['AddConfig']から始まる設定を記述していきます。
実際記述する際はsettings.php内の以下の部分のコメントアウト(// )してから進めていきます。
// include "sample-form.php"; //$config['AddConfigDebug'] = true;がセットされているので登録はしません。
このincludeされているファイルはプラグインのインストール直後に表示されているフォーム項目です。 記述の際は sample-form.phpの設定内容を参考にしてください。
$config['AddConfig']['form'][] = [
'title' => 'ogp設定',
'fields' => [
'ogp_image' => [
'required' => true,
'label' => '画像',
'parts' => [
'type' => 'upload', //画像をアップロードする
],
'validate' => [
[
'rule' => ['notBlank'],
'message' => '画像を登録してください'
],
],
'help' => 'ファイル形式 gif,jpg,png<br>推奨サイズは幅1200×高さ630です'
],
'ogp_url' => [
'required' => true,
'label' => 'URL',
'parts' => [
'type' => 'text',
'size'=>'70',
],
'validate' => [
[
'rule' => 'notBlank',
'message' => 'URLを入力してください'
],
[
'rule' => 'url',
'message' => 'URLの形式で入力してください'
],
],
'help' => 'OGPで表示される飛ばしたいURLを入力します'
]
]
];
記述した設定は 以下のページに反映されます。
/admin/add_config/add_configs/form/
※登録するデータはkey=>valueの形でする必要があります。
配列で登録しようとすると、エラーでロールバックされます。
複数選択のチェックボックスを使いたい場合は、formpartsにあるselect-textをお使いください。
登録されたデータはグローバル変数の$siteConfigと同じようにサイトの各場所から参照できるようになります。
controller → $this->addConfigs
view → $addConfig
viewにセットされた$addConfigをそのまま出力してもよいのですが、 $addConfigの内容を使いやすくするためのヘルパー【 $this->AddConfig->メソッド名() 】もあります。
- field($key [ , $escape = true ]) キー名のデータを出力
- brfield($key [ , $escape = true ]) キー名のデータにある改行を<br>にして出力する
どちらもデフォルトはタグをエスケープします。値が文字列でない場合は無視されます。
f(),brf() の省略形もあります
- img($key [ , $options ]) uploadで登録した画像を表示します。
オプションの指定はBcBaser->imgの指定と同じ + 'noimage'=>画像パスで登録なし時の画像を表示できます。
'noimage'=>true にするとbaserCMS標準のnoimageが表示されます。
-
md($key) マークダウンのテキストをHTMLに変換します。出力するにはechoが必要です。
-
get($key) キー名のデータを取得
-
set($key , $value ) キー名に任意の値をセット
-
getData() setData()に登録している内部データを取得
-
setData([$array=$addConfig]) 出力のベースになる配列をセット。初期値は$addConfig。
setData()は他の配列データをセットするとaddConfigヘルパーのメソッドが使用できます。
wordpressのquery_posts()でデータを切り替えてthe_title()などを出力する感じです。
ループ内でaddConfigヘルパーを使用したい場合に使ってください。
$addConfigのデータで初期化したいときは、引数無しのsetData()を呼びます。
- is($key) キー名の値がそんざいするかどうか
- in($key , $needle ) select-text(複数選択で登録)したものに$needleがマッチするかどうか
- explodeArray($key) select-textで登録した値を配列にして返す。
select-textで登録した値は、シングルクォートやカンマが値に含まれていると文字列に置換されています。
普通の値でもexplodeだけだとシングルクォートが残ってしまうのでexplodeArray()を使ってください。
- getKeysFilter($keys) [key1,key2,key3,...] 指定したキーの配列のみを返す。
- getPrefixFilter($prefix[,$drop_prefix = false]) $prefixにマッチするキー名の配列を返す。
$drop_prefix = trueにするとsmtp_host,smtp_portなどが、取得した配列の中ではhost,portになります。
- splitGroupArray($array,$delimiter='_') getPrefixFilterなどで取得した配列のキー名を$delimiterで分割して新たな配列グループを作成します。
$array['feature_01_title'] = "特徴1";
$array['feature_02_img'] = "files/uploads/feature02.png";
$groupArray = $this->AddConfig->splitGroupArray($array);
echo $groupArray['feature']['01']['title'];
echo $groupArray['feature']['02']['img'];
のようにアクセスできます
上記ヘルパーを組み合わせると、以下のようなキー名で登録されたデータをforeachで出力出来るようになります。
$addConfig['feature_01_title'] = "特徴1";
$addConfig['feature_01_text'] = "説明1テキスト";
$addConfig['feature_01_img'] = "files/uploads/feature01.png";
$addConfig['feature_02_title'] = "特徴2";
$addConfig['feature_02_text'] = "説明2テキスト";
$addConfig['feature_02_img'] = "files/uploads/feature02.png";
$addConfig['feature_03_title'] = "特徴3";
$addConfig['feature_03_text'] = "説明3テキスト";
$addConfig['feature_03_img'] = "files/uploads/feature03.png";
$filterArray = $this->AddConfig->getPrefixFilter('feature_',true); //prefix部分を削除
$feature = $this->AddConfig->splitGroupArray($filterArray);
if(!empty($feature)){
foreach($feature as $key => $value){
$this->AddConfig->setData($value); //ループでヘルパーを使用するために単グループをセット
$this->AddConfig->field("title");
$this->AddConfig->brfield("text");
$this->AddConfig->img("img");
}
$this->AddConfig->setData(); //ヘルパー内部のデータを$addConfigに戻す
}
$this->AddConfig->field("feature_01_title"); //$addConfigのキーでアクセスできる
HTMLやCakePHPの知識があれば画面を色々カスタマイズ出来るようになっています。 修正するファイルもsetting.phpとelement以下なのでbaserCMSの知識はそこまで必要ありません。
A ['parts']['type']="element"にするとAddConfig/View/Element/formpartsからfileを読み込む仕組みにしています。
formparts以下のフォームパーツを参考にして作成してください。
A ブログカテゴリーやユーザーなどをfind('list')であらかじめ取得することで、権限グループみたいなものを作ったりすることもできます。
$BlogCategory = ClassRegistry::init('Blog.BlogCategory');
$store = $BlogCategory->find("list",['conditions' => ['BlogCategory.blog_content_id' => 2], 'fields' => ['BlogCategory.name','BlogCategory.title']]);
$config['AddConfig'][] = [
'fields' => [
'stores' => [
'required' => true,
'label' => '○○を表示する店舗',
'parts' => [
'type' => 'element',
'file' => 'select-text',
'options'=> $store, //$BlogCategoryで取得したカテゴリ項目をプルダウンで表示
],
'inputAfter' => '選択肢に表示されない場合はブログカテゴリーに追加してください。',
],
]
]
A CakePHPのルールと同様にAddConfig/Model/AddConfig.phpにfunctionを作成して、ruleに追加すると独自のチェックが行えます。 バリデーションのルールなどはこちらを参考にしてください
設定ファイルで色々出来る仕様上リロードした際にPOSTが残っていたり、フォームパーツを切り替えたときに意図しない登録が発生してしまう可能性があります。 その為デバッグ状態時に設定されたhiddenタグで登録をはじかれた可能性が高いです。 上手くいかない場合は改めてURLを叩きなおしたり、再度登録をお試しください。
$config['AddConfig']['form'][] の設定を以下のようにキー名を追加することで別ページを作ることができます。
$config['AddConfig']['キー名']['name'] = 'ページH1タイトル名'; //セットしない場合は共通の$config['AddConfig']['name']になります。
$config['AddConfig']['キー名']['form'][]
このようにすると /admin/add_config/add_configs/form/キー名 でアクセスできます。