<?xml version="1.0" encoding="UTF-8" standalone="no"?><feed xmlns="http://www.w3.org/2005/Atom">
    <title>Materializing [マテリアライジング]</title>
    <link href="http://www.materializing.net/" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/atom.xml" rel="self" type="application/atom+xml"/>
   <id>tag:www.materializing.net,2006://1</id>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1" rel="service.post" title="Materializing [マテリアライジング]" type="application/atom+xml"/>
    <updated>2020-12-06T23:03:43Z</updated>
    <subtitle>web的暮らし と銘打ち、その足跡を遺していくサイトです。Movabletype,wordpress,EC-CUBE等のCMSをローカルサーバ立てて楽しんでます。それとちょびっとだけPHP。便利なソフトウェアや楽しそうなサイトも紹介中。</subtitle>
 

<xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><entry>
    <title>BurgerEditorで作った記事内容を簡単に2箇所に分割表示して楽しむ手法</title>
    <link href="http://www.materializing.net/archives/2020/12/07080327.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=614" rel="service.edit" title="BurgerEditorで作った記事内容を簡単に2箇所に分割表示して楽しむ手法" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2020://1.614</id>
    
    <published>2020-12-06T23:03:27Z</published>
    <updated>2020-12-06T23:03:43Z</updated>
    
    <summary> 昨年の baserCMS Advent Calendar 2019に続き、今年もbaserCMS Advent Calendar 2020が始まってます。 さてその7日担当です。=[ 'ω' ] ﾄｳﾌｰ baserCMS4のご紹介 baserCMSとは、C...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
昨年の <a href="https://adventar.org/calendars/4498">baserCMS Advent Calendar 2019</a>に続き、今年も<a href="https://adventar.org/calendars/5393">baserCMS Advent Calendar 2020</a>が始まってます。<br />
さてその7日担当です。=[ 'ω' ] ﾄｳﾌｰ
</p>


<h3>baserCMS4のご紹介</h3>

<p>
baserCMSとは、CMS（Contents Management System）です。<br />
世の中には、WordpressとかMovableTypeとかSHIRASAGIなどいろんなCMSがありまして、その中で、PHPのフレームワークであるCakePHPを用いてできてるCMSです。
</p>

<pre>baserCMS（ベーサーシーエムエス）とは、Webサイト制作プラットフォームとして最適な国産CMSです。</pre>

<p>
です。<br />
■ <a href="https://basercms.net/">baserCMS - 国産オープンソース！フリー（無料）でコンテンツ管理に強いCMS</a>
</p>

<p>
プラグインとかテーマの配布・販売やってます。<br />
■ <a href="https://market.basercms.net/">baserマーケット</a>
</p>

<p>
導入事例いっぱいあります。着々と増加中です。<br />
■ <a href="https://basercms.net/works/">baserCMS導入事例 | baser CMS』</a>
</p>

<p>
それから、記事をブロック単位で作ることができる、ハンバーガみたいに積み上げていく感覚で簡単に記事作成ができるBurgerEditorというプラグインがあります。<br />
■ <a href="https://market.basercms.net/products/detail.php?product_id=66">BurgerEditor（baserCMS３対応）（baserCMS４対応） ダウンロード | baserマーケット</a>
</p>


<h3>この記事で紹介すること</h3>

