baserCMSとは、CMS(Contents Management System)です。
世の中には、WordpressとかMovableTypeとかSHIRASAGIなどいろんなCMSがありまして、その中で、PHPのフレームワークであるCakePHPを用いてできてるCMSです。
baserCMS(ベーサーシーエムエス)とは、Webサイト制作プラットフォームとして最適な国産CMSです。
です。
■ baserCMS - 国産オープンソース!フリー(無料)でコンテンツ管理に強いCMS
プラグインとかテーマの配布・販売やってます。
■ baserマーケット
導入事例いっぱいあります。着々と増加中です。
■ baserCMS導入事例 | baser CMS』
それから、記事をブロック単位で作ることができる、ハンバーガみたいに積み上げていく感覚で簡単に記事作成ができるBurgerEditorというプラグインがあります。
■ BurgerEditor(baserCMS3対応)(baserCMS4対応) ダウンロード | baserマーケット
この記事では、baserCMS+BurgerEditorで記事を作るときに、記事の1編集領域でBurgerEditorを利用して作成した内容を、2箇所に分割表示する手法を紹介します。
どちらかと言えば開発者さん向けですが大丈夫。
少しがんばる気力があればたぶん運営者でもできちゃいます。
1記事の編集領域は通常1つです。
なので、BurgerEditorで作成する記事内容も1つということになります。
記事編集領域の内容を2箇所に表示する、ということなので、
手っ取り早く固定ページテンプレートに、編集領域で書いた内容を反映する箇所を2つに増やします。
BcPage->content() を2箇所に書いちゃえば良いですね。
<?php $this->BcPage->content();?>
<section>
<hr>
※この部分はどのページでも表示される共通部分
<br>
固定ページテンプレート(/theme/bc_sample/Pages/templates/default.php)に記載する
<hr>
</section>
<?php $this->BcPage->content(); ?>
結果、公開側はどうなるか?
もちろん編集領域で作成した同じ内容が2つ表示されます。
やりたいことは「この見出しより下のブロック群は別の箇所に表示したい」なので、もちろんこれではNGです。
なので記事の編集内容を分割し、「この見出しより下のブロック群は別の箇所に表示したい」部分は、「※この部分はどのページでも表示される共通部分」より下の段に表示されるようにします。
分割するには規則が必要なので、今回はバーガーブロックの「独自class設定」を用いて、独自classに「bottom-content」が設定されたブロックは、共通部分の下段に表示されるようにしてみます。
必要なのは以下。
・A. 独自classに bottom-content が設定されていないブロックの一覧でできたHTML
・B. 独自classに bottom-content が設定されたブロックの一覧でできたHTML
ということでテーマヘルパを利用して必要なHTMLが取得できるようにします。
テーマヘルパについてはこちら。
■ テーマヘルパー https://basercms.net/functions/theme_helper
テーマヘルパに以下2つのメソッドを追加します。
※今回、テーマヘルパはbaserCMSインストール時に標準テーマとして入る bc_sample テーマに同梱されている ContestSampleHelper を利用している前提とします。
・/theme/bc_sample/Helper/ContestSampleHelper.php
/**
* 指定した独自classを設定したブロック以外のブロックでできたHTMLを取得する
*
* @param string $content 記事編集領域の内容
* @return string
*/
public function getArticleCustomClassBlock($content, $className = '') {
$contentList = [];
$DOM = new DOMDocument;
// 文字化けを防ぐ目的で mb_convert_encoding() を利用する
$content = mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8');
// @はHTML記述に誤りがあった場合にエラー表示しないため
@$DOM->loadHTML($content);
$XPath = new DOMXPath($DOM);
$blockList = $XPath->query('//div[@data-bgb]');
if ($className) {
foreach ($blockList as $node) {
$hasTargetClass = false;
$attributes = $node->attributes;
foreach ($attributes as $attr) {
if ($attr->name === 'class') {
if(strpos($attr->value, $className) !== false){
// class名に bottom-content が含まれている場合
$hasTargetClass = true;
}
}
}
// 特定のclass名のみを持ったブロックを取得する
if ($hasTargetClass) {
$contentList[] = $DOM->saveHTML($node);
} else {
continue;
}
}
} else {
foreach ($blockList as $node) {
$contentList[] = $DOM->saveHTML($node);
}
}
unset($DOM, $blockList);
return implode('', $contentList);
}
/**
* 指定した独自classを設定したブロック以外のブロックでできたHTMLを取得する
*
* @param string $content 記事編集領域の内容
* @return string
*/
public function getArticleExcludeCustomClassBlock($content, $className = '') {
$contentList = [];
$DOM = new DOMDocument;
// 文字化けを防ぐ目的で mb_convert_encoding() を利用する
$content = mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8');
// @はHTML記述に誤りがあった場合にエラー表示しないため
@$DOM->loadHTML($content);
$XPath = new DOMXPath($DOM);
$blockList = $XPath->query('//div[@data-bgb]');
if ($className) {
foreach ($blockList as $node) {
$hasTargetClass = false;
$attributes = $node->attributes;
foreach ($attributes as $attr) {
if ($attr->name === 'class') {
if(strpos($attr->value, $className) !== false){
// class名に bottom-content が含まれている場合
$hasTargetClass = true;
}
}
}
// 特定のclass名のみを持ったブロックを取得する
if ($hasTargetClass) {
continue;
} else {
$contentList[] = $DOM->saveHTML($node);
}
}
} else {
foreach ($blockList as $node) {
$contentList[] = $DOM->saveHTML($node);
}
}
unset($DOM, $blockList);
return implode('', $contentList);
}
次に、ページテンプレート側では内容を以下のように変えます。
<?php
ob_start();
$this->BcPage->content();
$content = ob_get_contents();
ob_end_clean();
echo $this->ContestSample->getArticleExcludeCustomClassBlock($content, 'bottom-content');
?>
<section>
<hr>
※この部分はどのページでも表示される共通部分
<br>
固定ページテンプレート(/theme/bc_sample/Pages/templates/default.php)に記載する
<hr>
</section>
<?php
ob_start();
$this->BcPage->content();
$content = ob_get_contents();
ob_end_clean();
echo $this->ContestSample->getArticleCustomClassBlock($content, 'bottom-content');
BcPage->content() では、内部的にechoするメソッドなので、出力されている内容をバッファして保持することで、表示内容のHTMLを加工するための文字列として取ってます。
あとは記事内容であるブロックを加工したHTMLを表示するだけです。
結果はこんな感じになりました。
画像4つブロックと2カラムブロックは「この見出しより下のブロック群は別の箇所に表示したい」の下段に移動し、上段のブロック群には表示されていません。
上記の仕組みを用いることで、デザイン・HTMLの構造上、記事をどうしても分割表示しなければならないときにも対応できます。
別で入力欄を作るとか、code欄を用いる等の手法はいろいろありますが、バーガエディタのブロックは追加も編集も簡単なので、このブロックは活かしたまま、容易に分割する手法を考えてみました。
画像内で「画像4列リンク・テキスト付」ブロックなのに、5列と書いてしまってるのにあとから気づいたけどもういいやってなってそのままなのです。
]]>なので、調整メンテしてbaserCMS4系対応版2.0.0をリリースです。
テキストリプレイスプラグインは、任意のキーワードを一括で変更できるbaserCMS専用のプラグインです。。。。です。
記事内の文字列探したり、指定文字列で置換できるので、運用・運営を少しお手伝いできます。
ファイルのダウンロードはいつものgithubよりどうぞ。
■ Release TextReplace-2.0.0 · materializing/TextReplace
開発状況とかちょろっと見てみたいときもgithubよりどうぞ。
■ https://github.com/materializing/TextReplace
以下にて気軽にどうぞー ・ω・
バグ報告、機能要望、感想とかなんでも受け付けてマス。
4系になって、固定ページはコンテンツ管理下となり、コンテンツデータと固定ページデータに分離されました。
この辺りをどうしたものかなぁ、と考えてはいたのですが、すっかり「あとで考える」リストに入れたままでした_| ̄|○
ただ、どうやら一部では利用ユーザがいるとの情報が得られまして、それはうれしいのものです。
あと、こんな辺境の地に置いてるプラグインを一瞬で4系化しちゃうとか驚きすぎてハナヂ出ますね<@ryuring
]]> 開発・公開しているbaserCMSプラグインの継続メンテのご支援・応援お願いします_(..)_ ]]>$ brew tap caskroom/fonts
Error: caskroom/fonts was moved. Tap homebrew/cask-fonts instead.
んん?
$ brew tap homebrew/cask-fonts
$ brew cask install font-source-han-code-jp
なんか変わってた。完了。
あとは vscode の Font Family に設定。
「SourceHanCodeJP-Regular, Menlo, Monaco, 'Courier New', monospace」
baserCMSとは、CMSです。
世の中には、WordpressとかMovableTypeとかSHIRASAGIとかWordpress(2回目)とか、いろんなCMSがありまして、その中で、PHPのフレームワークであるCakePHPを用いてできてるCMSです。
baserCMS(ベーサーシーエムエス)とは、Webサイト制作プラットフォームとして最適な国産CMSです。
です。
■ baserCMS - 国産オープンソース!フリー(無料)でコンテンツ管理に強いCMS
プラグインとかテーマの配布・販売やってます。
■ baserマーケット
導入事例いっぱいあります。着々と増加中です。
■ baserCMS導入事例 | baser CMS』
この記事では、baserCMSを利用する中で良く使う、イベント処理+メールフォームの受信一覧について紹介します。
どちらかと言えば開発者さん向けの記事です。
baserCMSでは、メールフォームを超簡単に複数作成できる機能があって、その受信データ一覧画面も、各フォーム毎に表示することができます。
その受信データの表示を、ある特定の条件にそった内容だけ表示するようにしてみます。
CSVダウンロード機能で落ちてくるCSVの内容も、特定の条件に絞った内容にできます。
せっかくなのでプラグイン形式で作ってみて、簡単に動作をON/OFFできるようにしてみます。
できるようになることはこんな感じです。
以下の内容でファイルを作ります。
<?php
/**
* [ModelEventListener] CustomMailMessage
*/
class CustomMailMessageModelEventListener extends BcModelEventListener {
/**
* 登録イベント
*
* @var array
*/
public $events = [
'MailMessage.beforeFind',
'Mail.MailMessage.beforeFind',
];
/**
* mailMessageBeforeFind
* - 管理側受信一覧画面の受信一覧を指定条件で絞り込んで表示する
*
* @param CakeEvent $event
*/
public function mailMessageBeforeFind (CakeEvent $event) {
if (!BcUtil::isAdminSystem()) {
return;
}
$user = BcUtil::loginUser();
if (in_array($user['id'], ['2'])) {
$Model = $event->subject();
// 存在しないフィールドを検索条件に指定することで起こるエラーを防止するため
if ($Model->hasField('name_1')) {
if (empty($event->data[0]['conditions'])) {
$conditions = [];
} else {
$conditions = $event->data[0]['conditions'];
}
$event->data[0]['conditions'] = Hash::merge($conditions, [$Model->alias . '.name_1' => 'ほげ']);
}
}
}
/**
* mailMailMessageBeforeFind
* - 管理側受信一覧CSVを指定条件で絞り込んでダウンロードする
*
* @param CakeEvent $event
*/
public function mailMailMessageBeforeFind (CakeEvent $event) {
if (!BcUtil::isAdminSystem()) {
return;
}
$user = BcUtil::loginUser();
if (in_array($user['id'], ['2'])) {
$Model = $event->subject();
// 存在しないフィールドを検索条件に指定することで起こるエラーを防止するため
if ($Model->hasField('name_1')) {
if (empty($event->data[0]['conditions'])) {
$conditions = [];
} else {
$conditions = $event->data[0]['conditions'];
}
$event->data[0]['conditions'] = Hash::merge($conditions, [$Model->alias . '.name_1' => 'ほげ']);
}
}
}
}
。。。。。終わり。
なんとたったの1ファイルで終わっちゃいました。
あとは管理側のプラグイン一覧画面から CustomMailMessage プラグインを有効化するだけです。
何をしてるのかを少し説明。
受信一覧表示とCSVダウンロード側でのやってる内容はほぼ同じですが、2つに分けているのには理由があります。
MailMessageモデルのbeforeFindに対して差し込んでいるイベント処理ですが、CSVダウンロードのときは、イベント名が「MailMessage.beforeFind」では引っかかりません。
これはなんでかなぁ?と探っていたのですが、CSVダウンロードの処理時は、モデルのエイリアス名が受信テーブル名となっていたので、モデルイベントに引っかからないようです。
(例: テーブル名が mysite_mail_message_1 のときは、モデルエイリアス名は mailMessage1 となる)
管理側の受信一覧表示のときは、反対にイベント名が「Mail.MailMessage.beforeFind」で引っ掛けることができませんでした。
なので、
管理側受信一覧表示のとき: MailMessage.beforeFind で、
管理側受信一覧CSVダウンロードのとき: Mail.MailMessage.beforeFind
と分ける形になってます。
他ポイントとしては以下です。
・BcUtil::isAdminSystem() で管理側のアクセスであることを判定
・BcUtil::loginUser() でログイン中のユーザ情報を取得
・$Model->hasField('name_1') でテーブル内のフィールドの存在チェック
・$event->data[0]['conditions'] でデータの検索条件を指定
baserCMSでは、このように簡単にプラグインを作ることができます。
サンプルのプラグインの内容はあくまで例ですので、他にもログインしているユーザグループでの判定や、複数フィールドに対する検索条件の指定等を、目的に応じていろいろできると思います。
ではでは、baserCMSで楽しい開発ライフを送りましょう。
えー。。。(;´Д`)
$ ls -l /usr/local/bin/ | grep git git -> ../Cellar/git/2.23.0_1/bin/git $ sudo mv /opt/local/bin/git /opt/local/bin/git.bk $ sudo ln -s /usr/local/bin/git /opt/local/bin/git
変えてみた。
$ which git /opt/local/bin/git $ git --version git version 2.23.0
できた!オワタ!
どうやら「【ちょっとした入力項目】を作るためのカスタムフィールド」という内容で、インストールすることで独自の設定を保存できるようになるようです。
これはなんとも便利そうです。
■ https://github.com/BigFly3/AddConfig
■ 作者さんの記事: CakePHPユーザーがbaserCMSを開発しやすくするためのカスタムフィールドを作ってみた。 - Qiita
baserCMSのプラグインは、app/Plugin/配下に、プラグインのパッケージをフォルダごと配置すると良いので、そんな感じで配置してインストール実行です。
※元記事には「テーマ配下推奨」とあります。その理由も明記してあります。
https://qiita.com/BigFly/items/eccbe4e1ce14b46a9c75#注意点など
ひとまず確認なので今回はapp配下で。
インストールすると、良く使う項目に「カスタムコンフィグ 管理」が追加されます。
すぐに設定画面にアクセスできます。
入ってみると、サンプルで設定してある入力項目一覧が表示されます。
サンプルの充実って大事ですよね。。これは見てみると、どんな項目ができるの?というのがぱっと見てつかみやすくて素敵です。
データの方はどうなってるのかな?と覗いてみると、DB内にテーブル「mysite_add_configs」が追加されてました。
とりあえず適当に入力して保存してみると、
「入力チェックはOKです。AddConfigの設定で更新されないようになっています。」と表示されて保存されません。
なるほど。。設定で確認だけできるようになってるですね。
baserCMSの設定ファイルは、たいてい Config/setting.php で定義されているのでその辺りを覗いてみます。
$config['AddConfig']['debug'] = false; //trueにしておくとフォーム項目のテスト中にデータ更新が出来ないようにすることができます。バリデーションチェックは可能です。
ん!?falseになってるけどなんだろう。。なんか間違えたかな( ▽|||)
と、あちこち見て回っていると、サンプルで入ってるフォームのビューファイルに記載がありました。
app/Plugin/AddConfig/Config/sample-form.php
$config['AddConfig']['debug'] = true; //無駄なデータが誤って登録されないようにデバッグモードにしています。
あくまでサンプル用なので、安全設計がなされている状態でした。
この行をコメントアウトして再度保存に挑戦。
。。。今度はうまく行って一安心です。
初期インストール時に利用されるビュー用のファイルはあくまでサンプルなので、
(AddConfig/Config/sample-form.php)
実際に利用するときには、
AddConfig/Config/sample-form.php → ファイル複製とかして AddConfig/Config/addconfig-form.php のようにして置いて利用する、というのが良さそうです。
あとは設定ファイルの中で、以下の行箇所でファイル名の指定を行うこと。
(AddConfig/Config/setting.php)
include "sample-form.php"; //使用時にコメントアウトするか削除してください。
各設定項目について説明が載せてあるのでとてもわかりやすく作成してあるなぁ、と思いました。
公開側ではこんな感じでデータを取ってきて利用できました。
■ テキスト: <?php echo $this->AddConfig->f('text01'); ?>
■ テキストエリア: <?php echo $this->AddConfig->f('textarea01'); ?>
■ セレクト:
<?php
$selectList = Hash::extract(Configure::read('AddConfig'), 'form.{n}.fields.select01.parts.options');
echo $this->BcText->arrayValue($this->AddConfig->get('select01'), $selectList[0]);
?>
■ ラジオ:
<?php
$radioSelectList = Hash::extract(Configure::read('AddConfig'), 'form.{n}.fields.radio01.parts.options');
echo $this->BcText->arrayValue($this->AddConfig->get('radio01'), $radioSelectList[0]);
?>
■ チェックボックス: <?php echo $this->AddConfig->f('checkbox01'); ?>
■ CkEditor: <?php echo $this->AddConfig->get('editor01'); ?>
■ 年月日: <?php echo $this->AddConfig->f('datepicker01'); ?>
■ 年月日日時: <?php echo $this->AddConfig->f('dateTimePicker01'); ?>
■ アップロードファイル(アップローダ): <?php echo $this->AddConfig->img('upload01'); ?>
■ マルチチェックボックス:
<?php foreach ($this->AddConfig->explodeArray('multicheck01') as $multiCheckboxValue): ?>
<?php echo h($multiCheckboxValue); ?>
<?php endforeach; ?>
■ 都道府県選択: <?php echo $this->AddConfig->f('pref01'); ?>
個々に設定した値が簡単に取れますね。
設定ファイルの記述で、入力項目の追加や削除を簡単に管理できて、設定した項目の値はグローバル扱いでどこでも基本的に利用できます。
アップローダで上げたファイルを自由に設定できるのもすごいですね。
この仕組みって、baserCMSコアが持っているテーマコンフィグに入れちゃっても良いんじゃないでしょうかね。
アップローダが、Wordpressでいうところのメディア管理みたいに利用できそうです。
なんとも便利ですごいプラグインが出てますので、baserCMSでサイト構築される際には導入すると良いと思います。
すばらしいプラグインだと思います。
きっかけは「検索した文字がハイライトされないケースがある」ってフィードバックいただけたんで、これは対応策を考えたく。
テキストリプレースは、記事内の文字列探したり、指定文字列で置換できるので、運用・運営を少しお手伝いできるプラグインです。
テキストリプレイスプラグインは、任意のキーワードを一括で変更できるbaserCMS専用のプラグインです。。。。です。
ファイルのダウンロードはいつものgithubよりどうぞ。
■ Release TextReplace-1.2.2 · materializing/TextReplace
開発状況とかちょろっと見てみたいときもgithubよりどうぞ。
■ https://github.com/materializing/TextReplace
以下にて気軽にどうぞー ・ω・
バグ報告、機能要望、感想とかなんでも受け付けてマス。
大きく解消したのはこんな点でした。
■ 検索時、ダブルクオートがある場合とでない場合で、コードのマッチ文字がハイライトされない · Issue #1 · materializing/TextReplace
「この辺があやしい」と原因まで見ていただいて本当にありがとうございました_(..)_
この記事では「Qiitaに書き続けたbaserCMSのTipsを振り返る」ことにしてみました。
baserCMSとは、CMSです。
■ baserCMS・・・公式サイト
■ baserマーケット・・・プラグインとかテーマの配布・販売
■ [baserCMS]少し古いバージョンで、管理側プラグイン一覧が表示されない場合 - Qiita
通常動作には影響ないけど、少し古いbaserCMS3系を利用していると起こること。
見つけたときにびっくりしたので載せたこと。
■ [baserCMS]データキャッシュ用ファイルが大量に生成されることを防止する - Qiita
トラブルを防ぐための手法のひとつとして載せたこと。
■ [baserCMS]CPIサーバでWAFに引っ掛かって記事更新できないとき - Qiita
いつも必ず起こるワケではないので、発生した際の対処策として。
■ [baserCMS]オプショナルリンク利用時、リンク中にブロック要素を含む場合のサンプル - Qiita
組込みの際に、ある条件下ではプラグインの動作だけで対処できないため載せたこと。
■ [baserCMS]バージョン番号を比較して動作を分ける - Qiita
文字列・数値比較でもなくどうしようかな?と思って探っていたら丁度良さそうだったため。
■ [baserCMS]メールフォームの和暦日付の範囲指定の仕方 - Qiita
フォームの日付に、範囲指定が効くという便利なことを残しておきたかったため。
■ [baserCMS] メールフォームの通知メールにフィールドの値を入れる - Qiita
フォームの通知機能にも、ちょっと便利な仕様が入っていることを伝えたかったため。
■ [baserCMS] 固定ページでcode欄を入力欄に見立てて使ってみるTips - Qiita
CakePHPのビューブロックの仕組みを取り入れるとラクにできることを伝えたかったため。
もうちょっといろいろ書いてた気がしてたのですが、思ったより少なかったです。
制作時にちょっと悩んだことや、少し工夫したらラクになることをこれからもシェアしていきたいなー、とか思ってます。
で、最後にあとひとつTipsを。。。
baserCMSのコア開発プロジェクトでは、Travis CI を利用して、テストのチェックを行っています。
■ Travis CI - Test and Deploy Your Code with Confidence
流れとしてはこんな感じです。
※ローカルでのテスト手順もあるのですが、ここでは Travis CI 利用を前提とします。
Travis CI でのテストが通らなかった場合はリジェクトされるワケですが、このテスト実行は「baserCMSプロジェクトと連携している Travis CI で実行」されている状態です。
つまり、push して pull request 送るまで、テスト動作の結果が判りません。
このことは何を指しているかというと、送った pull request のテストが通らなかった場合、プロジェクトの開発メンバーに、テスト失敗による差し戻しの手間を生むことを示します。
もちろん、自分で送った pull request のテストの状況を確認して、自身の手で差し戻すこともできますが、テストが実行され、その結果が返って来るまで画面の前で待つのか?というとそんなことはやってられないですね。
そこで、上記のような手間を解消するためにどうするか?というと、自分のアカウントにフォークしているプロジェクトを、Travis CI と連携させる方法を取っておくと良いです。
これだけです。
baserCMSプロジェクトには、動作に必要な.travis.yml は既に存在しているため、あとは自分のリポジトリに push したタイミングでテストが実行されます。
baserCMS Advent Calendar 2016、いろんな記事が出て面白かったですね。
おつかれさまでした。
このエディターテンプレートは、記事本文内に定形文を差し込む際に非常に便利な機能です。
呼び出して選択するだけで、登録済の定型文を入れ込むことができます。
※URL: /admin/editor_templates/index
この便利機能にもう少し陽の目を当てるべく、作ってみたのが「コーラブルエディターテンプレート プラグイン」です。
きっかけは、記事本文を表示するメインコンテンツ部分の下部に、簡単にエディターテンプレートで作成した定型文を表示させることができる仕組みを備えておき、エディターテンプレートを編集することで、全ての表示箇所を一括で切り替えることができれば、更新の手間を省くことができると考えたから、です。
▼ どんなときに使えるの?
用途としては、記事の下部にお問い合わせ先を掲載したり、Adsense等の広告を載せたりするときが挙げられます。
エディターテンプレートを編集すると、利用している箇所全てを一括で編集できるので、共通パーツのように扱うことができまする。
コーラブルエディターテンプレート プラグインは、記事にエディタテンプレート設定欄を追加できるbaserCMS専用のプラグインです。。。。です。
ファイルのダウンロードは、いつものgithubよりどうぞ。
■ https://github.com/materializing/CallableEditorTemplate
■ 概要・説明: https://github.com/materializing/CallableEditorTemplate/wiki
固定ページ、ブログコンテンツ別に、登録中のエディターテンプレートを、メインコンテンツの上下どちらかに差し込むことができます。
以下にて気軽にどうぞー ・ω・
バグ報告、機能要望、感想とかなんでも受け付けてマス。
アイデア自体は以前から温めてましたが、BurgerEditorの登場と拡散がきっかけです。
■ BurgerEditor 機能限定版 | baserマーケット
バーガーエディターは、記事編集を、ブロック単位で非常に簡単便利な仕組みにしてくれるエディターですが、このプラグインを導入すると、エディターテンプレートが利用できなくなります。
そのため、なんとかして、baserCMSのコア機能でもあるエディターテンプレートを利用できる場面を作りたかった。。。というね。
これで運営者さんも制作者さんも、少しでもラクになればうれしいです。
CakeのControllerには、$Controller->set() でビューへ値を渡せる仕組みがあるのと同様に、Viewにも $View->set() で値を渡せる仕組みがあるのが勉強になりました。
ビューの中身はもう少し学ぶ必要がありそうです。
エディターテンプレートは便利な機能なので、みんな使えば良いと思う。
そんなときに対応できる方法を考えてみました。
本記事の対象は固定ページです。
ブログ?この辺使えばなんとかなるですかね。
選択肢としては以下になるかなぁ?と思います。
こんな感じの一般的なベースを例にします。
「<h2>この辺に追加表示したいテキスト</h2>」が、固定ページのタイトルでもなく本文でもなく、どこかで設定したい箇所。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<?php $this->BcBaser->title() ?>
<?php $this->BcBaser->metaDescription() ?>
<?php $this->BcBaser->metaKeywords() ?>
<?php $this->BcBaser->scripts() ?>
<?php $this->BcBaser->element('google_analytics') ?>
</head>
<body>
<?php $this->BcBaser->header() ?>
<h1><?php echo $this->BcBaser->getContentsTitle() ?></h1>
<h2>この辺に追加表示したいテキスト</h2>
<section id="mainContents">
<?php $this->BcBaser->flash() ?>
<?php $this->BcBaser->content() ?>
</section>
<?php $this->BcBaser->footer() ?>
<?php $this->BcBaser->func() ?>
</body>
</html>
固定ページとブログ記事に、キーワードの設定欄を追加するプラグインがあります。
■ https://github.com/materializing/keyword
これ導入するのはてっとり早いです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<?php $this->BcBaser->title() ?>
<?php $this->BcBaser->metaDescription() ?>
<?php $this->BcBaser->metaKeywords() ?>
<?php $this->BcBaser->scripts() ?>
<?php $this->BcBaser->element('google_analytics') ?>
</head>
<body>
<?php $this->BcBaser->header() ?>
<h1><?php echo $this->BcBaser->getContentsTitle() ?></h1>
<?php if (Hash::get($dataForView, 'Keyword.keywords')): ?>
<h2><?php echo h(Hash::get($dataForView, 'Keyword.keywords')) ?></h2>
<?php endif ?>
<section id="mainContents">
<?php $this->BcBaser->flash() ?>
<?php $this->BcBaser->content() ?>
</section>
<?php $this->BcBaser->footer() ?>
<?php $this->BcBaser->func() ?>
</body>
</html>
とか、キーワード設定管理でできるカスタムテキストを有効化して以下。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<?php $this->BcBaser->title() ?>
<?php $this->BcBaser->metaDescription() ?>
<?php $this->BcBaser->metaKeywords() ?>
<?php $this->BcBaser->scripts() ?>
<?php $this->BcBaser->element('google_analytics') ?>
</head>
<body>
<?php $this->BcBaser->header() ?>
<h1><?php echo $this->BcBaser->getContentsTitle() ?></h1>
<?php if (Hash::get($dataForView, 'Keyword.name')): ?>
<h2><?php echo h(Hash::get($dataForView, 'Keyword.name')) ?></h2>
<?php endif ?>
<section id="mainContents">
<?php $this->BcBaser->flash() ?>
<?php $this->BcBaser->content() ?>
</section>
<?php $this->BcBaser->footer() ?>
<?php $this->BcBaser->func() ?>
</body>
</html>
管理側から設定できるのでラクですね。
ただし、キーワードプラグインを導入して設定し、レイアウトファイルを改修する、というコストが掛かります。
URLから決め打ちで判定して表示する手法です。
以下のようにURLによる条件分岐を書いて対応します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<?php $this->BcBaser->title() ?>
<?php $this->BcBaser->metaDescription() ?>
<?php $this->BcBaser->metaKeywords() ?>
<?php $this->BcBaser->scripts() ?>
<?php $this->BcBaser->element('google_analytics') ?>
</head>
<body>
<?php $this->BcBaser->header() ?>
<h1><?php echo $this->BcBaser->getContentsTitle() ?></h1>
<?php if ($this->request->here === '/hoge/fuga'): ?>
<h2>ここに表示したいテキスト</h2>
<?php endif ?>
<section id="mainContents">
<?php $this->BcBaser->flash() ?>
<?php $this->BcBaser->content() ?>
</section>
<?php $this->BcBaser->footer() ?>
<?php $this->BcBaser->func() ?>
</body>
</html>
。。。これひとつならまだ良いですが、複数に渡るとメンテナンス・コストが膨れ上がりそうです。
設定ファイルにでもURLの定義リスト作っておいて、対応とかでしょうか。
固定ページには、「オプション」で開いて利用できる code欄があります。
今回はここに着目。
この code欄に入力した内容は、通常、メインコンテンツ部分の上部に表示されます。
以下のような具合です。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<?php $this->BcBaser->title() ?>
<?php $this->BcBaser->metaDescription() ?>
<?php $this->BcBaser->metaKeywords() ?>
<?php $this->BcBaser->scripts() ?>
<?php $this->BcBaser->element('google_analytics') ?>
</head>
<body>
<?php $this->BcBaser->header() ?>
<h1><?php echo $this->BcBaser->getContentsTitle() ?></h1>
<section id="mainContents">
<?php $this->BcBaser->flash() ?>
この辺に code欄の内容は出力される
<?php $this->BcBaser->content() ?>
</section>
<?php $this->BcBaser->footer() ?>
<?php $this->BcBaser->func() ?>
</body>
</html>
※ちなみにこの code欄の表示はどんな仕様になってるか見てみたところ、
/lib/Baser/Model/Page.php の addBaserPageTag() で付与処理されました。
これではあとちょっと、目的とする位置に表示するためには一工夫必要そうです。
例えば、class や id 割り当てておいて、jQuery で目的とする位置に移動する、とかでしょうか。
そうした処理もコスト増です。もうちょっとなんとかしたいです。
そこで以下のように下準備します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<?php $this->BcBaser->title() ?>
<?php $this->BcBaser->metaDescription() ?>
<?php $this->BcBaser->metaKeywords() ?>
<?php $this->BcBaser->scripts() ?>
<?php $this->BcBaser->element('google_analytics') ?>
</head>
<body>
<?php $this->BcBaser->header() ?>
<h1><?php echo $this->BcBaser->getContentsTitle() ?></h1>
<?php $this->fetch('subTitleBlock') ?>
<section id="mainContents">
<?php $this->BcBaser->flash() ?>
<?php $this->BcBaser->content() ?>
</section>
<?php $this->BcBaser->footer() ?>
<?php $this->BcBaser->func() ?>
</body>
</html>
準備のポイントは
「<?php $this->fetch('subTitleBlock') ?>」を書いておくことだけです。
※ 名称 subTitleBlock はあくまで例です。これが決まりではなくなんでも良いです。
そして、code欄側には以下のように記述します。
<?php $this->start('subTitleBlock') ?>
<h2>ちょっと出したいテキスト</h2>
<?php $this->end() ?>
こうすることで、メインコンテンツ部分の上部には何も表示されず、目的の場所に目的のテキストを表示することができます。
code 欄に記載がない場合は、何も表示されません(何もしない)し、start〜end の範囲が利用・表示されるため、code欄に他の記載用途があった場合も影響受けることがありません。
これで、特別な作業コストをかけることもなく、表示を追加することができますね。
どんなことを利用してるかというと、Cakephpのビューブロックの仕組みを利用しているだけです。
ビューブロックは、表示内容を各ビューに定義しておいて利用できる仕組みです。
上記の例を用いると、baserCMSのブログのindexビュー(例: /app/webroot/theme/YOUR_THEME/Blog/default/index.php)に、同じ記載をした場合、レイアウト内の subTitleBlock を定義している箇所に、その内容が表示されます。
もうちょっと知りたい場合は以下の記事でとてもわかりやすく解説されてます。
ぜひご参照ください。
■ レイアウトのmetaタグやサイドバーの内容をコンテンツテンプレートから上書き|baserCMS|CMS|スタッフブログ|京都のホームページ制作 株式会社Nextat(ネクスタット)
ビューブロックの仕組みを利用すると、余分な条件分岐を減らすことができ、かつ、表示内容の責任を各ビューに持たせることができるため、非常にすっきりとしてレイアウトを作ることができます。
また、ビューブロックには append、prepend、assign 等の他にも便利に使える仕組みが備わっているため、これらを併用することで、更に調整を行いやすくなります。
■ ビュー -- CakePHP Cookbook 2.x ドキュメント
ちなみにですが、fetch() で定義する文言には予約後があります。
content、css、script は利用しないようにしましょう。
■ MailCatcher
送信されたメールを、ブラウザから確認できるインターフェイスを提供しているシンプルなSMTPサーバです。
黒い画面開いてターミナルで行います。
これだけでインストール終わり。
次の「mailcatcher」を実行することで起動します。
起動したらブラウザで http://localhost:1080 で画面出ます。
phpの設定ファイルを変更します。
利用中の環境に依るので以下はサンプル。
・例: /MAMP/bin/php/php5.5.3/conf/php.ini
以下のように書換えます。
;sendmail_path =
↓↓↓
sendmail_path = /usr/bin/env catchmail
これで準備完了。
テスト用のphpファイルひとつ作ってアクセス。
※テスト用にはこの辺が参考になります。
PHPでメールを送る - Qiita
着弾確認。http://localhost:1080/
baserCMSのメールフォームからも送信動作。
管理側にも入力ユーザーのアドレス宛にも飛びました。
mailcather までのパスを指定すると良いかもです。
ターミナルで which catchmail と打ち、出て来たパスをsendmail_pathに指定します。
※例
sendmail_path = /usr/bin/env /opt/local/bin/catchmail
この辺はダメなときはググってみてください。
こんな感じの場面に良いです。
macの再起動時には自動で起動されてるワケではないので、コマンドで「mailcatcher」実行してから使いましょう。
mac起動時の自動起動もできるので、この辺見てやってみると良いです。
■ Mac OSXで起動時にスクリプトを実行する方法 - Qiita
こんな情報もありました。
■ ローカルでのメールの確認ができるMailCatcherをMacで使う - Shinichi Nishikawa's
MailCatcher に感謝(-∧- )
テキストリプレイスプラグインは、任意のキーワードを一括で変更できるbaserCMS専用のプラグインです。。。。です。
ファイルのダウンロードは、いつものbaserマーケットよりどうぞ。
■ テキストリプレイス | baserマーケット
開発状況とかちょろっと見てみたいときは github どうぞ。
■ https://github.com/materializing/TextReplace
以下にて気軽にどうぞー ・ω・
バグ報告、機能要望、感想とかなんでも受け付けてマス。
アイデア自体は以前から温めていて、それをようやくカタチにすることができました。
1年と少し前に、
「baserCMSのシステム上で、特定の文字列を検索・一括置換できる機能はありませんか?」
と質問をくださったiさん。ようやくできました!
> そのときの心情「うぉぉおああぁぁ〜!?」
> いまの心情「(・∀・)」
作っているときはけっこう山あり谷ありでした。
文字列を指定して検索・置換することを、置換後の文字列指定を前提にしちゃってたり(空文字化=削除できないっす)、ログをテキストファイルに取るようにはしてみたものの、なんかしっくりこなかったり。
内部の処理においても、これまでになかった新しい試みが必要だったので、トライ&エラーの連続でした。
もうちょっとやっていきたいこともあるので、これからもちょいちょいメンテしていきますよ。
このプラグインの制作に当り、俳人 我流(@Garyuten)さんに多大なる助言・アドバイスをいただきました。
本当にありがとうございました_(..)_
ちょっと膝が折れそうになっていたあの機能この機能は、我流さんからの言葉がなければ、次のフェーズに持ち越されっぱなしになっていました。
骨は折れましたが、折れた分の価値ある良い機会をくださってありがとうございました_(..)_
おいしかったです(´ρ`)
さて、去る09/25、新しいbaserCMS 3.0.8 がリリースされました。
■ baserCMS 3.0.8 がリリースされました | baser CMS - 国産オープンソース!フリー(無料)で『コーポレートサイトにちょうどいいCMS』
リリースノート見てみると、Vagrant 周り、認証プレフィックス周り、スマホ周り、めったに起きないだろうけど偶然見つかって安心度合いが格段に高くなったりしてますね。
あと。。。
『テストの拡充』
『テストの拡充』
『テストの拡充』!!!
素の動作を見るときに使ってるVagrant環境を、バージョンも上がったし作り直すことにしました。
Vagrant で baserCMS はとっても簡単です。
■ VirtualBox をインストールします。
・https://www.virtualbox.org/
■ Vagrant をインストールします。
・https://www.vagrantup.com/downloads.html
■ git clone git@github.com:baserproject/basercms.git します。
■ clone したフォルダのトップへ移動します。
・$ cd
・$ cp Vagrantfile.default Vagrantfile
・$ vagrant up
■ 起動終わったら http://192.168.33.10/ をブラウザで叩く
■ 管理画面が開く
■ DB接続: root / root
・DB: basercms
■ そのままインストールします。
■ おわり
Unknown configuration section 'omnibus'.
で止まって起動できませんでした。
そんなときは、
$ vagrant plugin install vagrant-omnibus
して omnibus プラグインを入れると良いです。
以下のようになります。
$ vagrant plugin install vagrant-omnibus
Installing the 'vagrant-omnibus' plugin. This can take a few minutes...
Installed the plugin 'vagrant-omnibus (1.4.1)'!
おしまいです。
ポピュラーブログポストプラグインは、ブログ記事のアクセス数を記録して、人気の高い記事(閲覧数の多い記事)を表示できるbaserCMS専用のプラグインです。。。。です。
ファイルのダウンロードは、いつものbaserマーケットよりどうぞ。
■ ポピュラーブログポスト | baserマーケット
開発状況とかちょろっと見てみたいときは github どうぞ。
■ https://github.com/materializing/PopularBlogPost
以下にて気軽にどうぞー ・ω・
バグ報告、機能要望、感想とかなんでも受け付けてマス。
プラグイン側からのウィジェット追加は久しぶりでした。
この辺の作り方を紹介したいなぁ、と思いました。
といっても、実はbaserCMSはウィジェットの追加が簡単にできるような仕組みは既に出来ていて、ザックリこんな手順で可能。
詳細はその内Qiitaにでも書こうかな。テマコンもあるし。
■ http://qiita.com/tags/basercms
■ http://contest.basercms.net/
9〜10月であと2つくらいプラグイン出すかもしれませんね。
]]>@arata ぜひぜひ!CakeBoxで環境構築ができるので、何かと便利っぽいです。『っぽい』というのは、何故か私がDBのマイグレーションに失敗してしまい、一部の恩恵が得られなかったからです。。。
— 馬庭吾一 (@goichi_m) 2015, 8月 29
Cakeboxとはなんぞ?ということで見てみました。
Virtualbox と Vagrant 使って、Cake3の動作環境をすぐに立ち上げることができるツールです。
]]> README.md 読んでやってみます。$ mkdir cakebox
$ cd cakebox/
$ git clone git@github.com:alt3/cakebox.git ./
$ cp Cakebox.yaml.default Cakebox.yaml
$ vagrant up
これで起動完了です。
サイトアクセスとsshログインは以下。
今回の目的は、Cake3 のブログチュートリアルができる環境を作ることなので、続けて「Create your first website」を見てみます。 http://cakebox.readthedocs.org/en/latest/tutorials/creating-your-first-website/
$ vagrant ssh
$ cakebox application add blog-tutorial.app
これやったあと、先ほどのダッシュボードへアクセスすると、アプリケーションがひとつ追加されてます丶(・ω・)ノ
Remember to update your hosts file with: 10.33.10.10 blog-tutorial.app というワケで hosts へ追記します。
10.33.10.10 blog-tutorial.app
「確認のため ping 打ってみて」と書いてあるのでテストん。
$ ping blog-tutolia.app
返って来たらOKですね。
http://blog-tutorial.app/ でアクセスOK。
Cakeのスタート画面が出て来ます。
Dashboard にある「Applications」の「blog-tutorial」からも行けます。
cakebox の共有ファイルは以下です。
YOUR_CAKEBOX/Apps/blog-tutorial.app
ファインダー上からは、右クリックして「パッケージの内容を表示」から開けます。
表示されたパッケージの内容のフォルダのパスを、任意のエディタのプロジェクトに登録すると良いですね。
Cake3を見てみたかったので、おもしろいツールと併せて体験できて良かったです。
それからもひとつ気になったのはこちら。
■ トップページ | Read the Docs
Cakebox では、この「Read the Docs」というサービスを用いてドキュメントが管理されてるようです。
github、bitbucket等のリポジトリとも連携できて、ドキュメント作成に便利そうです。
ユーザーツールバースウィッチ プラグインは、ユーザー別にツールバー表示・非表示を選択し、設定できるbaserCMS専用のプラグインです。。。。です。
■ ユーザーツールバースウィッチ | baserマーケット
■ https://github.com/materializing/UserToolbarSwitch
ファイルのダウンロードは、いつものbaserマーケット or githubよりどうぞ。
]]> 動作環境
以下にて気軽にどうぞー ・ω・
バグ報告、機能要望、感想とかなんでも受け付けてマス。
公開側での処理と管理側での処理に大きく異なる箇所があって、そこをどうするか?が悩んだところ。
baserCMSへ応援お願いします_(..)_
■ baserCMS寄付受付
baserCMSのメールフォーム、超絶使いやすいんだけど署名トラップにまたハマった。
サイトの設定が反映されない!ってコアファイルの中身まで触ってたけど、メールプラグイン設定の中で署名設定できるのを毎回忘れてしまう。
(だいたいテスト送信してクライアントさんから指摘されて気づく)
— 俳人 我流 (@Garyuten) 2015, 4月 22
そういえばbaserCMSの署名設定は、メールフォームの設定画面とは別に準備されているなぁ、と。
その問題解決として、メールフォーム個別の設定画面内で署名が設定できるようにしてみたらどうだろう?と思ったんで作ってみました。
メールフォーム別に備えることになるので、署名もフォーム毎に持てるカタチ。
複数のメールフォームを設置して、Aフォームでは日本語の署名、Bフォームでは英語の署名とか、フォーム毎に担当部署が異なるので、署名内容を変えておきたい、という場面が挙げられます。
メールサインスウィッチ プラグインは、メールフォーム別に利用する署名を設定できるbaserCMS専用のプラグインです。。。。です。
■ https://github.com/materializing/MailSignSwitch
■ プロジェクト管理
ファイルのダウンロードはいつものgithubよりどうぞ。
]]> 動作環境
以下にて気軽にどうぞー ・ω・
バグ報告、機能要望、感想とかなんでも受け付けてマス。
baserCMSのイベント処理に、dispatchAfterForm というイベントがあります。
これは、管理側の入力・編集画面内のフォームで、入力欄の最後に処理を差し込むことができるイベントです。
今回は、このイベント処理を用いてプラグイン側に用意しているエレメントを表示させてみました。
Form.afterForm と Form.afterOptionForm の2種類があって、Optionとついてる側は、画面内の「オプション」をクリックして表示される範囲側の最後に当たる作りとなってるようですね。
それから、ModelEventの処理は、最近 @gondoh_jpよりアドバイスを受け内容を早速反映したのです。
MailConfigのテーブルを覗いてみてわかったことは、署名設定は1レコードに収められてること。
このテーブルに外部キー備えたら、フォーム別の署名はできるのです。
が、それはシンプルなbaserCMSの考え方とは反するのかもですね。わかんないけど。
というワケで、MacPorts を利用した場合でのメモ。
$ port install nodejs $ port install npm
※エラー出たら sudo で実行
$ npm init
package.json が作成されます。
この json ファイルには、gulp の情報が記載されます。
全部 Enter でOK。必要あれば書きます。
$ npm install browser-sync gulp --save-dev
※ --save-dev で package.json へのgulp情報の追記
→ 別の環境に package.json 持って行って $ npm install と叩くだけで、package.json に記載内容と同一の内容が構築できる
※エラー出たら sudo で実行
インストールすると「node_modules」フォルダが作成されます。
この中身に動作に必要なファイル群が入ってます。
バージョン管理からは ignore しとくと良いです。
プロジェクト直下に gulpfile.js を作成して内容記載。
「proxy」のURLにはこのプロジェクトのURLを記載します。
'use strict'; var gulp = require('gulp'); var browserSync = require('browser-sync'); gulp.task('browser-sync', function () { browserSync({ proxy: 'example.localhost:8888', // external 指定すると、実行時のアクセスURLがIPアドレス指定側で開くことができる open: 'external', }); // 指定フォルダ以下のファイルを監視 gulp.watch(['theme/**', 'app/Plugin/**'], function() { // ファイルに変更があれば同期しているブラウザをリロード browserSync.reload(); }); }); gulp.task('default', ['browser-sync']);
ここまでで準備完了です。
プロジェクト直下で以下のコマンド実行。
$ gulp
もともとは browser-sync という名の通り、複数のブラウザで同じ動作をさせるためのプラグインです。
Chrome、Firefox、Safari で同じ External のURLを開いていると、それらもまとめてリロードされます。
■ フロントのビュー確認時
install.php の debug モードを 1 にしてビューキャッシュが利用されない状態にしておくと吉です。
■ package.json にURLを指定しておく例
"name": "example.localhost:8888",
gulpfile.js は以下。
'use strict'; var gulp = require('gulp'); var browserSync = require('browser-sync'); var pkg = require('./package.json'); // これが追加 // タスクの設定 gulp.task('browser-sync', function () { browserSync({ proxy: pkg.name, // package.json の name が設定できる open: 'external', }); // 指定フォルダ以下のファイルを監視 gulp.watch(['theme/**', 'app/Plugin/**'], function() { // ファイルに変更があれば同期しているブラウザをリロード browserSync.reload(); }); }); gulp.task('default', ['browser-sync']);
勝手にリロードしてくれるんでおいしいです丶(・ω・)ノ
これからバシバシ使ってこうと決めました。
Qiita載せておきました。
■ http://qiita.com/materializing/items/fa6c11e17af65783c9f5
そういやこの方法、自分の環境だとbaserCMSに限らずローカル稼働してる色んなものに使えそう。
]]>
ちなみに、GitHubでは自治体向け機能・紹介もしてるみたいです。
■ GitHubが政府・自治体向けの機能・事例紹介ページを公開 | A-Listers
そんなGitHubですが、リポジトリと連携してチャットできる「Gitter」というのがヨサゲなのでちょこっと紹介してみます。
■ Gitter: https://gitter.im/
教えてくれたのは@cloud10designsさんです。
ブラウザチャットができます。
Mac、iPhone、Chrome向けのアプリがあり、Android、Linux、Windowsで動作するクライアントがあります。
■ https://gitter.im/#apps-panel
。。。というワケで、MacのクライアントをDLして、自分のリポジトリのroomを開いてみるところを撮ってみました。
リポジトリ選択時、Add badge to README on GitHub にチェックしておくと、Gitterから pull request が届きます。
■ 例: https://github.com/materializing/MyEditor/pull/1
READMEにルームへの招待リンク用のバッヂを追加する方法が載ってます。
マージすると README.md に追記されます。
Markdown使えます。
■ https://gitter.zendesk.com/hc/en-us/articles/200176682-Markdown-basics
ショートカットキーはこんな感じ。
■ https://gitter.zendesk.com/hc/en-us/articles/201152592-Keyboard-shortcuts
チャットの中で「#1」なんてすると、GitHubでの issue リンクになります。
個人枠と法人枠があります。
▼ 個人枠
・パブリックルームは無料・無制限で開設できます。
・プライベートルームは1つ可
個人枠で月2ドルの有料使うとプライベートルームが無制限になります。
気になる履歴は、
・個人枠:無料は2週間の履歴保存。有料で履歴保存無制限
となってるようです。
法人枠は月2ドルから利用可。チャット履歴は半年間の保存、となってます。
※なんだか英語での表記と日本語での表記が間違ってるようだったので問合せ送っておきました。
※@2015/03/09 修正受け取っていただけたみたいデス。
https://github.com/gitterHQ/gitter-translations/commit/b1133eafbfc2b5776f63abf870cc03b867162743
リポジトリ単位でルーム作れるので、話題がブレなくて良さそうですね。
]]>インストール(バージョンアップ)後、こんな風にエディターを選択できるようになります。
選択切替え時は、記事に変更内容があっても引き継がない旨のアラートを出します。
その後、もといた画面へ戻ってきます。
固定ページやブログ記事の記事編集画面を開き、この切替え選択を利用すると、編集欄のエディターが切り替わることを確認できマス。
これでユーザー設定画面まで行かなくともエディタの切替ができますよ。
インストール直後、ログインし直さなくてもツールバーに選択欄が表示されるように試行錯誤でした。
で、よくよく考えたら、イベントで引っ掛けようにも、そもそもマイエディターのインストール前では、マイエディター内で作ったイベント自体が引っ掛かるワケないっす。
ということに格闘後気付いて脱力(||| Д )=з