<p>
この記事では、baserCMS＋BurgerEditorで記事を作るときに、記事の1編集領域でBurgerEditorを利用して作成した内容を、2箇所に分割表示する手法を紹介します。<br />
どちらかと言えば開発者さん向けですが大丈夫。<br />
少しがんばる気力があればたぶん運営者でもできちゃいます。
</p>]]>
<![CDATA[<h3>記事内容を2箇所に分割表示するってどういうこと？</h3>

<p>
1記事の編集領域は通常1つです。<br />
なので、BurgerEditorで作成する記事内容も1つということになります。
</p>

<p>
■ 管理側の記事サンプル<br />
<a rel="lightbox" href="/images/sc_20201207191443.png"><img alt="sc_20201207191443.png" src="/images/sc_20201207191443.png" width="500" height="384" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a><br />
■ 公開側の表示サンプル<br />
<a rel="lightbox" href="/images/sc_20201207193443.png"><img alt="sc_20201207193443.png" src="/images/sc_20201207193443.png" width="500" height="398" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>
</p>

<p>
記事編集領域の内容を2箇所に表示する、ということなので、<br />
手っ取り早く固定ページテンプレートに、編集領域で書いた内容を反映する箇所を2つに増やします。<br />
BcPage->content() を2箇所に書いちゃえば良いですね。
</p>

<pre><code>&lt;?php $this-&gt;BcPage-&gt;content();?&gt;
&lt;section&gt;
&lt;hr&gt;
※この部分はどのページでも表示される共通部分
&lt;br&gt;
　固定ページテンプレート（/theme/bc_sample/Pages/templates/default.php）に記載する
&lt;hr&gt;
&lt;/section&gt;
&lt;?php $this-&gt;BcPage-&gt;content(); ?&gt;
</code></pre>

<p>
結果、公開側はどうなるか？<br />
もちろん編集領域で作成した同じ内容が2つ表示されます。<br />
<a rel="lightbox" href="/images/sc_20201207194540.png"><img alt="sc_20201207194540.png" src="/images/sc_20201207194540.png" width="500" height="806" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>
</p>

<p>
やりたいことは「この見出しより下のブロック群は別の箇所に表示したい」なので、もちろんこれではNGです。<br />
なので記事の編集内容を分割し、「この見出しより下のブロック群は別の箇所に表示したい」部分は、「※この部分はどのページでも表示される共通部分」より下の段に表示されるようにします。
</p>

<p>
分割するには規則が必要なので、今回はバーガーブロックの「独自class設定」を用いて、独自classに「bottom-content」が設定されたブロックは、共通部分の下段に表示されるようにしてみます。
</p>

<h3>パースして分割しちゃうのが手っ取り早い</h3>

<p>
必要なのは以下。<br />
・A. 独自classに bottom-content が設定されていないブロックの一覧でできたHTML<br />
・B. 独自classに bottom-content が設定されたブロックの一覧でできたHTML
</p>

<p>
ということでテーマヘルパを利用して必要なHTMLが取得できるようにします。<br />
テーマヘルパについてはこちら。<br />
■ <a href="https://basercms.net/functions/theme_helper">テーマヘルパー https://basercms.net/functions/theme_helper</a><br />
テーマヘルパに以下2つのメソッドを追加します。<br />
※今回、テーマヘルパはbaserCMSインストール時に標準テーマとして入る bc_sample テーマに同梱されている ContestSampleHelper を利用している前提とします。<br />
　・/theme/bc_sample/Helper/ContestSampleHelper.php
</p>

<pre><code>	/**
	 * 指定した独自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-&gt;loadHTML($content);
		$XPath = new DOMXPath($DOM);
		$blockList = $XPath-&gt;query('//div[@data-bgb]');

		if ($className) {
			foreach ($blockList as $node) {
				$hasTargetClass = false;
				$attributes = $node-&gt;attributes;
				foreach ($attributes as $attr) {
					if ($attr-&gt;name === 'class') {
						if(strpos($attr-&gt;value, $className) !== false){
							// class名に bottom-content が含まれている場合
							$hasTargetClass = true;
						}
					}
				}
				// 特定のclass名のみを持ったブロックを取得する
				if ($hasTargetClass) {
					$contentList[] = $DOM-&gt;saveHTML($node);
				} else {
					continue;
				}
			}
		} else {
			foreach ($blockList as $node) {
				$contentList[] = $DOM-&gt;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-&gt;loadHTML($content);
		$XPath = new DOMXPath($DOM);
		$blockList = $XPath-&gt;query('//div[@data-bgb]');

		if ($className) {
			foreach ($blockList as $node) {
				$hasTargetClass = false;
				$attributes = $node-&gt;attributes;
				foreach ($attributes as $attr) {
					if ($attr-&gt;name === 'class') {
						if(strpos($attr-&gt;value, $className) !== false){
							// class名に bottom-content が含まれている場合
							$hasTargetClass = true;
						}
					}
				}
				// 特定のclass名のみを持ったブロックを取得する
				if ($hasTargetClass) {
					continue;
				} else {
					$contentList[] = $DOM-&gt;saveHTML($node);
				}
			}
		} else {
			foreach ($blockList as $node) {
				$contentList[] = $DOM-&gt;saveHTML($node);
			}
		}

		unset($DOM, $blockList);
		return implode('', $contentList);
	}</code></pre>

<p>
次に、ページテンプレート側では内容を以下のように変えます。
</p>

<pre><code>&lt;?php
ob_start();
$this-&gt;BcPage-&gt;content();
$content = ob_get_contents();
ob_end_clean();

echo $this-&gt;ContestSample-&gt;getArticleExcludeCustomClassBlock($content, 'bottom-content');
?&gt;
&lt;section&gt;
&lt;hr&gt;
※この部分はどのページでも表示される共通部分
&lt;br&gt;
　固定ページテンプレート（/theme/bc_sample/Pages/templates/default.php）に記載する
&lt;hr&gt;
&lt;/section&gt;

&lt;?php
ob_start();
$this-&gt;BcPage-&gt;content();
$content = ob_get_contents();
ob_end_clean();

echo $this-&gt;ContestSample-&gt;getArticleCustomClassBlock($content, 'bottom-content');</code></pre>

<p>
BcPage-&gt;content() では、内部的にechoするメソッドなので、出力されている内容をバッファして保持することで、表示内容のHTMLを加工するための文字列として取ってます。<br />
あとは記事内容であるブロックを加工したHTMLを表示するだけです。
</p>

<p>
結果はこんな感じになりました。<br />
画像4つブロックと2カラムブロックは「この見出しより下のブロック群は別の箇所に表示したい」の下段に移動し、上段のブロック群には表示されていません。
</p>

<p>
<a rel="lightbox" href="/images/sc_20201207232340.png"><img alt="sc_20201207232340.png" src="/images/sc_20201207232340.png" width="500" height="438" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>
</p>

<p>
上記の仕組みを用いることで、デザイン・HTMLの構造上、記事をどうしても分割表示しなければならないときにも対応できます。<br />
別で入力欄を作るとか、code欄を用いる等の手法はいろいろありますが、バーガエディタのブロックは追加も編集も簡単なので、このブロックは活かしたまま、容易に分割する手法を考えてみました。
</p>

<h4>あとがき</h4>

<p>
画像内で「画像4列リンク・テキスト付」ブロックなのに、5列と書いてしまってるのにあとから気づいたけどもういいやってなってそのままなのです。
</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2016/02/07184547.php">シンプルSMTPサーバ「MailCatcher」使ってみる</a></li>

<li><a href="http://www.materializing.net/archives/2015/02/14163530.php">baserCMSで、プラグインを用意せずにイベント処理を発動させる方法例</a></li>

<li><a href="http://www.materializing.net/archives/2011/10/03112051.php">baserCMSのヘルパーを覗く旅：TextExヘルパー</a></li>

<li><a href="http://www.materializing.net/archives/2010/02/06150141.php">国産オープンソース「BaserCMS」をXAMPPでお試ししてみた。</a></li>

<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>baserCMS4系用 TextReplace2.0.0 リリース</title>
    <link href="http://www.materializing.net/archives/2020/01/18181017.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=612" rel="service.edit" title="baserCMS4系用 TextReplace2.0.0 リリース" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2020://1.612</id>
    
    <published>2020-01-18T09:10:17Z</published>
    <updated>2020-01-18T09:10:27Z</updated>
    
    <summary> baserCMS用TextReplaceプラグインを4系化していただきました。 @ryuring 本当にありがとうございます_(．．)_ なので、調整メンテしてbaserCMS4系対応版2.0.0をリリースです。 テキストリプレイス プラグイン テキストリプ...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
baserCMS用TextReplaceプラグインを4系化していただきました。<br />
<a href="https://twitter.com/ryuring">@ryuring</a> 本当にありがとうございます_(．．)_
</p>

<p>
なので、調整メンテしてbaserCMS4系対応版2.0.0をリリースです。
</p>

<h3>テキストリプレイス プラグイン</h3>

<p>
<strong>テキストリプレイスプラグインは、任意のキーワードを一括で変更できるbaserCMS専用のプラグインです。</strong>。。。です。<br />
記事内の文字列探したり、指定文字列で置換できるので、運用・運営を少しお手伝いできます。<br />
ファイルのダウンロードはいつものgithubよりどうぞ。<br />
<big>■ <a href="https://github.com/materializing/TextReplace/releases/tag/TextReplace-2.0.0">Release TextReplace-2.0.0 · materializing/TextReplace</a></big>
</p>

<p>
開発状況とかちょろっと見てみたいときもgithubよりどうぞ。<br />
<big>■ <a href="https://github.com/materializing/TextReplace">https://github.com/materializing/TextReplace</a></big>
</p>

<ul>
	<li><a href="http://basercms.net/">baserCMS本体はこちら</a>。</li>
<li><a href="http://wiki.basercms.net/">baserCMS公式wikiはこちら</a></li>
	<li><a href="http://doc.basercms.net/">baserCMSのユーザーマニュアルはこちら</a></li>
</ul>
]]>
<![CDATA[<h3>動作環境</h3>

<ul>
	<li>baserCMS 4.3.0</li>
	<li>PHP 5.6.10</li>
	<li>MySQL 5.5.33</li>
</ul>


<h3>できることとか</h3>

<ul>
	<li>検索語句を指定し、「検索置換対象の指定」で指定したデータを検索することができます。</li>
	<li>検索語句を指定し、置換後の指定し、「検索置換対象の指定」で指定したデータを検索＆置換した結果を確認できます。</li>
	<li>検索語句を指定し、置換後の指定し、「検索置換対象の指定」で指定したデータを検索＆置換した結果の中から、置換＆保存する対象を選択して実行できます。</li>
	<li>置換＆保存したログは「テキスト置換ログ」で確認できます。
	<ul><li>ログを削除できるのはシステム管理グループのユーザーです。</li></ul>
</li>
</ul>


<h3>インストール（使い方）</h3>

<ol>
	<li>圧縮ファイルをDLして解凍したら、/app/Plugin/TextReplace に配置します。</li>
	<li>baserCMS管理システムに入ります。</li>
	<li>プラグイン管理に入ります。</li>
	<li>テキストリプレイス プラグインを有効化します。</li>
	<li>システムナビにある「テキスト置換」画面に入ります。</li>
</ol>


<h3>テキストリプレイス プラグイン についてのご意見・問合せ先</h3>

<p>
以下にて気軽にどうぞー ･ω･<br />
バグ報告、機能要望、感想とかなんでも受け付けてマス。
</p>

<ul>
	<li><a href="http://twitter.com/arata">Twitter＠arata</a></li>
	<li><a href="https://github.com/materializing/TextReplace/issues">githubでのチケット発行</a></li>
</ul>


<h4>あとがき</h4>

<p>
4系になって、固定ページはコンテンツ管理下となり、コンテンツデータと固定ページデータに分離されました。<br />
この辺りをどうしたものかなぁ、と考えてはいたのですが、すっかり「あとで考える」リストに入れたままでした＿|￣|○<br />
ただ、どうやら一部では利用ユーザがいるとの情報が得られまして、それはうれしいのものです。
</p>

<p>
あと、こんな辺境の地に置いてるプラグインを一瞬で4系化しちゃうとか驚きすぎてハナヂ出ますね＜<a href="https://twitter.com/ryuring">@ryuring</a>
</p>]]>
<![CDATA[<p><strong>開発・公開しているbaserCMSプラグインの継続メンテのご支援・応援お願いします_(．．)_</strong></p>
<div class="recommend">
<ul>
<li><a href="https://github.com/sponsors/materializing">Sponsor @materializing on GitHub Sponsors</a></li>
<li><a href="https://www.amazon.jp/hz/wishlist/ls/1RW7IRZW6IB5M?ref_=wl_share">Amazon 欲しいものリスト</a></li>
</ul>
</div>]]>

<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2018/05/03082731.php">baserCMS3系用 TextReplace1.2.2 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2015/10/19163459.php">baserCMS用「テキストリプレイス プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2016/03/21163437.php">baserCMS用「コーラブルエディターテンプレート プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/09/07212552.php">baserCMS用「ポピュラーブログポスト プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/08/22045721.php">baserCMS用「ユーザーツールバースウィッチ プラグイン」作りました。</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>フォント「Source Han Code JP」をbrewで入れてみる</title>
    <link href="http://www.materializing.net/archives/2019/12/30000044.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=611" rel="service.edit" title="フォント「Source Han Code JP」をbrewで入れてみる" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2019://1.611</id>
    
    <published>2019-12-29T15:00:44Z</published>
    <updated>2019-12-31T12:22:28Z</updated>
    
    <summary> Visual Studio Code使ってて、どうにも文字揃えの見え方が揃わないので、 たまにはフォントを変えてみようと思って試してみた。 ...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="MACを楽しむ"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
Visual Studio Code使ってて、どうにも文字揃えの見え方が揃わないので、<br />
たまにはフォントを変えてみようと思って試してみた。<br />

</p>]]>
<![CDATA[<pre><code>$ brew tap caskroom/fonts
Error: caskroom/fonts was moved. Tap homebrew/cask-fonts instead.</code></pre>

<p>
んん？
</p>

<pre><code>$ brew tap homebrew/cask-fonts
$ brew cask install font-source-han-code-jp</code></pre>

<p>
なんか変わってた。完了。
</p>

<p>
あとは vscode の Font Family に設定。<br />
「SourceHanCodeJP-Regular, Menlo, Monaco, 'Courier New', monospace」<br />

</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2019/10/26150825.php">macのgitのバージョンが上がんないから重い腰上げたお話</a></li>

<li><a href="http://www.materializing.net/archives/2015/03/22190508.php">gulpを利用して、baserCMSのテーマ制作やプラグイン開発時にブラウザをオートリロードする</a></li>

<li><a href="http://www.materializing.net/archives/2012/05/05051904.php">新しくなった baserCMS 2.0.0 をcoreserverにインストールしてみた。</a></li>

<li><a href="http://www.materializing.net/archives/2010/01/15100210.php">XAMPPにLive Commerceをインストールしてみる(失敗編)</a></li>

<li><a href="http://www.materializing.net/archives/2009/06/02152718.php">プロジェクト管理：activeCollabをインストールしてみる in coreserver</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>baserCMS4系でフォームの受信一覧表示をカスタマイズする</title>
    <link href="http://www.materializing.net/archives/2019/12/09075504.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=610" rel="service.edit" title="baserCMS4系でフォームの受信一覧表示をカスタマイズする" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2019://1.610</id>
    
    <published>2019-12-08T22:55:04Z</published>
    <updated>2019-12-09T22:57:36Z</updated>
    
    <summary> どうもです･ω･ 昨年の baserCMS Advent Calendar 2018に続き、今年もbaserCMS Advent Calendar 2019が始まってます。 さてその10日担当です。=[ 'ω' ] ﾄｳﾌｰ baserCMS4のご紹介 ba...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
どうもです･ω･<br />
昨年の <a href="https://adventar.org/calendars/3481">baserCMS Advent Calendar 2018</a>に続き、今年もbaserCMS Advent Calendar 2019が始まってます。<br />
さてその10日担当です。=[ 'ω' ] ﾄｳﾌｰ
</p>


<h3>baserCMS4のご紹介</h3>

<p>
baserCMSとは、CMSです。<br />
世の中には、WordpressとかMovableTypeとかSHIRASAGIとかWordpress（2回目）とか、いろんなCMSがありまして、その中で、PHPのフレームワークであるCakePHPを用いてできてるCMSです。
</p>

<pre>baserCMS（ベーサーシーエムエス）とは、Webサイト制作プラットフォームとして最適な国産CMSです。</pre>

<p>
です。<br />
■ <a href="https://basercms.net/">baserCMS - 国産オープンソース！フリー（無料）でコンテンツ管理に強いCMS</a>
</p>

<p>
プラグインとかテーマの配布・販売やってます。<br />
■ <a href="https://market.basercms.net/">baserマーケット</a>
</p>

<p>
導入事例いっぱいあります。着々と増加中です。<br />
■ <a href="https://basercms.net/works/">baserCMS導入事例 | baser CMS』</a>
</p>


<h3>この記事で紹介すること</h3>

<p>
この記事では、baserCMSを利用する中で良く使う、イベント処理＋メールフォームの受信一覧について紹介します。<br />
どちらかと言えば開発者さん向けの記事です。<br />

</p>]]>
<![CDATA[<h3>管理側の受信メール一覧表示をカスタマイズする</h3>

<p>
baserCMSでは、メールフォームを超簡単に複数作成できる機能があって、その受信データ一覧画面も、各フォーム毎に表示することができます。<br />
その受信データの表示を、ある特定の条件にそった内容だけ表示するようにしてみます。<br />
CSVダウンロード機能で落ちてくるCSVの内容も、特定の条件に絞った内容にできます。
</p>

<a data-flickr-embed="true" href="https://www.flickr.com/photos/materializing/49179977523/in/dateposted-public/" title="お問い合わせ｜受信メール一覧｜お問い合わせ_管理｜コンテンツ一覧｜baserCMS_inc_"><img src="https://live.staticflickr.com/65535/49179977523_46165f10b3.jpg" width="500" height="275" alt="お問い合わせ｜受信メール一覧｜お問い合わせ_管理｜コンテンツ一覧｜baserCMS_inc_"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>

<p>
せっかくなのでプラグイン形式で作ってみて、簡単に動作をON／OFFできるようにしてみます。<br />
できるようになることはこんな感じです。
</p>

<ul>
	<li>ユーザーIDが2のユーザでログインし、受信一覧画面を開いた場合、メールフィールドとして name_1 フィールド（例えば名前）が存在しているとき、受信データ内の name_1 フィールに「ほげ」と入ってるデータのみを一覧表示できる</li>
	<li>ユーザーIDが2のユーザでログインし、受信一覧画面からダウンロードするCSVデータが、受信データ内の name_1 フィールドに「ほげ」と入ってるデータのみとなる</li>
</ul>


<h4>ファイルを作る</h4>

<p>
以下の内容でファイルを作ります。
</p>

<ul>
	<li>/app/Plugin/CustomMailMessage/Event/CustomMailMessageModelEventListener.php</li>
</ul>

<pre><code>&lt;?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-&gt;subject();
			// 存在しないフィールドを検索条件に指定することで起こるエラーを防止するため
			if ($Model-&gt;hasField('name_1')) {
				if (empty($event-&gt;data[0]['conditions'])) {
					$conditions = [];
				} else {
					$conditions = $event-&gt;data[0]['conditions'];
				}
				$event-&gt;data[0]['conditions'] = Hash::merge($conditions, [$Model-&gt;alias . '.name_1' =&gt; 'ほげ']);
			}
		}
	}

	/**
	 * 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-&gt;subject();
			// 存在しないフィールドを検索条件に指定することで起こるエラーを防止するため
			if ($Model-&gt;hasField('name_1')) {
				if (empty($event-&gt;data[0]['conditions'])) {
					$conditions = [];
				} else {
					$conditions = $event-&gt;data[0]['conditions'];
				}
				$event-&gt;data[0]['conditions'] = Hash::merge($conditions, [$Model-&gt;alias . '.name_1' =&gt; 'ほげ']);
			}
		}
	}

}</code></pre>

<p>
<br />
。。。。。終わり。<br />
なんとたったの1ファイルで終わっちゃいました。<br />
あとは管理側のプラグイン一覧画面から CustomMailMessage プラグインを有効化するだけです。
</p>


<h4>動作について説明</h4>

<p>
何をしてるのかを少し説明。<br />
受信一覧表示とCSVダウンロード側でのやってる内容はほぼ同じですが、2つに分けているのには理由があります。
</p>

<p>
MailMessageモデルのbeforeFindに対して差し込んでいるイベント処理ですが、CSVダウンロードのときは、イベント名が「MailMessage.beforeFind」では引っかかりません。<br />
これはなんでかなぁ？と探っていたのですが、CSVダウンロードの処理時は、モデルのエイリアス名が受信テーブル名となっていたので、モデルイベントに引っかからないようです。<br />
（例: テーブル名が mysite_mail_message_1 のときは、モデルエイリアス名は mailMessage1 となる）<br />
管理側の受信一覧表示のときは、反対にイベント名が「Mail.MailMessage.beforeFind」で引っ掛けることができませんでした。
</p>

<p>
なので、<br />
管理側受信一覧表示のとき: MailMessage.beforeFind で、<br />
管理側受信一覧CSVダウンロードのとき: Mail.MailMessage.beforeFind <br />
と分ける形になってます。
</p>

<p>
他ポイントとしては以下です。<br />
・BcUtil::isAdminSystem() で管理側のアクセスであることを判定<br />
・BcUtil::loginUser() でログイン中のユーザ情報を取得<br />
・$Model-&gt;hasField('name_1') でテーブル内のフィールドの存在チェック<br />
・$event-&gt;data[0]['conditions'] でデータの検索条件を指定
</p>


<h3>最後に。。。</h3>

<p>
baserCMSでは、このように簡単にプラグインを作ることができます。<br />
サンプルのプラグインの内容はあくまで例ですので、他にもログインしているユーザグループでの判定や、複数フィールドに対する検索条件の指定等を、目的に応じていろいろできると思います。
</p>

<p>
ではでは、baserCMSで楽しい開発ライフを送りましょう。<br />

</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2015/04/27000011.php">baserCMS用「メールサインスウィッチ プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2019/09/21172927.php">簡単に独自の設定画面を追加作成できるbaserCMSプラグイン「AddConfig」さわってみた</a></li>

<li><a href="http://www.materializing.net/archives/2018/05/03082731.php">baserCMS3系用 TextReplace1.2.2 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2016/03/21163437.php">baserCMS用「コーラブルエディターテンプレート プラグイン」作りました。</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>macのgitのバージョンが上がんないから重い腰上げたお話</title>
    <link href="http://www.materializing.net/archives/2019/10/26150825.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=609" rel="service.edit" title="macのgitのバージョンが上がんないから重い腰上げたお話" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2019://1.609</id>
    
    <published>2019-10-26T06:08:25Z</published>
    <updated>2019-10-26T06:50:57Z</updated>
    
    <summary> git のバージョンが古いままで、brewでアップデートしても反映されない。。 ...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="MACを楽しむ"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
git のバージョンが古いままで、brewでアップデートしても反映されない。。<br />

</p>]]>
<![CDATA[<pre>$ which git
/opt/local/bin/git
$ git --version
git version 2.5.0
$ brew list --versions | grep git
git 2.23.0_1
git-ftp 1.5.1_3
git-svn-abandon 0.0.1
$ git --version
git version 2.5.0
</pre>

<p>
えー。。。(;´Д`)
</p>

<pre>$ 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
</pre>

<p>
変えてみた。
</p>

<pre>$ which git
/opt/local/bin/git
$ git --version
git version 2.23.0
</pre>

<p>
できた！オワタ！<br />

</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2019/12/30000044.php">フォント「Source Han Code JP」をbrewで入れてみる</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>簡単に独自の設定画面を追加作成できるbaserCMSプラグイン「AddConfig」さわってみた</title>
    <link href="http://www.materializing.net/archives/2019/09/21172927.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=608" rel="service.edit" title="簡単に独自の設定画面を追加作成できるbaserCMSプラグイン「AddConfig」さわってみた" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2019://1.608</id>
    
    <published>2019-09-21T08:29:27Z</published>
    <updated>2019-09-22T11:58:42Z</updated>
    
    <summary> baserCMSのプラグイン「AddConfig」が公開されていたので触ってみました。 どうやら「【ちょっとした入力項目】を作るためのカスタムフィールド」という内容で、インストールすることで独自の設定を保存できるようになるようです。 これはなんとも便利そうで...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
baserCMSのプラグイン「AddConfig」が公開されていたので触ってみました。
</p>

<p>
どうやら「【ちょっとした入力項目】を作るためのカスタムフィールド」という内容で、インストールすることで独自の設定を保存できるようになるようです。<br />
これはなんとも便利そうです。
</p>

<h3>AddConfig プラグイン</h3>

<p>
■ <a href="https://github.com/BigFly3/AddConfig">https://github.com/BigFly3/AddConfig</a><br />
■ 作者さんの記事: <a href="https://qiita.com/BigFly/items/eccbe4e1ce14b46a9c75">CakePHPユーザーがbaserCMSを開発しやすくするためのカスタムフィールドを作ってみた。 - Qiita</a><br />

</p>]]>
<![CDATA[<h3>インストールについて</h3>

<p>
baserCMSのプラグインは、app/Plugin/配下に、プラグインのパッケージをフォルダごと配置すると良いので、そんな感じで配置してインストール実行です。<br />
※元記事には「テーマ配下推奨」とあります。その理由も明記してあります。<br />
　https://qiita.com/BigFly/items/eccbe4e1ce14b46a9c75#注意点など<br />
　ひとまず確認なので今回はapp配下で。
</p>

<p>
インストールすると、良く使う項目に「カスタムコンフィグ 管理」が追加されます。<br />
すぐに設定画面にアクセスできます。<br />
入ってみると、サンプルで設定してある入力項目一覧が表示されます。<br />
サンプルの充実って大事ですよね。。これは見てみると、どんな項目ができるの？というのがぱっと見てつかみやすくて素敵です。
</p>

<p>
データの方はどうなってるのかな？と覗いてみると、DB内にテーブル「mysite_add_configs」が追加されてました。
</p>


<h3>実際に保存してみる</h3>

<p>
とりあえず適当に入力して保存してみると、<br />
「入力チェックはOKです。AddConfigの設定で更新されないようになっています。」と表示されて保存されません。
</p>

<p>
なるほど。。設定で確認だけできるようになってるですね。<br />
baserCMSの設定ファイルは、たいてい Config/setting.php で定義されているのでその辺りを覗いてみます。
</p>

<pre><code>$config['AddConfig']['debug'] = false; //trueにしておくとフォーム項目のテスト中にデータ更新が出来ないようにすることができます。バリデーションチェックは可能です。</code></pre>

<p>
ん！？falseになってるけどなんだろう。。なんか間違えたかな(　▽|||)<br />
と、あちこち見て回っていると、サンプルで入ってるフォームのビューファイルに記載がありました。
</p>

<pre><code>app/Plugin/AddConfig/Config/sample-form.php
$config['AddConfig']['debug'] = true; //無駄なデータが誤って登録されないようにデバッグモードにしています。</code></pre>

<p>
あくまでサンプル用なので、安全設計がなされている状態でした。<br />
この行をコメントアウトして再度保存に挑戦。<br />
。。。今度はうまく行って一安心です。
</p>

<p>
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://www.materializing.net/assets_c/2019/09/sc_01_addconfig-57.php" onclick="window.open('http://www.materializing.net/assets_c/2019/09/sc_01_addconfig-57.php','popup','width=1265,height=3104,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://www.materializing.net/assets_c/2019/09/sc_01_addconfig-thumb-600x1472-57.png" width="600" height="1472" alt="sc_01_addconfig.png" class="mt-image-none" style="" /></a></span>
</p>

<h3>サンプルフォームはサンプルなので、別で作って利用する</h3>

<p>
初期インストール時に利用されるビュー用のファイルはあくまでサンプルなので、<br />
（AddConfig/Config/sample-form.php）<br />
実際に利用するときには、<br />
AddConfig/Config/sample-form.php → ファイル複製とかして AddConfig/Config/addconfig-form.php のようにして置いて利用する、というのが良さそうです。
</p>

<p>
あとは設定ファイルの中で、以下の行箇所でファイル名の指定を行うこと。<br />
（AddConfig/Config/setting.php）
</p>

<pre><code>include &quot;sample-form.php&quot;; //使用時にコメントアウトするか削除してください。</code></pre>

<p>
各設定項目について説明が載せてあるのでとてもわかりやすく作成してあるなぁ、と思いました。
</p>


<h3>フロント側での利用</h3>

<p>
公開側ではこんな感じでデータを取ってきて利用できました。
</p>

<pre><code>■ テキスト: &lt;?php echo $this-&gt;AddConfig-&gt;f('text01'); ?&gt;</code></pre>

<pre><code>■ テキストエリア: &lt;?php echo $this-&gt;AddConfig-&gt;f('textarea01'); ?&gt;</code></pre>

<pre><code>■ セレクト: 
&lt;?php
$selectList = Hash::extract(Configure::read('AddConfig'), 'form.{n}.fields.select01.parts.options');
echo $this-&gt;BcText-&gt;arrayValue($this-&gt;AddConfig-&gt;get('select01'), $selectList[0]);
?&gt;</code></pre>

<pre><code>■ ラジオ: 
&lt;?php
$radioSelectList = Hash::extract(Configure::read('AddConfig'), 'form.{n}.fields.radio01.parts.options');
echo $this-&gt;BcText-&gt;arrayValue($this-&gt;AddConfig-&gt;get('radio01'), $radioSelectList[0]);
?&gt;</code></pre>

<pre><code>■ チェックボックス: &lt;?php echo $this-&gt;AddConfig-&gt;f('checkbox01'); ?&gt;</code></pre>

<pre><code>■ CkEditor: &lt;?php echo $this-&gt;AddConfig-&gt;get('editor01'); ?&gt;</code></pre>

<pre><code>■ 年月日: &lt;?php echo $this-&gt;AddConfig-&gt;f('datepicker01'); ?&gt;</code></pre>

<pre><code>■ 年月日日時: &lt;?php echo $this-&gt;AddConfig-&gt;f('dateTimePicker01'); ?&gt;</code></pre>

<pre><code>■ アップロードファイル（アップローダ）: &lt;?php echo $this-&gt;AddConfig-&gt;img('upload01'); ?&gt;</code></pre>

<pre><code>■ マルチチェックボックス: 
&lt;?php foreach ($this-&gt;AddConfig-&gt;explodeArray('multicheck01') as $multiCheckboxValue): ?&gt;
	&lt;?php echo h($multiCheckboxValue); ?&gt;
&lt;?php endforeach; ?&gt;</code></pre>

<pre><code>■ 都道府県選択: &lt;?php echo $this-&gt;AddConfig-&gt;f('pref01'); ?&gt;</code></pre>

<p>
個々に設定した値が簡単に取れますね。
</p>

<h4>あとがき</h4>

<p>
設定ファイルの記述で、入力項目の追加や削除を簡単に管理できて、設定した項目の値はグローバル扱いでどこでも基本的に利用できます。
</p>

<p>
アップローダで上げたファイルを自由に設定できるのもすごいですね。<br />
この仕組みって、baserCMSコアが持っているテーマコンフィグに入れちゃっても良いんじゃないでしょうかね。<br />
アップローダが、Wordpressでいうところのメディア管理みたいに利用できそうです。
</p>

<p>
なんとも便利ですごいプラグインが出てますので、baserCMSでサイト構築される際には導入すると良いと思います。<br />
すばらしいプラグインだと思います。<br />

</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2018/05/03082731.php">baserCMS3系用 TextReplace1.2.2 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2016/03/21163437.php">baserCMS用「コーラブルエディターテンプレート プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/10/19163459.php">baserCMS用「テキストリプレイス プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/09/07212552.php">baserCMS用「ポピュラーブログポスト プラグイン」作りました。</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>baserCMS3系用 TextReplace1.2.2 リリース</title>
    <link href="http://www.materializing.net/archives/2018/05/03082731.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=607" rel="service.edit" title="baserCMS3系用 TextReplace1.2.2 リリース" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2018://1.607</id>
    
    <published>2018-05-02T23:27:31Z</published>
    <updated>2019-12-31T10:46:35Z</updated>
    
    <summary> ずっと前に作成したbaserCMS用TextReplaceプラグインをメンテして、1.2.2上げてみました。 きっかけは「検索した文字がハイライトされないケースがある」ってフィードバックいただけたんで、これは対応策を考えたく。 テキストリプレースは、記事内の...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
ずっと前に作成したbaserCMS用TextReplaceプラグインをメンテして、1.2.2上げてみました。
</p>

<p>
きっかけは「検索した文字がハイライトされないケースがある」ってフィードバックいただけたんで、これは対応策を考えたく。
</p>

<p>
テキストリプレースは、記事内の文字列探したり、指定文字列で置換できるので、運用・運営を少しお手伝いできるプラグインです。
</p>

<h3>テキストリプレイス プラグイン</h3>

<p>
<strong>テキストリプレイスプラグインは、任意のキーワードを一括で変更できるbaserCMS専用のプラグインです。</strong>。。。です。<br />
ファイルのダウンロードはいつものgithubよりどうぞ。<br />
<big>■ <a href="https://github.com/materializing/TextReplace/releases/tag/TextReplace-1.2.2">Release TextReplace-1.2.2 · materializing/TextReplace</a></big>
</p>

<p>
開発状況とかちょろっと見てみたいときもgithubよりどうぞ。<br />
<big>■ <a href="https://github.com/materializing/TextReplace">https://github.com/materializing/TextReplace</a></big>
</p>

<ul>
	<li><a href="http://basercms.net/">baserCMS本体はこちら</a>。</li>
<li><a href="http://wiki.basercms.net/">baserCMS公式wikiはこちら</a></li>
	<li><a href="http://doc.basercms.net/">baserCMSのユーザーマニュアルはこちら</a></li>
</ul>
]]>
<![CDATA[<h3>動作環境</h3>

<ul>
	<li>baserCMS 3.0.6〜3.0.15</li>
	<li>PHP 5.4.19</li>
	<li>MySQL 5.5.33</li>
</ul>


<h3>できることとか</h3>

<ul>
	<li>検索語句を指定し、「検索置換対象の指定」で指定したデータを検索することができます。</li>
	<li>検索語句を指定し、置換後の指定し、「検索置換対象の指定」で指定したデータを検索＆置換した結果を確認できます。</li>
	<li>検索語句を指定し、置換後の指定し、「検索置換対象の指定」で指定したデータを検索＆置換した結果の中から、置換＆保存する対象を選択して実行できます。</li>
	<li>置換＆保存したログは「テキスト置換ログ」で確認できます。
	<ul><li>ログを削除できるのはシステム管理グループのユーザーです。</li></ul>
</li>
</ul>


<h3>インストール（使い方）</h3>

<ol>
	<li>圧縮ファイルをDLして解凍したら、/app/Plugin/TextReplace に配置します。</li>
	<li>baserCMS管理システムに入ります。</li>
	<li>プラグイン管理に入ります。</li>
	<li>テキストリプレイス プラグインを有効化します。</li>
	<li>システムナビにある「テキスト置換」画面に入ります。</li>
</ol>


<h3>テキストリプレイス プラグイン についてのご意見・問合せ先</h3>

<p>
以下にて気軽にどうぞー ･ω･<br />
バグ報告、機能要望、感想とかなんでも受け付けてマス。
</p>

<ul>
	<li><a href="http://twitter.com/arata">Twitter＠arata</a></li>
	<li><a href="https://github.com/materializing/TextReplace/issues">githubでのチケット発行</a></li>
</ul>


<h4>あとがき</h4>

<p>
大きく解消したのはこんな点でした。<br />
■ <a href="https://github.com/materializing/TextReplace/issues/1">検索時、ダブルクオートがある場合とでない場合で、コードのマッチ文字がハイライトされない · Issue #1 · materializing/TextReplace</a><br />
「この辺があやしい」と原因まで見ていただいて本当にありがとうございました_(．．)_<br />

</p>]]>
<![CDATA[<p><strong>開発・公開しているbaserCMSプラグインの継続メンテのご支援・応援お願いします_(．．)_</strong></p>
<div class="recommend">
<ul>
<li><a href="https://github.com/sponsors/materializing">Sponsor @materializing on GitHub Sponsors</a></li>
<li><a href="https://www.amazon.jp/hz/wishlist/ls/1RW7IRZW6IB5M?ref_=wl_share">Amazon 欲しいものリスト</a></li>
</ul>
</div>]]>

<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2015/10/19163459.php">baserCMS用「テキストリプレイス プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2016/03/21163437.php">baserCMS用「コーラブルエディターテンプレート プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/09/07212552.php">baserCMS用「ポピュラーブログポスト プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/08/22045721.php">baserCMS用「ユーザーツールバースウィッチ プラグイン」作りました。</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>Qiitaに書き続けたbaserCMSのTipsを振り返る</title>
    <link href="http://www.materializing.net/archives/2016/12/25084817.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=606" rel="service.edit" title="Qiitaに書き続けたbaserCMSのTipsを振り返る" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2016://1.606</id>
    
    <published>2016-12-24T23:48:17Z</published>
    <updated>2016-12-24T23:48:32Z</updated>
    
    <summary> ふと気付いたら baserCMS Advent Calendar 2016 - Adventar が始まっていたので書いてみました。 その24日担当です。1日遅れちゃいました。 この記事では「Qiitaに書き続けたbaserCMSのTipsを振り返る」ことに...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
ふと気付いたら <a href="http://www.adventar.org/calendars/1703">baserCMS Advent Calendar 2016 - Adventar</a> が始まっていたので書いてみました。<br />
その24日担当です。1日遅れちゃいました。
</p>

<p>
この記事では「Qiitaに書き続けたbaserCMSのTipsを振り返る」ことにしてみました。
</p>


<h3>baserCMS3のご紹介</h3>

<p>
baserCMSとは、CMSです。<br />
■ <a href="http://basercms.net/">baserCMS</a>・・・公式サイト<br />
■ <a href="http://barket.jp/">baserマーケット</a>・・・プラグインとかテーマの配布・販売<br />

</p>]]>
<![CDATA[<h3>baserCMS Tips on Qiitta</h3>

<p>
■ <a href="http://qiita.com/materializing/items/b0a2ad9eaba0c4e779ce">[baserCMS]少し古いバージョンで、管理側プラグイン一覧が表示されない場合 - Qiita</a><br />
通常動作には影響ないけど、少し古いbaserCMS3系を利用していると起こること。<br />
見つけたときにびっくりしたので載せたこと。
</p>

<p>
■ <a href="http://qiita.com/materializing/items/f1575532cb86d5cfbeeb">[baserCMS]データキャッシュ用ファイルが大量に生成されることを防止する - Qiita</a><br />
トラブルを防ぐための手法のひとつとして載せたこと。
</p>

<p>
■ <a href="http://qiita.com/materializing/items/341369445081648746fb">[baserCMS]CPIサーバでWAFに引っ掛かって記事更新できないとき - Qiita</a><br />
いつも必ず起こるワケではないので、発生した際の対処策として。
</p>

<p>
■ <a href="http://qiita.com/materializing/items/d267c8957797390ec56b">[baserCMS]オプショナルリンク利用時、リンク中にブロック要素を含む場合のサンプル - Qiita</a><br />
組込みの際に、ある条件下ではプラグインの動作だけで対処できないため載せたこと。
</p>

<p>
■ <a href="http://qiita.com/materializing/items/df5487e1a08e77623058">[baserCMS]バージョン番号を比較して動作を分ける - Qiita</a><br />
文字列・数値比較でもなくどうしようかな？と思って探っていたら丁度良さそうだったため。
</p>

<p>
■ <a href="http://qiita.com/materializing/items/902e7fac87ece1bf0eab">[baserCMS]メールフォームの和暦日付の範囲指定の仕方 - Qiita</a><br />
フォームの日付に、範囲指定が効くという便利なことを残しておきたかったため。
</p>

<p>
■ <a href="http://qiita.com/materializing/items/7637b29887ed0e872be1">[baserCMS] メールフォームの通知メールにフィールドの値を入れる - Qiita</a><br />
フォームの通知機能にも、ちょっと便利な仕様が入っていることを伝えたかったため。
</p>

<p>
■ <a href="http://qiita.com/materializing/items/e7e58480e97be0983534">[baserCMS] 固定ページでcode欄を入力欄に見立てて使ってみるTips - Qiita</a><br />
CakePHPのビューブロックの仕組みを取り入れるとラクにできることを伝えたかったため。
</p>

<h3>意外と少なかった</h3>

<p>
もうちょっといろいろ書いてた気がしてたのですが、思ったより少なかったです。<br />
制作時にちょっと悩んだことや、少し工夫したらラクになることをこれからもシェアしていきたいなー、とか思ってます。
</p>

<p>
で、最後にあとひとつTipsを。。。
</p>


<h3>pull request 前に Travis CI でテストしてみよう</h3>

<p>
baserCMSのコア開発プロジェクトでは、Travis CI を利用して、テストのチェックを行っています。<br />
■ <a href="https://travis-ci.org/">Travis CI - Test and Deploy Your Code with Confidence</a><br />
流れとしてはこんな感じです。<br />
※ローカルでのテスト手順もあるのですが、ここでは Travis CI 利用を前提とします。
</p>

<ol>
	<li><a href="https://github.com/baserproject/basercms">https://github.com/baserproject/basercms</a> をフォークして、自身の github アカウントにリポジトリを作る</li>
<li>作成したリモートリポジトリを clone してローカルに持って来る</li>
<li>トピックブランチを切って開発する</li>
<li>自分のリポジトリに push する</li>
<li>自分のリポジトリから、baserCMSプロジェクト側のリポジトリに対して pull request 送る（※コア開発メンバーにアラートが飛ぶ）</li>
<li>baserCMSプロジェクトと連携している Travis CI で、テストが動く</li>
<li>テストが通ったら、該当 pull request にテスト通過のマークが付く</li>
<li>テストが通らなかったら、該当 pull request にテスト通過ダメでしたのマークが付く</li>
<li>開発メンバーによりマージされる or リジェクトされる</li>
</ol>

<p>
Travis CI でのテストが通らなかった場合はリジェクトされるワケですが、このテスト実行は「baserCMSプロジェクトと連携している Travis CI で実行」されている状態です。<br />
つまり、push して pull request 送るまで、テスト動作の結果が判りません。<br />
このことは何を指しているかというと、送った pull request のテストが通らなかった場合、プロジェクトの開発メンバーに、テスト失敗による差し戻しの手間を生むことを示します。<br />
もちろん、自分で送った pull request のテストの状況を確認して、自身の手で差し戻すこともできますが、テストが実行され、その結果が返って来るまで画面の前で待つのか？というとそんなことはやってられないですね。
</p>

<p>
そこで、上記のような手間を解消するためにどうするか？というと、自分のアカウントにフォークしているプロジェクトを、Travis CI と連携させる方法を取っておくと良いです。
</p>

<ol>
	<li>「Sign in with GitHub」を利用して Travis CI にログインする</li>
	<li>自分のアカウントのbaserCMSリポジトリでの有効化を指定する</li>
</ol>

<p>
これだけです。<br />
baserCMSプロジェクトには、動作に必要な.travis.yml は既に存在しているため、あとは自分のリポジトリに push したタイミングでテストが実行されます。
</p>

<h4>あとがき</h4>

<p>
baserCMS Advent Calendar 2016、いろんな記事が出て面白かったですね。<br />
おつかれさまでした。<br />

</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2020/12/07080327.php">BurgerEditorで作った記事内容を簡単に2箇所に分割表示して楽しむ手法</a></li>

<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2019/12/09075504.php">baserCMS4系でフォームの受信一覧表示をカスタマイズする</a></li>

<li><a href="http://www.materializing.net/archives/2019/09/21172927.php">簡単に独自の設定画面を追加作成できるbaserCMSプラグイン「AddConfig」さわってみた</a></li>

<li><a href="http://www.materializing.net/archives/2018/05/03082731.php">baserCMS3系用 TextReplace1.2.2 リリース</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>baserCMS用「コーラブルエディターテンプレート プラグイン」作りました。</title>
    <link href="http://www.materializing.net/archives/2016/03/21163437.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=605" rel="service.edit" title="baserCMS用「コーラブルエディターテンプレート プラグイン」作りました。" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2016://1.605</id>
    
    <published>2016-03-21T07:34:37Z</published>
    <updated>2019-12-31T10:51:10Z</updated>
    
    <summary> 今回のbaserCMSスキマ産業活動は、エディターテンプレートに目を向けてみました。 「エディターテンプレート」機能は、記事編集欄のエディタ操作ボタンにある"これ"です。 このエディターテンプレートは、記事本文内に定形文を差し込む際に非常に便利な機能です。 ...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
今回のbaserCMSスキマ産業活動は、エディターテンプレートに目を向けてみました。<br />
「エディターテンプレート」機能は、記事編集欄のエディタ操作ボタンにある"これ"です。
</p>

<p>
<a href="https://farm2.staticflickr.com/1653/25953628315_ef97403341_c.jpg" rel="lightbox"><img alt="エディタテンプレート" src="https://farm2.staticflickr.com/1653/25953628315_ef97403341.jpg" /></a>
</p>

<p>
このエディターテンプレートは、記事本文内に定形文を差し込む際に非常に便利な機能です。<br />
呼び出して選択するだけで、登録済の定型文を入れ込むことができます。<br />
※URL: /admin/editor_templates/index
</p>

<p>
この便利機能にもう少し陽の目を当てるべく、作ってみたのが「コーラブルエディターテンプレート プラグイン」です。<br />
きっかけは、記事本文を表示するメインコンテンツ部分の下部に、簡単にエディターテンプレートで作成した定型文を表示させることができる仕組みを備えておき、エディターテンプレートを編集することで、全ての表示箇所を一括で切り替えることができれば、更新の手間を省くことができると考えたから、です。
</p>

<p>
<strong>▼ どんなときに使えるの？</strong><br />
用途としては、記事の下部にお問い合わせ先を掲載したり、Adsense等の広告を載せたりするときが挙げられます。<br />
エディターテンプレートを編集すると、利用している箇所全てを一括で編集できるので、共通パーツのように扱うことができまする。
</p>


<h3>コーラブルエディターテンプレート プラグイン</h3>

<p>
<strong>コーラブルエディターテンプレート プラグインは、記事にエディタテンプレート設定欄を追加できるbaserCMS専用のプラグインです。</strong>。。。です。<br />
ファイルのダウンロードは、いつものgithubよりどうぞ。<br />
<big>■ <a href="https://github.com/materializing/CallableEditorTemplate">https://github.com/materializing/CallableEditorTemplate</a></big><br />
■ 概要・説明: <a href="https://github.com/materializing/CallableEditorTemplate/wiki">https://github.com/materializing/CallableEditorTemplate/wiki</a>
</p>

<ul>
	<li><a href="http://basercms.net/">baserCMS本体はこちら</a>。</li>
<li><a href="http://wiki.basercms.net/">baserCMS公式wikiはこちら</a></li>
	<li><a href="http://doc.basercms.net/">baserCMSのユーザーマニュアルはこちら</a></li>
</ul>]]>
<![CDATA[<h3>動作環境</h3>

<ul>
	<li>baserCMS 3.0.9</li>
	<li>PHP 5.5.3</li>
	<li>MySQL 5.5.33</li>
</ul>


<h3>できることとか</h3>

<p>
固定ページ、ブログコンテンツ別に、登録中のエディターテンプレートを、メインコンテンツの上下どちらかに差し込むことができます。
</p>

<p>
<a href="https://farm2.staticflickr.com/1704/25928221176_5d58ceaaf4_c.jpg" rel="lightbox"><img alt="エディタテンプレート" src="https://farm2.staticflickr.com/1704/25928221176_5d58ceaaf4.jpg" /></a><br />
※チェックボックスはラジオボタンに変更となりました。
</p>

<ul>
	<li>記事編集画面への表示の有無（利用の有無）を指定することができます。</li>
	<li>記事編集画面に表示するラベル名（th箇所）を指定することができます。</li>
</ul>


<h3>インストール（使い方）</h3>

<ol>
	<li>圧縮ファイルを解凍後、BASERCMS/app/Plugin/CallableEditorTemplate に配置します。</li>
	<li>管理システムのプラグイン管理にアクセスし、表示されている CallableEditorTemplate プラグイン をインストール（有効化）して下さい。</li>
	<li>コーラブルエディターテンプレート設定一覧画面にアクセスし、利用するコンテンツ毎に有効化します。</li>
	<li>設定一覧画面の「新規追加」より、利用するコンテンツを追加します。</li>
	<li>設定追加後、記事の投稿画面にアクセスすると、入力項目が追加されてます。</li>
</ol>

<h3>コーラブルエディターテンプレート プラグイン についてのご意見・問合せ先</h3>

<p>
以下にて気軽にどうぞー ･ω･<br />
バグ報告、機能要望、感想とかなんでも受け付けてマス。
</p>

<ul>
	<li><a href="http://twitter.com/arata">Twitter＠arata</a></li>
	<li><a href="https://github.com/materializing/CallableEditorTemplate/issues">githubでのチケット発行</a></li>
</ul>


<h3>作成裏話(表に出しちゃってるけど裏話)</h3>

<p>
アイデア自体は以前から温めてましたが、BurgerEditorの登場と拡散がきっかけです。<br />
■ <a href="https://market.basercms.net/products/detail.php?product_id=61&category_id=1">BurgerEditor 機能限定版 | baserマーケット</a><br />
バーガーエディターは、記事編集を、ブロック単位で非常に簡単便利な仕組みにしてくれるエディターですが、このプラグインを導入すると、エディターテンプレートが利用できなくなります。<br />
そのため、なんとかして、baserCMSのコア機能でもあるエディターテンプレートを利用できる場面を作りたかった。。。というね。
</p>

<p>
これで運営者さんも制作者さんも、少しでもラクになればうれしいです。
</p>

<h4>あとがき</h4>

<p>
CakeのControllerには、$Controller->set() でビューへ値を渡せる仕組みがあるのと同様に、Viewにも $View->set() で値を渡せる仕組みがあるのが勉強になりました。<br />
ビューの中身はもう少し学ぶ必要がありそうです。
</p>

<p>
エディターテンプレートは便利な機能なので、みんな使えば良いと思う。<br />

</p>]]>
<![CDATA[<p><strong>開発・公開しているbaserCMSプラグインの継続メンテのご支援・応援お願いします_(．．)_</strong></p>
<div class="recommend">
<ul>
<li><a href="https://github.com/sponsors/materializing">Sponsor @materializing on GitHub Sponsors</a></li>
<li><a href="https://www.amazon.jp/hz/wishlist/ls/1RW7IRZW6IB5M?ref_=wl_share">Amazon 欲しいものリスト</a></li>
</ul>
</div>]]>

<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2018/05/03082731.php">baserCMS3系用 TextReplace1.2.2 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2015/10/19163459.php">baserCMS用「テキストリプレイス プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/09/07212552.php">baserCMS用「ポピュラーブログポスト プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/08/22045721.php">baserCMS用「ユーザーツールバースウィッチ プラグイン」作りました。</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>baserCMSの固定ページで入力欄がどうしてもあとひとつ必要なときのTips</title>
    <link href="http://www.materializing.net/archives/2016/02/20043329.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=604" rel="service.edit" title="baserCMSの固定ページで入力欄がどうしてもあとひとつ必要なときのTips" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2016://1.604</id>
    
    <published>2016-02-19T19:33:29Z</published>
    <updated>2016-05-04T07:44:01Z</updated>
    
    <summary> baserCMSでサイト作ってるときにたまに起こるのが、 「あとひとつ入力欄要る」 です。 そんなときに対応できる方法を考えてみました。 本記事の対象は固定ページです。 ブログ？この辺使えばなんとかなるですかね。 選択肢としては以下になるかなぁ？と思います。...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
baserCMSでサイト作ってるときにたまに起こるのが、<br />
<big>「あとひとつ入力欄要る」</big><br />
です。
</p>

<p>
そんなときに対応できる方法を考えてみました。<br />
本記事の対象は固定ページです。<br />
ブログ？<a href="https://github.com/materializing/PetitCustomField">この辺使えばなんとかなる</a>ですかね。
</p>

<p>
選択肢としては以下になるかなぁ？と思います。
</p>

<ul>
	<li>キーワードプラグインを導入する</li>
	<li>条件分岐でなんとかする</li>
	<li>code 欄使う[今回の提案策]</li>
</ul>]]>
<![CDATA[<h3>ベースとなるHTML構造</h3>

<p>
こんな感じの一般的なベースを例にします。<br />
「&lt;h2&gt;この辺に追加表示したいテキスト&lt;/h2&gt;」が、固定ページのタイトルでもなく本文でもなく、どこかで設定したい箇所。
</p>

<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ja&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;&gt;
	&lt;?php $this-&gt;BcBaser-&gt;title() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;metaDescription() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;metaKeywords() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;scripts() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;element('google_analytics') ?&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php $this-&gt;BcBaser-&gt;header() ?&gt;

&lt;h1&gt;&lt;?php echo $this-&gt;BcBaser-&gt;getContentsTitle() ?&gt;&lt;/h1&gt;

<span style="color:#FF0000">&lt;h2&gt;この辺に追加表示したいテキスト&lt;/h2&gt;</span>

	&lt;section id=&quot;mainContents&quot;&gt;
		&lt;?php $this-&gt;BcBaser-&gt;flash() ?&gt;
		&lt;?php $this-&gt;BcBaser-&gt;content() ?&gt;
	&lt;/section&gt;

&lt;?php $this-&gt;BcBaser-&gt;footer() ?&gt;
&lt;?php $this-&gt;BcBaser-&gt;func() ?&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>


<h3>キーワードプラグインを導入する</h3>

<p>
固定ページとブログ記事に、キーワードの設定欄を追加するプラグインがあります。<br />
■ <a href="https://github.com/materializing/keyword">https://github.com/materializing/keyword</a><br />
これ導入するのはてっとり早いです。
</p>

<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ja&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;&gt;
	&lt;?php $this-&gt;BcBaser-&gt;title() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;metaDescription() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;metaKeywords() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;scripts() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;element('google_analytics') ?&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php $this-&gt;BcBaser-&gt;header() ?&gt;

&lt;h1&gt;&lt;?php echo $this-&gt;BcBaser-&gt;getContentsTitle() ?&gt;&lt;/h1&gt;

<span style="color:#FF0000">
&lt;?php if (Hash::get($dataForView, 'Keyword.keywords')): ?&gt;
&lt;h2&gt;&lt;?php echo h(Hash::get($dataForView, 'Keyword.keywords')) ?&gt;&lt;/h2&gt;
&lt;?php endif ?&gt;
</span>

	&lt;section id=&quot;mainContents&quot;&gt;
		&lt;?php $this-&gt;BcBaser-&gt;flash() ?&gt;
		&lt;?php $this-&gt;BcBaser-&gt;content() ?&gt;
	&lt;/section&gt;

&lt;?php $this-&gt;BcBaser-&gt;footer() ?&gt;
&lt;?php $this-&gt;BcBaser-&gt;func() ?&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>
とか、キーワード設定管理でできるカスタムテキストを有効化して以下。
</p>

<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ja&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;&gt;
	&lt;?php $this-&gt;BcBaser-&gt;title() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;metaDescription() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;metaKeywords() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;scripts() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;element('google_analytics') ?&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php $this-&gt;BcBaser-&gt;header() ?&gt;

&lt;h1&gt;&lt;?php echo $this-&gt;BcBaser-&gt;getContentsTitle() ?&gt;&lt;/h1&gt;

<span style="color:#FF0000">
&lt;?php if (Hash::get($dataForView, 'Keyword.name')): ?&gt;
&lt;h2&gt;&lt;?php echo h(Hash::get($dataForView, 'Keyword.name')) ?&gt;&lt;/h2&gt;
&lt;?php endif ?&gt;
</span>

	&lt;section id=&quot;mainContents&quot;&gt;
		&lt;?php $this-&gt;BcBaser-&gt;flash() ?&gt;
		&lt;?php $this-&gt;BcBaser-&gt;content() ?&gt;
	&lt;/section&gt;

&lt;?php $this-&gt;BcBaser-&gt;footer() ?&gt;
&lt;?php $this-&gt;BcBaser-&gt;func() ?&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>
管理側から設定できるのでラクですね。<br />
ただし、キーワードプラグインを導入して設定し、レイアウトファイルを改修する、というコストが掛かります。
</p>

<h3>条件分岐でなんとかする</h3>

<p>
URLから決め打ちで判定して表示する手法です。<br />
以下のようにURLによる条件分岐を書いて対応します。
</p>

<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ja&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;&gt;
	&lt;?php $this-&gt;BcBaser-&gt;title() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;metaDescription() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;metaKeywords() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;scripts() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;element('google_analytics') ?&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php $this-&gt;BcBaser-&gt;header() ?&gt;

&lt;h1&gt;&lt;?php echo $this-&gt;BcBaser-&gt;getContentsTitle() ?&gt;&lt;/h1&gt;

<span style="color:#CC0000">&lt;?php if ($this-&gt;request-&gt;here === '/hoge/fuga'): ?&gt;
&lt;h2&gt;ここに表示したいテキスト&lt;/h2&gt;
&lt;?php endif ?&gt;</span>

	&lt;section id=&quot;mainContents&quot;&gt;
		&lt;?php $this-&gt;BcBaser-&gt;flash() ?&gt;
		&lt;?php $this-&gt;BcBaser-&gt;content() ?&gt;
	&lt;/section&gt;

&lt;?php $this-&gt;BcBaser-&gt;footer() ?&gt;
&lt;?php $this-&gt;BcBaser-&gt;func() ?&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>
。。。これひとつならまだ良いですが、複数に渡るとメンテナンス・コストが膨れ上がりそうです。<br />
設定ファイルにでもURLの定義リスト作っておいて、対応とかでしょうか。
</p>

<h3>code 欄使う[今回の提案策]</h3>

<p>
固定ページには、「オプション」で開いて利用できる code欄があります。<br />
今回はここに着目。
</p>

<p>
<a data-flickr-embed="true"  href="https://farm2.staticflickr.com/1685/24501773584_20fcc5a7b8_c.jpg" title="Untitled"><img src="https://farm2.staticflickr.com/1685/24501773584_20fcc5a7b8.jpg" width="500" height="262" alt="Untitled"></a>
</p>

<p>
この code欄に入力した内容は、通常、メインコンテンツ部分の上部に表示されます。<br />
以下のような具合です。
</p>

<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ja&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;&gt;
	&lt;?php $this-&gt;BcBaser-&gt;title() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;metaDescription() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;metaKeywords() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;scripts() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;element('google_analytics') ?&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php $this-&gt;BcBaser-&gt;header() ?&gt;

&lt;h1&gt;&lt;?php echo $this-&gt;BcBaser-&gt;getContentsTitle() ?&gt;&lt;/h1&gt;

	&lt;section id=&quot;mainContents&quot;&gt;
		&lt;?php $this-&gt;BcBaser-&gt;flash() ?&gt;
<span style="color:#CC0000">この辺に code欄の内容は出力される</span>
		&lt;?php $this-&gt;BcBaser-&gt;content() ?&gt;
	&lt;/section&gt;

&lt;?php $this-&gt;BcBaser-&gt;footer() ?&gt;
&lt;?php $this-&gt;BcBaser-&gt;func() ?&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>
※ちなみにこの code欄の表示はどんな仕様になってるか見てみたところ、<br />
/lib/Baser/Model/Page.php の addBaserPageTag() で付与処理されました。
</p>

<p>
これではあとちょっと、目的とする位置に表示するためには一工夫必要そうです。<br />
例えば、class や id 割り当てておいて、jQuery で目的とする位置に移動する、とかでしょうか。<br />
そうした処理もコスト増です。もうちょっとなんとかしたいです。<br />
そこで以下のように下準備します。
</p>

<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ja&quot;&gt;
&lt;head&gt;
	&lt;meta charset=&quot;UTF-8&quot;&gt;
	&lt;?php $this-&gt;BcBaser-&gt;title() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;metaDescription() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;metaKeywords() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;scripts() ?&gt;
	&lt;?php $this-&gt;BcBaser-&gt;element('google_analytics') ?&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php $this-&gt;BcBaser-&gt;header() ?&gt;

&lt;h1&gt;&lt;?php echo $this-&gt;BcBaser-&gt;getContentsTitle() ?&gt;&lt;/h1&gt;

<span style="color:#CC0000">&lt;?php $this-&gt;fetch('subTitleBlock') ?&gt;</span>

	&lt;section id=&quot;mainContents&quot;&gt;
		&lt;?php $this-&gt;BcBaser-&gt;flash() ?&gt;
		&lt;?php $this-&gt;BcBaser-&gt;content() ?&gt;
	&lt;/section&gt;

&lt;?php $this-&gt;BcBaser-&gt;footer() ?&gt;
&lt;?php $this-&gt;BcBaser-&gt;func() ?&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>
準備のポイントは<br />
「&lt;?php $this-&gt;fetch('subTitleBlock') ?&gt;」を書いておくことだけです。<br />
※ 名称 subTitleBlock はあくまで例です。これが決まりではなくなんでも良いです。
</p>

<p>
そして、code欄側には以下のように記述します。
</p>

<pre><code>&lt;?php $this-&gt;start('subTitleBlock') ?&gt;
&lt;h2&gt;ちょっと出したいテキスト&lt;/h2&gt;
&lt;?php $this-&gt;end() ?&gt;
</code></pre>

<p>
こうすることで、メインコンテンツ部分の上部には何も表示されず、目的の場所に目的のテキストを表示することができます。<br />
code 欄に記載がない場合は、何も表示されません（何もしない）し、start〜end の範囲が利用・表示されるため、code欄に他の記載用途があった場合も影響受けることがありません。
</p>

<p>
これで、特別な作業コストをかけることもなく、表示を追加することができますね。
</p>


<h3>表示する仕組みについて</h3>

<p>
どんなことを利用してるかというと、Cakephpのビューブロックの仕組みを利用しているだけです。<br />
ビューブロックは、表示内容を各ビューに定義しておいて利用できる仕組みです。<br />
上記の例を用いると、baserCMSのブログのindexビュー（例: /app/webroot/theme/YOUR_THEME/Blog/default/index.php）に、同じ記載をした場合、レイアウト内の subTitleBlock を定義している箇所に、その内容が表示されます。
</p>

<p>
もうちょっと知りたい場合は以下の記事でとてもわかりやすく解説されてます。<br />
ぜひご参照ください。<br />
■ <a href="http://nextat.co.jp/staff/archives/123">レイアウトのmetaタグやサイドバーの内容をコンテンツテンプレートから上書き｜baserCMS｜CMS｜スタッフブログ｜京都のホームページ制作　株式会社Nextat（ネクスタット）</a>
</p>

<h4>あとがき</h4>

<p>
ビューブロックの仕組みを利用すると、余分な条件分岐を減らすことができ、かつ、表示内容の責任を各ビューに持たせることができるため、非常にすっきりとしてレイアウトを作ることができます。<br />
また、ビューブロックには append、prepend、assign 等の他にも便利に使える仕組みが備わっているため、これらを併用することで、更に調整を行いやすくなります。<br />
■ <a href="http://book.cakephp.org/2.0/ja/views.html#view-blocks">ビュー -- CakePHP Cookbook 2.x ドキュメント</a>
</p>

<p>
ちなみにですが、fetch() で定義する文言には予約後があります。<br />
content、css、script は利用しないようにしましょう。<br />

</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2011/10/03112051.php">baserCMSのヘルパーを覗く旅：TextExヘルパー</a></li>

<li><a href="http://www.materializing.net/archives/2015/02/14163530.php">baserCMSで、プラグインを用意せずにイベント処理を発動させる方法例</a></li>

<li><a href="http://www.materializing.net/archives/2015/02/15011711.php">doxygen 使ってbaserCMSプラグインのドキュメントを生成してみた</a></li>

<li><a href="http://www.materializing.net/archives/2015/02/08130729.php">baserCMSでユーザー別にアクセス制限設定を調整したいとき</a></li>

<li><a href="http://www.materializing.net/archives/2015/01/11084207.php">KeyValueBehavior[cakephp-tools]のご紹介</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>シンプルSMTPサーバ「MailCatcher」使ってみる</title>
    <link href="http://www.materializing.net/archives/2016/02/07184547.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=603" rel="service.edit" title="シンプルSMTPサーバ「MailCatcher」使ってみる" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2016://1.603</id>
    
    <published>2016-02-07T09:45:47Z</published>
    <updated>2016-05-04T07:48:45Z</updated>
    
    <summary> CMS等のメール確認動作には「MailCatcher」が便利だよ！ との情報を @kaburk より教えてもらったのでやってみました。 ちゃんとできてムホムホしてます。 kaburkさん、どうもありがとう_(．．)_ MailCatherってなに？ ■ Ma...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="phpに関するメモ"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
CMS等のメール確認動作には「MailCatcher」が便利だよ！<br />
との情報を <a href="https://twitter.com/kaburk">@kaburk</a> より教えてもらったのでやってみました。<br />
ちゃんとできてムホムホしてます。<br />
kaburkさん、どうもありがとう_(．．)_
</p>

<h3>MailCatherってなに？</h3>

<p>
■ <a href="http://mailcatcher.me/">MailCatcher</a><br />
送信されたメールを、ブラウザから確認できるインターフェイスを提供しているシンプルなSMTPサーバです。<br />

</p>]]>
<![CDATA[<h3>試してみた環境</h3>

<ul>
	<li>Mac 10.8.5</li>
	<li>MAMP</li>
	<li>baserCMSでやってみた</li>
</ul>

<h3>導入手順</h3>

<p>
黒い画面開いてターミナルで行います。
</p>

<ul>
	<li>$ gem install mailcatcher</li>
	<li>※エラーが出るなど環境によっては「sudo」つける</li>
	<li>$ mailcatcher</li>
</ul>

<p>
これだけでインストール終わり。<br />
次の「mailcatcher」を実行することで起動します。<br />
起動したらブラウザで http://localhost:1080 で画面出ます。
</p>

<h4>php.ini を変更する</h4>

<p>
phpの設定ファイルを変更します。<br />
利用中の環境に依るので以下はサンプル。<br />
・例: /MAMP/bin/php/php5.5.3/conf/php.ini<br />
以下のように書換えます。
</p>

<pre><code>;sendmail_path =
　　↓↓↓
sendmail_path = /usr/bin/env catchmail
</code></pre>

<p>
これで準備完了。
</p>

<p>
テスト用のphpファイルひとつ作ってアクセス。<br />
※テスト用にはこの辺が参考になります。<br />
<a href="http://qiita.com/shuntaro_tamura/items/c0ef05cb4d4e22e78297">PHPでメールを送る - Qiita</a><br />
着弾確認。<a href="http://localhost:1080/">http://localhost:1080/</a>
</p>

<p>
baserCMSのメールフォームからも送信動作。<br />
管理側にも入力ユーザーのアドレス宛にも飛びました。
</p>


<h3>メールが到着しない場合の解決策1例</h3>

<p>
mailcather までのパスを指定すると良いかもです。<br />
ターミナルで which catchmail と打ち、出て来たパスをsendmail_pathに指定します。
</p>

<pre><code>※例
sendmail_path = /usr/bin/env /opt/local/bin/catchmail</code></pre>

<p>
この辺はダメなときはググってみてください。
</p>

<h3>導入するメリット</h3>

<p>
こんな感じの場面に良いです。
</p>

<ul>
	<li>外部に送信されないので、間違って本番環境への送信を防げる点</li>
	<li>ローカル環境からは外部へメール送信させたくないとき</li>
	<li>送信メールを手軽に表示して確認できる</li>
	<li>存在しないメールアドレスも送信できる</li>
	<li>メールはほぼリアルタイムで表示されリロード不要</li>
	<li>簡単コマンドで起動できる</li>
</ul>


<h4>あとがき</h4>

<p>
macの再起動時には自動で起動されてるワケではないので、コマンドで「mailcatcher」実行してから使いましょう。<br />
mac起動時の自動起動もできるので、この辺見てやってみると良いです。<br />
■ <a href="http://qiita.com/kagerou_ts/items/2606703e70c5eb18fb37">Mac OSXで起動時にスクリプトを実行する方法 - Qiita</a>
</p>

<p>
こんな情報もありました。<br />
■ <a href="http://nskw-style.com/2015/env/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%A7%E3%81%AE%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E7%A2%BA%E8%AA%8D%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8Bmailcatcher%E3%82%92mac%E3%81%A7%E4%BD%BF%E3%81%86.html">ローカルでのメールの確認ができるMailCatcherをMacで使う - Shinichi Nishikawa&apos;s</a>
</p>

<p>
<a href="http://mailcatcher.me/">MailCatcher</a> に感謝(-∧- )<br />

</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2020/12/07080327.php">BurgerEditorで作った記事内容を簡単に2箇所に分割表示して楽しむ手法</a></li>

<li><a href="http://www.materializing.net/archives/2015/02/14163530.php">baserCMSで、プラグインを用意せずにイベント処理を発動させる方法例</a></li>

<li><a href="http://www.materializing.net/archives/2011/10/03112051.php">baserCMSのヘルパーを覗く旅：TextExヘルパー</a></li>

<li><a href="http://www.materializing.net/archives/2010/02/06150141.php">国産オープンソース「BaserCMS」をXAMPPでお試ししてみた。</a></li>

<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>baserCMS用「テキストリプレイス プラグイン」作りました。</title>
    <link href="http://www.materializing.net/archives/2015/10/19163459.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=602" rel="service.edit" title="baserCMS用「テキストリプレイス プラグイン」作りました。" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2015://1.602</id>
    
    <published>2015-10-19T07:34:59Z</published>
    <updated>2019-12-31T10:57:50Z</updated>
    
    <summary> さてさて、今回のbaserCMSスキマ産業活動は、コンテンツのメンテナンスに目を向けてみました。 作ってみたのは「テキストリプレイス プラグイン」です。 きっかけは、サイトリニューアルとか更新メンテナンスの際に、ある記事のURLや文字列が変わった場合に、1記...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
さてさて、今回のbaserCMSスキマ産業活動は、コンテンツのメンテナンスに目を向けてみました。<br />
作ってみたのは「テキストリプレイス プラグイン」です。<br />
きっかけは、サイトリニューアルとか更新メンテナンスの際に、ある記事のURLや文字列が変わった場合に、1記事ずつチェックして更新する、という手間を省いて欲しかったところです。
</p>


<h3>テキストリプレイス プラグイン</h3>

<p>
<strong>テキストリプレイスプラグインは、任意のキーワードを一括で変更できるbaserCMS専用のプラグインです。</strong>。。。です。<br />
ファイルのダウンロードは、いつものbaserマーケットよりどうぞ。<br />
<big>■ <a href="https://market.basercms.net/products/detail.php?product_id=87">テキストリプレイス | baserマーケット</a></big>
</p>

<p>
開発状況とかちょろっと見てみたいときは github どうぞ。<br />
<big>■ <a href="https://github.com/materializing/TextReplace">https://github.com/materializing/TextReplace</a></big>
</p>


<ul>
	<li><a href="http://basercms.net/">baserCMS本体はこちら</a>。</li>
<li><a href="http://wiki.basercms.net/">baserCMS公式wikiはこちら</a></li>
	<li><a href="http://doc.basercms.net/">baserCMSのユーザーマニュアルはこちら</a></li>
</ul>]]>
<![CDATA[<h3>動作環境</h3>

<ul>
	<li>baserCMS 3.0.6〜3.0.8</li>
	<li>PHP 5.5.3</li>
	<li>MySQL 5.5.33</li>
</ul>


<h3>できることとか</h3>

<ul>
	<li>検索語句を指定し、「検索置換対象の指定」で指定したデータを検索することができます。</li>
	<li>検索語句を指定し、置換後の指定し、「検索置換対象の指定」で指定したデータを検索＆置換した結果を確認できます。</li>
	<li>検索語句を指定し、置換後の指定し、「検索置換対象の指定」で指定したデータを検索＆置換した結果の中から、置換＆保存する対象を選択して実行できます。</li>
	<li>置換＆保存したログは「テキスト置換ログ」で確認できます。
	<ul><li>ログを削除できるのはシステム管理グループのユーザーです。</li></ul>
</li>
</ul>


<h3>インストール（使い方）</h3>

<ol>
	<li>圧縮ファイルをDLして解凍したら、/app/Plugin/TextReplace に配置します。</li>
	<li>baserCMS管理システムに入ります。</li>
	<li>プラグイン管理に入ります。</li>
	<li>テキストリプレイス プラグインを有効化します。</li>
	<li>システムナビにある「テキスト置換」画面に入ります。</li>
</ol>


<h3>テキストリプレイス プラグイン についてのご意見・問合せ先</h3>

<p>
以下にて気軽にどうぞー ･ω･<br />
バグ報告、機能要望、感想とかなんでも受け付けてマス。
</p>

<ul>
	<li><a href="http://twitter.com/arata">Twitter＠arata</a></li>
	<li><a href="https://github.com/materializing/TextReplace/issues">githubでのチケット発行</a></li>
</ul>


<h3>作成裏話(表に出しちゃってるけど裏話)</h3>

<p>
アイデア自体は以前から温めていて、それをようやくカタチにすることができました。<br />
1年と少し前に、<br />
「baserCMSのシステム上で、特定の文字列を検索・一括置換できる機能はありませんか？」<br />
と質問をくださったiさん。ようやくできました！
</p>

<p>
＞ そのときの心情「<strong>うぉぉおああぁぁ〜！？</strong>」<br />
＞ いまの心情「<strong>(･∀･)</strong>」
</p>

<p>
作っているときはけっこう山あり谷ありでした。<br />
文字列を指定して検索・置換することを、置換後の文字列指定を前提にしちゃってたり（空文字化＝削除できないっす）、ログをテキストファイルに取るようにはしてみたものの、なんかしっくりこなかったり。<br />
内部の処理においても、これまでになかった新しい試みが必要だったので、トライ＆エラーの連続でした。
</p>

<p>
もうちょっとやっていきたいこともあるので、これからもちょいちょいメンテしていきますよ。
</p>

<h4>あとがき</h4>

<p>
このプラグインの制作に当り、<a href="https://twitter.com/Garyuten">俳人 我流(@Garyuten)</a>さんに多大なる助言・アドバイスをいただきました。<br />
本当にありがとうございました_(．．)_
</p>

<p>
ちょっと膝が折れそうになっていたあの機能この機能は、我流さんからの言葉がなければ、次のフェーズに持ち越されっぱなしになっていました。<br />
骨は折れましたが、折れた分の価値ある良い機会をくださってありがとうございました_(．．)_<br />

</p>]]>
<![CDATA[<p><strong>開発・公開しているbaserCMSプラグインの継続メンテのご支援・応援お願いします_(．．)_</strong></p>
<div class="recommend">
<ul>
<li><a href="https://github.com/sponsors/materializing">Sponsor @materializing on GitHub Sponsors</a></li>
<li><a href="https://www.amazon.jp/hz/wishlist/ls/1RW7IRZW6IB5M?ref_=wl_share">Amazon 欲しいものリスト</a></li>
</ul>
</div>]]>

<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2018/05/03082731.php">baserCMS3系用 TextReplace1.2.2 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2016/03/21163437.php">baserCMS用「コーラブルエディターテンプレート プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/09/07212552.php">baserCMS用「ポピュラーブログポスト プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/08/22045721.php">baserCMS用「ユーザーツールバースウィッチ プラグイン」作りました。</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>baserCMSで新しくVagrant環境作る時に出た「Unknown configuration section 'omnibus'.」</title>
    <link href="http://www.materializing.net/archives/2015/09/26192421.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=601" rel="service.edit" title="baserCMSで新しくVagrant環境作る時に出た「Unknown configuration section 'omnibus'.」" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2015://1.601</id>
    
    <published>2015-09-26T10:24:21Z</published>
    <updated>2015-09-26T11:08:41Z</updated>
    
    <summary> どうもです。 本日は baserCMS勉強会Vol.14＠福岡でした。 http://www.zusaar.com/event/7087003 おいしかったです(´ρ`) さて、去る09/25、新しいbaserCMS 3.0.8 がリリースされました。 ■ ...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
どうもです。<br />
本日は baserCMS勉強会Vol.14＠福岡でした。<br />
<a href="http://www.zusaar.com/event/7087003">http://www.zusaar.com/event/7087003</a>
</p>

<p>
おいしかったです(´ρ`)
</p>

<p>
さて、去る09/25、新しいbaserCMS 3.0.8 がリリースされました。<br />
■ <a href="http://basercms.net/news/archives/312">baserCMS 3.0.8 がリリースされました | baser CMS - 国産オープンソース！フリー（無料）で『コーポレートサイトにちょうどいいCMS』</a><br />
リリースノート見てみると、Vagrant 周り、認証プレフィックス周り、スマホ周り、めったに起きないだろうけど偶然見つかって安心度合いが格段に高くなったりしてますね。<br />
あと。。。<br />
<small>『テストの拡充』</small><br />
『テストの拡充』<br />
<big>『テストの拡充』！！！</big><br />

</p>]]>
<![CDATA[<h3>新しくなったんで新しいVagrant環境作った</h3>

<p>
素の動作を見るときに使ってるVagrant環境を、バージョンも上がったし作り直すことにしました。<br />
Vagrant で baserCMS はとっても簡単です。
</p>

<pre><code>■ 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
■ そのままインストールします。
■ おわり
</code></pre>

<h4>「Unknown configuration section 'omnibus'.」</h4>

いつもの「vagrant up」したら
<pre><code>Unknown configuration section 'omnibus'.</code></pre>
で止まって起動できませんでした。

そんなときは、
<pre><code>$ vagrant plugin install vagrant-omnibus</code></pre>

<p>
して omnibus プラグインを入れると良いです。<br />
以下のようになります。
</p>

<pre><code>$ vagrant plugin install vagrant-omnibus
Installing the 'vagrant-omnibus' plugin. This can take a few minutes...
Installed the plugin 'vagrant-omnibus (1.4.1)'!
</code></pre>

<p>
<br />
おしまいです。
</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2020/12/07080327.php">BurgerEditorで作った記事内容を簡単に2箇所に分割表示して楽しむ手法</a></li>

<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2019/12/09075504.php">baserCMS4系でフォームの受信一覧表示をカスタマイズする</a></li>

<li><a href="http://www.materializing.net/archives/2019/09/21172927.php">簡単に独自の設定画面を追加作成できるbaserCMSプラグイン「AddConfig」さわってみた</a></li>

<li><a href="http://www.materializing.net/archives/2018/05/03082731.php">baserCMS3系用 TextReplace1.2.2 リリース</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>baserCMS用「ポピュラーブログポスト プラグイン」作りました。</title>
    <link href="http://www.materializing.net/archives/2015/09/07212552.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=600" rel="service.edit" title="baserCMS用「ポピュラーブログポスト プラグイン」作りました。" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2015://1.600</id>
    
    <published>2015-09-07T12:25:52Z</published>
    <updated>2016-05-04T13:40:39Z</updated>
    
    <summary> 9月でございます丶(･ω･)ノ さて、今月のbaserCMSスキマ産業活動は、baserCMSのコア・プラグインに当たるブログ機能に目を向けてみました。 作ってみたのは「ポピュラーブログポスト プラグイン」です。 きっかけは facebook で「だれか作っ...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
9月でございます丶(･ω･)ノ<br />
さて、今月のbaserCMSスキマ産業活動は、baserCMSのコア・プラグインに当たるブログ機能に目を向けてみました。<br />
作ってみたのは「ポピュラーブログポスト プラグイン」です。<br />
きっかけは facebook で「だれか作ってくれないかなぁ？」とのコメントを見たので。
</p>


<h3>ポピュラーブログポスト プラグイン</h3>

<p>
<strong>ポピュラーブログポストプラグインは、ブログ記事のアクセス数を記録して、人気の高い記事（閲覧数の多い記事）を表示できるbaserCMS専用のプラグインです。</strong>。。。です。<br />
ファイルのダウンロードは、いつものbaserマーケットよりどうぞ。<br />
<big>■ <a href="https://market.basercms.net/products/detail.php?product_id=88">ポピュラーブログポスト | baserマーケット</a></big>
</p>

<p>
開発状況とかちょろっと見てみたいときは github どうぞ。<br />
<big>■ <a href="https://github.com/materializing/PopularBlogPost">https://github.com/materializing/PopularBlogPost</a></big>
</p>


<ul>
	<li><a href="http://basercms.net/">baserCMS本体はこちら</a>。</li>
<li><a href="http://wiki.basercms.net/">baserCMS公式wikiはこちら</a></li>
	<li><a href="http://doc.basercms.net/">baserCMSのユーザーマニュアルはこちら</a></li>
</ul>]]>
<![CDATA[<h3>動作環境</h3>

<ul>
	<li>baserCMS 3.0.7</li>
	<li>PHP 5.5.3</li>
	<li>MySQL 5.5.33</li>
</ul>


<h3>できることとか</h3>

<ul>
	<li>公開側ブログ記事詳細へのアクセス数を記録できます。</li>
	<li>公開側で、ウィジェットを利用して、アクセスランキングを表示できます。</li>
	<li>管理システム側で、記事別のアクセス数を確認できます。
<ul>
	<li>ブログ別、期間を指定して検索できます。</li>
</ul>
</li>
	<li>ブログ別に、アクセス数記録の有効・無効を設定できます。</li>
	<li>ブログ別に、管理システムにログイン中はカウントしないようにすることができます。</li>
	<li>アクセス記録を全削除（記事単位での個別削除も可）し、データのリセットができます。</li>
</ul>


<h3>インストール（使い方）</h3>

<ol>
	<li>圧縮ファイルをDLして解凍したら、/app/Plugin/PopularBlogPost に配置します。</li>
	<li>baserCMS管理システムに入ります。</li>
	<li>プラグイン管理に入ります。</li>
	<li>ポピュラーブログポスト プラグインを有効化します。</li>
	<li>ポピュラーブログポスト設定一覧画面に入ります。</li>
	<li>利用するブログを追加し、有効化を行ないます。</li>
<li>ウィジェット管理に入り、追加表示されているランキング表示用ウィジェットを設定します。</li>
</ol>


<h3>ポピュラーブログポスト プラグイン についてのご意見・問合せ先</h3>

<p>
以下にて気軽にどうぞー ･ω･<br />
バグ報告、機能要望、感想とかなんでも受け付けてマス。
</p>

<ul>
	<li><a href="http://twitter.com/arata">Twitter＠arata</a></li>
	<li><a href="https://github.com/materializing/PopularBlogPost/issues">githubでのチケット発行</a></li>
</ul>


<h3>作成裏話(表に出しちゃってるけど裏話)</h3>

<p>
プラグイン側からのウィジェット追加は久しぶりでした。<br />
この辺の作り方を紹介したいなぁ、と思いました。<br />
といっても、実はbaserCMSはウィジェットの追加が簡単にできるような仕組みは既に出来ていて、ザックリこんな手順で可能。
</p>

<ol>
	<li>管理側への追加: /View/Elements/admin/widgets/your_widget_file.php</li>
	<li>公開側で利用されるViewの追加: /View/Elements/widgets/your_widget_file.php</li>
</ol>

<p>
詳細はその内Qiitaにでも書こうかな。テマコンもあるし。<br />
■ <a href="http://qiita.com/tags/basercms">http://qiita.com/tags/basercms</a><br />
■ <a href="http://contest.basercms.net/">http://contest.basercms.net/</a>
</p>

<h4>あとがき</h4>

<p>
9〜10月であと2つくらいプラグイン出すかもしれませんね。
</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2018/05/03082731.php">baserCMS3系用 TextReplace1.2.2 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2016/03/21163437.php">baserCMS用「コーラブルエディターテンプレート プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/10/19163459.php">baserCMS用「テキストリプレイス プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/08/22045721.php">baserCMS用「ユーザーツールバースウィッチ プラグイン」作りました。</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>「Cakebox」でCakePHP3のお試し環境がすぐできる件</title>
    <link href="http://www.materializing.net/archives/2015/08/30183009.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=599" rel="service.edit" title="「Cakebox」でCakePHP3のお試し環境がすぐできる件" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2015://1.599</id>
    
    <published>2015-08-30T09:30:09Z</published>
    <updated>2015-08-30T09:31:15Z</updated>
    
    <summary><![CDATA[きっかけはこちらのTweet。 @arata ぜひぜひ！CakeBoxで環境構築ができるので、何かと便利っぽいです。『っぽい』というのは、何故か私がDBのマイグレーションに失敗してしまい、一部の恩恵が得られなかったからです。。。&mdash; 馬庭吾一 (@g...]]></summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>きっかけはこちらのTweet。</p>

<blockquote class="twitter-tweet" data-conversation="none" lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/arata">@arata</a> ぜひぜひ！CakeBoxで環境構築ができるので、何かと便利っぽいです。『っぽい』というのは、何故か私がDBのマイグレーションに失敗してしまい、一部の恩恵が得られなかったからです。。。</p>&mdash; 馬庭吾一 (@goichi_m) <a href="https://twitter.com/goichi_m/status/637643967010488321">2015, 8月 29</a></blockquote>

<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<p>Cakeboxとはなんぞ？ということで見てみました。</p>

<ul>
    <li>Cakebox: <a href="https://github.com/alt3/cakebox">alt3/cakebox</a></li>
<li>Cakebox Document: <a href="https://cakebox.readthedocs.org/en/latest/">Cakebox</a>
</ul>

<p>Virtualbox と Vagrant 使って、Cake3の動作環境をすぐに立ち上げることができるツールです。</p>
]]>
<![CDATA[<p>README.md 読んでやってみます。</p>

<h3>Vagrant up まで</h3>

<pre><code>$ mkdir cakebox
$ cd cakebox/
$ git clone git@github.com:alt3/cakebox.git ./
$ cp Cakebox.yaml.default Cakebox.yaml
$ vagrant up</code></pre>

<p>これで起動完了です。 <br />
サイトアクセスとsshログインは以下。</p>

<ul>
<li>Login to your Virtual Machine using the vagrant ssh command</li>
<li>Login to your Cakebox Dashboard by browsing to http://10.33.10.10
<ul>
<li>ログイン画面がでますが、ID、パスワードは不要です。</li>
</ul></li>
</ul>

<h3>ブログチュートリアル用のアプリケーションを作成する</h3>

<p>今回の目的は、Cake3 のブログチュートリアルができる環境を作ることなので、続けて「Create your first website」を見てみます。
<a href="http://cakebox.readthedocs.org/en/latest/tutorials/creating-your-first-website/">http://cakebox.readthedocs.org/en/latest/tutorials/creating-your-first-website/</a></p>

<pre><code>$ vagrant ssh
$ cakebox application add blog-tutorial.app</code></pre>

<p>これやったあと、先ほどのダッシュボードへアクセスすると、アプリケーションがひとつ追加されてます丶(･ω･)ノ</p>

<h4>hosts ファイルへの追記</h4>

<p>Remember to update your hosts file with: 10.33.10.10 blog-tutorial.app
というワケで hosts へ追記します。</p>

<pre><code>10.33.10.10    blog-tutorial.app</code></pre>

<p>「確認のため ping 打ってみて」と書いてあるのでテストん。</p>

<pre><code>$ ping blog-tutolia.app</code></pre>

<p>返って来たらOKですね。</p>

<h3>作成したブログチュートリアルへアクセス</h3>

<p>http://blog-tutorial.app/ でアクセスOK。 <br />
Cakeのスタート画面が出て来ます。 <br />
Dashboard にある「Applications」の「blog-tutorial」からも行けます。</p>

<h3>ファイルの編集</h3>

<p>cakebox の共有ファイルは以下です。 <br />
YOUR_CAKEBOX/Apps/blog-tutorial.app <br />
ファインダー上からは、右クリックして「パッケージの内容を表示」から開けます。 <br />
表示されたパッケージの内容のフォルダのパスを、任意のエディタのプロジェクトに登録すると良いですね。</p>

<h4>あとがき</h4>

<p>Cake3を見てみたかったので、おもしろいツールと併せて体験できて良かったです。</p>

<p>それからもひとつ気になったのはこちら。 <br />
■ <a href="https://readthedocs.org/">トップページ | Read the Docs</a> <br />
Cakebox では、この「Read the Docs」というサービスを用いてドキュメントが管理されてるようです。 <br />
github、bitbucket等のリポジトリとも連携できて、ドキュメント作成に便利そうです。</p>
]]>



<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2015/01/11084207.php">KeyValueBehavior[cakephp-tools]のご紹介</a></li>

<li><a href="http://www.materializing.net/archives/2014/01/12162127.php">baserCMSのプラグイン作り（イベント処理）を楽しんでみましょー。</a></li>

<li><a href="http://www.materializing.net/archives/2013/12/08072221.php">baserCMS3を扱う上でのちょっとしたポイント</a></li>

<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2019/09/21172927.php">簡単に独自の設定画面を追加作成できるbaserCMSプラグイン「AddConfig」さわってみた</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>baserCMS用「ユーザーツールバースウィッチ プラグイン」作りました。</title>
    <link href="http://www.materializing.net/archives/2015/08/22045721.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=598" rel="service.edit" title="baserCMS用「ユーザーツールバースウィッチ プラグイン」作りました。" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2015://1.598</id>
    
    <published>2015-08-21T19:57:21Z</published>
    <updated>2015-08-21T19:57:31Z</updated>
    
    <summary> 今回のbaserCMSスキマ産業活動は、ツールバーの機能にちょっと目を向けてみました。 作ってみたのは「ユーザーツールバースウィッチ プラグイン」です。 きっかけはフォーラム。 ユーザーツールバースウィッチ プラグイン ユーザーツールバースウィッチ プラグイ...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
今回のbaserCMSスキマ産業活動は、ツールバーの機能にちょっと目を向けてみました。<br />
作ってみたのは「ユーザーツールバースウィッチ プラグイン」です。<br />
きっかけは<a href="http://forum.basercms.net/modules/newbb/viewtopic.php?topic_id=1828&forum=9">フォーラム</a>。
</p>


<h3>ユーザーツールバースウィッチ プラグイン</h3>

<p>
<strong>ユーザーツールバースウィッチ プラグインは、ユーザー別にツールバー表示・非表示を選択し、設定できるbaserCMS専用のプラグインです。</strong>。。。です。
</p>

<p>
<big>■ <a href="https://market.basercms.net/products/detail.php?product_id=83">ユーザーツールバースウィッチ | baserマーケット</a></big><br />
<big>■ <a href="https://github.com/materializing/UserToolbarSwitch">https://github.com/materializing/UserToolbarSwitch</a></big>
</p>

<p>
ファイルのダウンロードは、いつものbaserマーケット or githubよりどうぞ。
</p>

<ul>
	<li><a href="http://basercms.net/">baserCMS本体はこちら</a>。</li>
<li><a href="http://wiki.basercms.net/">baserCMS公式wikiはこちら</a></li>
	<li><a href="http://doc.basercms.net/">baserCMSのユーザーマニュアルはこちら</a></li>
</ul>]]>
<![CDATA[<h3>動作環境</h3>

<ul>
	<li>baserCMS 3.0.7</li>
	<li>PHP 5.5.3</li>
	<li>MySQL 5.5.33</li>
</ul>


<h3>インストール（使い方）</h3>

<ol>
	<li>圧縮ファイルをDLして解凍したら、/app/Plugin/UserToolbarSwitch に配置します。</li>
	<li>baserCMS管理システムに入ります。</li>
	<li>プラグイン管理に入ります。</li>
	<li>ユーザーツールバースウィッチ プラグインを有効化します。</li>
	<li>ユーザーアカウント設定編集画面に入ります。</li>
	<li>「ツールバー表示状態」が追加表示されてますので、ユーザー別にツールバー表示状態を設定できます。</li>
</ol>

<a data-flickr-embed="true" data-header="false" data-footer="false" data-context="false"  href="https://www.flickr.com/photos/materializing/20757798692/in/dateposted-public/" title="20150822_sc_admin_users_edit"><img src="https://farm6.staticflickr.com/5807/20757798692_c48ffaec07.jpg" width="500" height="230" alt="20150822_sc_admin_users_edit"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>


<h3>ユーザーツールバースウィッチ プラグイン についてのご意見・問合せ先</h3>

<p>
以下にて気軽にどうぞー ･ω･<br />
バグ報告、機能要望、感想とかなんでも受け付けてマス。
</p>

<ul>
	<li><a href="http://twitter.com/arata">Twitter＠arata</a></li>
	<li><a href="https://github.com/materializing/UserToolbarSwitch/issues">githubでのチケット発行</a></li>
</ul>


<h3>作成裏話(表に出しちゃってるけど裏話)</h3>

<p>
公開側での処理と管理側での処理に大きく異なる箇所があって、そこをどうするか？が悩んだところ。
</p>


<h4>あとがき</h4>

<p>
baserCMSへ応援お願いします_(．．)_<br />
■ <a href="http://basercms.net/donate">baserCMS寄付受付</a><br />

</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2018/05/03082731.php">baserCMS3系用 TextReplace1.2.2 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2016/03/21163437.php">baserCMS用「コーラブルエディターテンプレート プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/10/19163459.php">baserCMS用「テキストリプレイス プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/09/07212552.php">baserCMS用「ポピュラーブログポスト プラグイン」作りました。</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>baserCMS用「メールサインスウィッチ プラグイン」作りました。</title>
    <link href="http://www.materializing.net/archives/2015/04/27000011.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=597" rel="service.edit" title="baserCMS用「メールサインスウィッチ プラグイン」作りました。" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2015://1.597</id>
    
    <published>2015-04-26T15:00:11Z</published>
    <updated>2019-12-31T10:58:34Z</updated>
    
    <summary> 今回のbaserCMSスキマ産業活動は、メールフォームの署名機能にちょっと目を向けてみました。 作ってみたのは「メールサインスウィッチ プラグイン」です。 きっかけはこちらのTweet。 baserCMSのメールフォーム、超絶使いやすいんだけど署名トラップに...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
今回のbaserCMSスキマ産業活動は、メールフォームの署名機能にちょっと目を向けてみました。<br />
作ってみたのは「メールサインスウィッチ プラグイン」です。<br />
きっかけはこちらのTweet。
</p>

<blockquote class="twitter-tweet" lang="ja"><p>baserCMSのメールフォーム、超絶使いやすいんだけど署名トラップにまたハマった。&#10;サイトの設定が反映されない！ってコアファイルの中身まで触ってたけど、メールプラグイン設定の中で署名設定できるのを毎回忘れてしまう。&#10;（だいたいテスト送信してクライアントさんから指摘されて気づく）</p>&mdash; 俳人 我流 (@Garyuten) <a href="https://twitter.com/Garyuten/status/590685430296752128">2015, 4月 22</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<p>
そういえばbaserCMSの署名設定は、メールフォームの設定画面とは別に準備されているなぁ、と。<br />
その問題解決として、メールフォーム個別の設定画面内で署名が設定できるようにしてみたらどうだろう？と思ったんで作ってみました。
</p>

<p>
メールフォーム別に備えることになるので、署名もフォーム毎に持てるカタチ。<br />
複数のメールフォームを設置して、Aフォームでは日本語の署名、Bフォームでは英語の署名とか、フォーム毎に担当部署が異なるので、署名内容を変えておきたい、という場面が挙げられます。
</p>


<h3>メールサインスウィッチ プラグイン</h3>

<p>
<strong>メールサインスウィッチ プラグインは、メールフォーム別に利用する署名を設定できるbaserCMS専用のプラグインです。</strong>。。。です。
</p>

<p>
<big>■ <a href="https://github.com/materializing/MailSignSwitch">https://github.com/materializing/MailSignSwitch</a></big><br />
■ <a href="https://github.com/materializing/MailSignSwitch/issues">プロジェクト管理</a>
</p>

<p>
ファイルのダウンロードはいつものgithubよりどうぞ。
</p>

<ul>
	<li><a href="http://basercms.net/">baserCMS本体はこちら</a>。</li>
<li><a href="http://wiki.basercms.net/">baserCMS公式wikiはこちら</a></li>
	<li><a href="http://doc.basercms.net/">baserCMSのユーザーマニュアルはこちら</a></li>
</ul>]]>
<![CDATA[<h3>動作環境</h3>

<ul>
	<li>baserCMS 3.0.7</li>
	<li>PHP 5.4.19</li>
	<li>MySQL 5.5.33</li>
</ul>


<h3>インストール（使い方）</h3>

<ol>
	<li>圧縮ファイルをDLして解凍したら、/app/Plugin/MailSignSwitch に配置します。</li>
	<li>baserCMS管理システムに入ります。</li>
	<li>プラグイン管理に入ります。</li>
	<li>メールサインスウィッチ プラグインを有効化します。</li>
	<li>メールフォーム設定編集画面に入ります。</li>
	<li>画面下部に「署名設定」が追加表示されてますので、メールフォーム別に署名内容を設定できます。</li>
</ol>

<p>
<a rel="lightbox" href="https://farm8.staticflickr.com/7714/17276797645_3de020cd4e_o.png" title="sc_admin_user_edit by nai arata, on Flickr"><img src="https://farm8.staticflickr.com/7714/17276797645_c327b15535.jpg" width="500" height="261" alt="sc_admin_mail_contents_edit"></a>
</p>

<h4>その他の動作</h4>

<ul>
	<li>プラグインインストール時は、メールフォーム基本設定で設定されている署名内容が、メールフォーム個別に設定されます。</li>
	<li>メールフォーム基本設定で設定されている署名内容が、各入力欄の placeholder として表示されます。</li>
</ul>


<h3>メールサインスウィッチ プラグイン についてのご意見・問合せ先</h3>

<p>
以下にて気軽にどうぞー ･ω･<br />
バグ報告、機能要望、感想とかなんでも受け付けてマス。
</p>

<ul>
	<li><a href="http://twitter.com/arata">Twitter＠arata</a></li>
	<li><a href="https://github.com/materializing/MailSignSwitch/issues">githubでのチケット発行</a></li>
</ul>


<h3>作成裏話(表に出しちゃってるけど裏話)</h3>

<p>
baserCMSのイベント処理に、dispatchAfterForm というイベントがあります。<br />
これは、管理側の入力・編集画面内のフォームで、入力欄の最後に処理を差し込むことができるイベントです。<br />
今回は、このイベント処理を用いてプラグイン側に用意しているエレメントを表示させてみました。
</p>

<p>
Form.afterForm と Form.afterOptionForm の2種類があって、Optionとついてる側は、画面内の「オプション」をクリックして表示される範囲側の最後に当たる作りとなってるようですね。
</p>

<p>
それから、ModelEventの処理は、最近 <a href="https://twitter.com/gondoh_jp">＠gondoh_jp</a>よりアドバイスを受け内容を早速反映したのです。
</p>


<h4>あとがき</h4>

<p>
MailConfigのテーブルを覗いてみてわかったことは、署名設定は1レコードに収められてること。<br />
このテーブルに外部キー備えたら、フォーム別の署名はできるのです。<br />
が、それはシンプルなbaserCMSの考え方とは反するのかもですね。わかんないけど。<br />

</p>]]>
<![CDATA[<p><strong>開発・公開しているbaserCMSプラグインの継続メンテのご支援・応援お願いします_(．．)_</strong></p>
<div class="recommend">
<ul>
<li><a href="https://github.com/sponsors/materializing">Sponsor @materializing on GitHub Sponsors</a></li>
<li><a href="https://www.amazon.jp/hz/wishlist/ls/1RW7IRZW6IB5M?ref_=wl_share">Amazon 欲しいものリスト</a></li>
</ul>
</div>]]>

<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2018/05/03082731.php">baserCMS3系用 TextReplace1.2.2 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2016/03/21163437.php">baserCMS用「コーラブルエディターテンプレート プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/10/19163459.php">baserCMS用「テキストリプレイス プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/09/07212552.php">baserCMS用「ポピュラーブログポスト プラグイン」作りました。</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>gulpを利用して、baserCMSのテーマ制作やプラグイン開発時にブラウザをオートリロードする</title>
    <link href="http://www.materializing.net/archives/2015/03/22190508.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=596" rel="service.edit" title="gulpを利用して、baserCMSのテーマ制作やプラグイン開発時にブラウザをオートリロードする" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2015://1.596</id>
    
    <published>2015-03-22T10:05:08Z</published>
    <updated>2015-03-23T15:34:12Z</updated>
    
    <summary> gulpは、フロントエンドのタスクを自動化できるツールです。 その gulp には、複数のブラウザ動作を同時に確認できる browser-sync プラグインがあります。 そして、browser-sync にはブラウザのオートリロード機能があるので、これを利...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
gulpは、フロントエンドのタスクを自動化できるツールです。<br />
その gulp には、複数のブラウザ動作を同時に確認できる browser-sync プラグインがあります。<br />
そして、browser-sync にはブラウザのオートリロード機能があるので、これを利用して、baserCMSのテーマやプラグインを作っている最中のリロードの省エネやってみました。
</p>

<h3>やりたいこと</h3>

<ul>
	<li>テーマ作ってる最中のリロードを省きたい</li>
	<li>複数のブラウザでまとめて確認したい</li>
	<li>制作時間の短縮図りたい</li>
</ul>
]]>
<![CDATA[<h3>試してみた環境</h3>

<ul>
	<li>サーバ: MAMP</li>
	<li>PHP 5.4.19</li>
	<li>baserCMS 3.1.0-dev（ローカルで動作するなら何でも良い）</li>
</ul>
<ul>
	<li>Node.js v0.12.0</li>
	<li>npm: 2.7.3</li>
	<li>gulp: CLI version 3.8.11</li>
	<li>browser-sync: 2.4.0</li>
</ul>


<h3>導入</h3>
Node.js と gulp のインストールの詳細については省略。
この辺とか見てみると良いです。

<ul>
	<li><a href="http://www.atmarkit.co.jp/ait/articles/1408/19/news035.html">http://www.atmarkit.co.jp/ait/articles/1408/19/news035.html</a></li>
	<li><a href="http://www.webcreatorbox.com/tech/gulp/">http://www.webcreatorbox.com/tech/gulp/</a></li>
</ul>

<p>
というワケで、MacPorts を利用した場合でのメモ。
</p>


<h4>Node.js と Node Package Manager をインストール</h4>

<pre>$ port install nodejs
$ port install npm</pre>

<p>
※エラー出たら sudo で実行
</p>


<h4>package.json の作成</h4>
プロジェクトフォルダに移動して以下。

<pre>$ npm init</pre>

<p>
package.json が作成されます。<br />
この json ファイルには、gulp の情報が記載されます。<br />
全部 Enter でOK。必要あれば書きます。
</p>


<h4>プロジェクトフォルダに移動して browser-sync と gulp をインストール</h4>

<pre>$ npm install browser-sync gulp --save-dev</pre>

<p>
※ --save-dev で package.json へのgulp情報の追記<br />
　 → 別の環境に package.json 持って行って <strong>$ npm install</strong> と叩くだけで、package.json に記載内容と同一の内容が構築できる<br />
※エラー出たら sudo で実行
</p>

<p>
インストールすると「node_modules」フォルダが作成されます。<br />
この中身に動作に必要なファイル群が入ってます。<br />
バージョン管理からは ignore しとくと良いです。
</p>


<h4>gulpfile.js の作成</h4>

<p>
プロジェクト直下に gulpfile.js を作成して内容記載。<br />
「proxy」のURLにはこのプロジェクトのURLを記載します。
</p>

<pre>'use&nbsp;strict';
var&nbsp;gulp&nbsp;=&nbsp;require('gulp');
var&nbsp;browserSync&nbsp;=&nbsp;require('browser-sync');

gulp.task('browser-sync',&nbsp;function&nbsp;()&nbsp;{
	browserSync({
&nbsp;&nbsp;&nbsp;&nbsp;	proxy:&nbsp;'example.localhost:8888',
&nbsp;&nbsp;&nbsp;&nbsp;	//&nbsp;external&nbsp;指定すると、実行時のアクセスURLがIPアドレス指定側で開くことができる
		open:&nbsp;'external',
	});

	//&nbsp;指定フォルダ以下のファイルを監視
	gulp.watch(['theme/**',&nbsp;'app/Plugin/**'],&nbsp;function()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;	//&nbsp;ファイルに変更があれば同期しているブラウザをリロード
		browserSync.reload();
	});
});

gulp.task('default',&nbsp;['browser-sync']);</pre>

<p>
ここまでで準備完了です。
</p>


<h3>実施: browser-sync を利用したオートリロード</h3>

<p>
プロジェクト直下で以下のコマンド実行。
</p>

<pre>$ gulp</pre>

<ul>
	<li>External のURLでブラウザが起動し、ページが開かれます。</li>
	<li>theme 配下を何か変更して保存。</li>
	<li>ブラウザの開いてるページがオートリロードされたらOKです。</li>
</ul>

<p>
もともとは browser-sync という名の通り、複数のブラウザで同じ動作をさせるためのプラグインです。<br />
Chrome、Firefox、Safari で同じ External のURLを開いていると、それらもまとめてリロードされます。
</p>


<h3>その他のTips</h3>

<p>
■ フロントのビュー確認時<br />
install.php の debug モードを 1 にしてビューキャッシュが利用されない状態にしておくと吉です。
</p>

<p>
■ package.json にURLを指定しておく例
</p>

<pre>"name": "example.localhost:8888",</pre>

<p>
gulpfile.js は以下。
</p>

<pre>'use&nbsp;strict';
var&nbsp;gulp&nbsp;=&nbsp;require('gulp');
var&nbsp;browserSync&nbsp;=&nbsp;require('browser-sync');
var&nbsp;pkg&nbsp;=&nbsp;require('./package.json');	//&nbsp;これが追加

//&nbsp;タスクの設定
gulp.task('browser-sync',&nbsp;function&nbsp;()&nbsp;{
	browserSync({
&nbsp;&nbsp;&nbsp;&nbsp;	proxy:&nbsp;pkg.name,	//&nbsp;package.json&nbsp;の&nbsp;name&nbsp;が設定できる
		open:&nbsp;'external',
	});

	//&nbsp;指定フォルダ以下のファイルを監視
	gulp.watch(['theme/**',&nbsp;'app/Plugin/**'],&nbsp;function()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;	//&nbsp;ファイルに変更があれば同期しているブラウザをリロード
		browserSync.reload();
	});
});

gulp.task('default',&nbsp;['browser-sync']);</pre>


<h4>参考記事</h4>

<ul>
	<li><a href="http://www.browsersync.io/docs/options/#option-open">http://www.browsersync.io/docs/options/#option-open</a></li>
	<li><a href="http://ics-web.jp/lab/archives/3405">http://ics-web.jp/lab/archives/3405</a></li>
	<li><a href="http://qiita.com/katapad/items/00f87c0dd959ecb17ac9">http://qiita.com/katapad/items/00f87c0dd959ecb17ac9</a></li>
	<li><a href="http://whiskers.nukos.kitchen/2014/12/11/gulp-browser-sync.html">http://whiskers.nukos.kitchen/2014/12/11/gulp-browser-sync.html</a></li>
	<li><a href="http://qiita.com/hrfmmymt/items/59aa2d9921f3432aa130">http://qiita.com/hrfmmymt/items/59aa2d9921f3432aa130</a></li>
	<li><a href="http://kojika17.com/2014/06/browser-sync.html">http://kojika17.com/2014/06/browser-sync.html</a></li>
</ul>

<h5>あとがき</h5>

<p>
勝手にリロードしてくれるんでおいしいです丶(･ω･)ノ<br />
これからバシバシ使ってこうと決めました。
</p>

<p>
Qiita載せておきました。<br />
■ <a href="http://qiita.com/materializing/items/fa6c11e17af65783c9f5">http://qiita.com/materializing/items/fa6c11e17af65783c9f5</a>
</p>

<p>
そういやこの方法、自分の環境だとbaserCMSに限らずローカル稼働してる色んなものに使えそう。
</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2012/05/05051904.php">新しくなった baserCMS 2.0.0 をcoreserverにインストールしてみた。</a></li>

<li><a href="http://www.materializing.net/archives/2011/05/29055015.php">Netbeans＋XdebugをBaserCMSで利用する時の注意点</a></li>

<li><a href="http://www.materializing.net/archives/2011/02/04122318.php">BaserCMSでCakePHP DebugKitを使ってみる。</a></li>

<li><a href="http://www.materializing.net/archives/2020/12/07080327.php">BurgerEditorで作った記事内容を簡単に2箇所に分割表示して楽しむ手法</a></li>

<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>GitHubのリポジトリと連携してチャットできる「Gitter」やってみた</title>
    <link href="http://www.materializing.net/archives/2015/03/07160736.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=595" rel="service.edit" title="GitHubのリポジトリと連携してチャットできる「Gitter」やってみた" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2015://1.595</id>
    
    <published>2015-03-07T07:07:36Z</published>
    <updated>2015-03-09T14:22:24Z</updated>
    
    <summary> どーも。arataです(･ω･) 開発者の方、デザイナの方、フロントエンジニアの方、皆さんGitHubつこーてますか？ 巷では、自治体もgithub使い出したってことで話題席巻してますね。←違っ ■ 和歌山県が「Github」で公式アカウント開設－地方自治体...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="WebSERVICE"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
どーも。arataです(･ω･)<br />
開発者の方、デザイナの方、フロントエンジニアの方、皆さんGitHubつこーてますか？<br />
巷では、自治体もgithub使い出したってことで話題席巻してますね。←違っ<br />
■ <a href="http://wakayama.keizai.biz/headline/334/">和歌山県が「Github」で公式アカウント開設－地方自治体初の試み - 和歌山経済新聞</a>
</p>

<p>
ちなみに、GitHubでは自治体向け機能・紹介もしてるみたいです。<br />
■ <a href="http://tech.a-listers.jp/2013/11/10/github-for-goverment/">GitHubが政府・自治体向けの機能・事例紹介ページを公開 | A-Listers</a>
</p>

<p>
そんなGitHubですが、リポジトリと連携してチャットできる「Gitter」というのがヨサゲなのでちょこっと紹介してみます。<br />
■ Gitter: <a href="https://gitter.im/">https://gitter.im/</a>
</p>

<p>
教えてくれたのは<a href="https://twitter.com/cloud10designs">@cloud10designs</a>さんです。<br />

</p>]]>
<![CDATA[<h3>使い方</h3>

GitHubのアカウントがあればすぐできます。
<ol>
	<li>サイトに行く: <a href="https://gitter.im/">https://gitter.im/</a></li>
	<li>「GitHubで登録」ボタンから登録する</li>
</ol>

<p>
ブラウザチャットができます。<br />
Mac、iPhone、Chrome向けのアプリがあり、Android、Linux、Windowsで動作するクライアントがあります。<br />
■ <a href="https://gitter.im/#apps-panel">https://gitter.im/#apps-panel</a>
</p>

<p>
。。。というワケで、MacのクライアントをDLして、自分のリポジトリのroomを開いてみるところを撮ってみました。<br />
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://www.materializing.net/images/20150307_gitter_client.gif" target="_blank"><img alt="20150307_gitter_client.gif" src="http://www.materializing.net/images/20150307_gitter_client.gif" width="600" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span>
</p>

<p>
リポジトリ選択時、Add badge to README on GitHub にチェックしておくと、Gitterから pull request が届きます。<br />
■ 例: <a href="https://github.com/materializing/MyEditor/pull/1">https://github.com/materializing/MyEditor/pull/1</a><br />
READMEにルームへの招待リンク用のバッヂを追加する方法が載ってます。<br />
マージすると README.md に追記されます。
</p>


<h3>チャットでのテキスト</h3>

<p>
Markdown使えます。<br />
■ <a href="https://gitter.zendesk.com/hc/en-us/articles/200176682-Markdown-basics">https://gitter.zendesk.com/hc/en-us/articles/200176682-Markdown-basics</a><br />
ショートカットキーはこんな感じ。<br />
■ <a href="https://gitter.zendesk.com/hc/en-us/articles/201152592-Keyboard-shortcuts">https://gitter.zendesk.com/hc/en-us/articles/201152592-Keyboard-shortcuts</a>
</p>

<p>
チャットの中で「#1」なんてすると、GitHubでの issue リンクになります。
</p>


<h3>現在のサービス形態（2015/03/07 時点）</h3>

<p>
個人枠と法人枠があります。<br />
▼ 個人枠<br />
・パブリックルームは無料・無制限で開設できます。<br />
・プライベートルームは1つ可<br />
個人枠で月2ドルの有料使うとプライベートルームが無制限になります。<br />
気になる履歴は、<br />
・個人枠：無料は2週間の履歴保存。有料で履歴保存無制限<br />
となってるようです。
</p>

<p>
法人枠は月2ドルから利用可。チャット履歴は半年間の保存、となってます。
</p>

<p>
※なんだか英語での表記と日本語での表記が間違ってるようだったので問合せ送っておきました。<br />
※＠2015/03/09 修正受け取っていただけたみたいデス。<br />
<a href="https://github.com/gitterHQ/gitter-translations/commit/b1133eafbfc2b5776f63abf870cc03b867162743">https://github.com/gitterHQ/gitter-translations/commit/b1133eafbfc2b5776f63abf870cc03b867162743</a>
</p>


<h4>あとがき</h4>

<p>
リポジトリ単位でルーム作れるので、話題がブレなくて良さそうですね。
</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2019/09/21172927.php">簡単に独自の設定画面を追加作成できるbaserCMSプラグイン「AddConfig」さわってみた</a></li>

<li><a href="http://www.materializing.net/archives/2018/05/03082731.php">baserCMS3系用 TextReplace1.2.2 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2016/03/21163437.php">baserCMS用「コーラブルエディターテンプレート プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/10/19163459.php">baserCMS用「テキストリプレイス プラグイン」作りました。</a></li>
]]></ul>


    </content>
</entry>

<entry>
    <title>baserCMS用「マイエディター」バージョンアップ。エディタ切替えを簡単にしました。</title>
    <link href="http://www.materializing.net/archives/2015/03/01002240.php" rel="alternate" type="text/html"/>
    <link href="http://www.materializing.net/weblog/mt-atom.cgi/weblog/blog_id=1/entry_id=594" rel="service.edit" title="baserCMS用「マイエディター」バージョンアップ。エディタ切替えを簡単にしました。" type="application/atom+xml"/>
    <id>tag:www.materializing.net,2015://1.594</id>
    
    <published>2015-02-28T15:22:40Z</published>
    <updated>2015-02-28T15:22:53Z</updated>
    
    <summary> 先日出したbaserCMS用プラグインである「マイエディター」バージョンアップしました。 ■ baserCMS用「マイエディター プラグイン」作りました。 	ツールバーに利用中エディタを表示 	ツールバーに表示中のエディタをクリックすると、利用可能エディタを...</summary>
    <author>
        <name>arata</name>
        <uri>http://www.materializing.net/</uri>
    </author>
    
        <category term="cakephp・baserCMS忘備録"/>
    
    <content type="html" xml:base="http://www.materializing.net/" xml:lang="ja">
        <![CDATA[<p>
先日出したbaserCMS用プラグインである「マイエディター」バージョンアップしました。<br />
■ <a href="http://www.materializing.net/archives/2015/02/22044009.php">baserCMS用「マイエディター プラグイン」作りました。</a>
</p>

<ul>
	<li>ツールバーに利用中エディタを表示</li>
	<li>ツールバーに表示中のエディタをクリックすると、利用可能エディタを一覧表示し、選択して切替え可能</li>
</ul>]]>
<![CDATA[<h3>エディター切替え</h3>

<p>
インストール（バージョンアップ）後、こんな風にエディターを選択できるようになります。
</p>

<p>
<a rel="lightbox" href="https://farm9.staticflickr.com/8570/16671231652_258ba00646_o.png" title="sc_my_editor by nai arata, on Flickr"><img src="https://farm9.staticflickr.com/8570/16671231652_f4ac34c7dd.jpg" width="500" height="236" alt="sc_my_editor"></a>
</p>

<p>
選択切替え時は、記事に変更内容があっても引き継がない旨のアラートを出します。<br />
その後、もといた画面へ戻ってきます。<br />
固定ページやブログ記事の記事編集画面を開き、この切替え選択を利用すると、編集欄のエディターが切り替わることを確認できマス。
</p>

<p>
これでユーザー設定画面まで行かなくともエディタの切替ができますよ。
</p>

<h5>あとがき</h5>

<p>
インストール直後、ログインし直さなくてもツールバーに選択欄が表示されるように試行錯誤でした。<br />
で、よくよく考えたら、イベントで引っ掛けようにも、そもそもマイエディターのインストール前では、マイエディター内で作ったイベント自体が引っ掛かるワケないっす。<br />
ということに格闘後気付いて脱力(||| Д )=з<br />

</p>]]>


<h3>関連記事</h3>
<ul><![CDATA[
<li><a href="http://www.materializing.net/archives/2012/05/12084224.php">baserCMS用 facebook LikeButtonプラグイン 1.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2020/01/18181017.php">baserCMS4系用 TextReplace2.0.0 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2018/05/03082731.php">baserCMS3系用 TextReplace1.2.2 リリース</a></li>

<li><a href="http://www.materializing.net/archives/2016/03/21163437.php">baserCMS用「コーラブルエディターテンプレート プラグイン」作りました。</a></li>

<li><a href="http://www.materializing.net/archives/2015/10/19163459.php">baserCMS用「テキストリプレイス プラグイン」作りました。</a></li>
]]></ul>


    </content>
</entry>

</feed>