Pictnotes メインイメージ

お仕事メモ

baserCMS

baserCMSで😄を使いたい場合の最適解

baserCMSで、絵文字を使いたい場合の最適解を考える
 



いきなり正解書いておくと、「DatabaseでPostgreSQLを使う」です。

baserCMSは、SQLite,MySQL,PostgreSQLのDatabaseが選択できますが、(SQLiteは検証してないので今回パスで)
MySQLで絵文字を管理画面等から登録しようとすると上手くいきません。原因は文字コードの設定です。

MySQLで絵文字を取り扱うのであればutf8mb4という文字コードセットを利用する必要があります。

utf8mb4は、4バイトを扱えるutf8、つまりは絵文字が扱えるutf8になります。

現在多くのレンタルサーバ等では、MySQLのデフォルトの文字コードは utf8 であり utf8mb4ではありません。
また、utf8mb4の文字コードセットは、MySQL5.5.3以上での利用となります。

そのためそもそもレンタルサーバで利用する場合は、まずMySQLのバージョンの問題を乗り越え
さらに、utf8で作成されるテーブル等々をutf8mb4にしつつ(baserCMSだとインストーラの改修が必要)、
CakePHPのdatabase.php のDBへのアクセス設定で encoding をutf8mb4に設定してあげる必要があります。

上記でも上手くいくかは、Database自体の設定のからみもあり、確実なものではありません。
本来、きちんとしたいのであれば、「create database 」とか MySQLの設定ファイル my.conf 等から
あわせて見直してあげる必要がでてきます。

そこまでいくと、baserCMSの領域でどうのこうのするのは難しくなりMySQLで絵文字を使えるという
状態を提供するのが困難になっています。

さらに、それを乗り越えても、寿司ビール問題とかはらんでますしね。

という事で、baserCMSで、顔文字使いたければPostgreSQLをつかえという結論です。
PostgreSQLならデフォルトのインストールで、顔文字を使える状態です。これは、PostgreSQLの
UTF8が、デフォルトで4バイト対応だからになります。

ちなみに、「どうしてMySQLのutf8は3バイトなんだ」という事に突っ込みを入れる気はないのであしからず。

文字コードの問題等々は歴史的事情等も複雑にからんでおり、後方互換も考えるとその時々の判断にすごく
苦労したのだと思います。MySQLもPostgreSQLも素晴らしいRDBであり、両方とも愛してくれたらうれしいです。


というわけで、baserCMSも、下記のようなチケットが上がっておりまが、(自分が作ったのですが・・)
MySQLの utf8mb4に対応するか

こちらの実装は当面しない予定です。絵文字使いたい人は、PostgreSQLを使ってくださいね。

  😃 😀 😊 😉 😍 😘 😚 😗 😙
😜 😝 😛 😳 😁 😔 😌 😒 😞 😣 😢
😂 😭 😪 😥 😰 😅 😓 😩 😫 😨 😱
😠 😡 😤 😖 😆 😋 😷 😎 😴 😵 😲
😟 😦 😧 😈 👿 😮 😬 😐 😕 😯 😶
😇 😏 😑 👲 👳 👮 👷 💂 👶 👦 👧
👨 👩 👴 👵 👱 👼 👸 😺 😸 😻 😽
😼 🙀 😿 😹 😾 👹 👺 🙈 🙉 🙊 💀
👽 💩 🔥 🌟 💫 💥 💢 💦 💧 💤
💨 👂 👀 👃 👅 👄 👍 👎 👌 👊
👋 👐 👆 👇 👉 👈 🙌 🙏
👏 💪 🚶 🏃 💃 👫 👪 👬 👭 💏 💑
👯 🙆 🙅 💁 🙋 💆 💇 💅 👰 🙎 🙍
🙇 🎩 👑 👒 👟 👞 👡 👠 👢 👕 👔
👚 👗 🎽 👖 👘 👙 💼 👜 👝 👛 👓
🎀 🌂 💄 💛 💙 💜 💚 💔 💗 💓
💕 💖 💞 💘 💌 💋 💍 💎 👤 👥 💬
👣 💭

 

≫ 続きを読む

baserCMS   2016/12/02   admin

Mailプラグインで戻るボタンが効かない場合の対処法

デザインを入れ替えたら、メール(フォーム)プラグインの戻るボタンが効かなくなった原因をさぐる。



結論から書くと
Elements/mail_form.php

        <?php echo $this->Mailform->submit(' 書き直す ', array('div' => false, 'class' => 'btn-red button form-submit', 'id' => 'BtnMessageBack')) ?>
あたりの
'class' => 'btn-red button form-submit'

form-submitを削除したから。
別のデザインにのせかえたので、classは必要なくなったため削除したのですがこのform-submitのクラスで判別して
submitする前にmodeをJSで切り替えているため、こちらの指定がなくなると戻れなくなります。
なので、消さないこと。

あわせて、
 


も及び
'id' => 'BtnMessageBack'
の指定も残しておかないと動きません。

≫ 続きを読む

baserCMS   2014/03/04   admin

pagination(ページ送り)をカスタマイズする

ブログプラグインとかの、ページネーションのデザインをカスタマイズする。



まず、デフォルトで存在する
/lib/Baser/View/Elements/paginations/
フォルダを
/app/webroot/theme/default(利用しているテーマ名)/Elements/
にコピーします。
paginationsフォルダの中には、
default.php とsimple.php があるとおもうので、どちらかを削除してどちらかを
blog.php とかにリネーム
<?php $this->BcBaser->pagination('blog'); ?>
といった形で、呼び出しをblogにしてあげれば、こちらのthemeの方のpaginationファイルが優先的によばれます。
blog以外でも、適当な名前でOK,要は呼び出し元と呼び出すファイル名があってればOK

/lib/Baser/View/Elements/paginations/test.php
/app/webroot/theme/default(利用しているテーマ名)/Elements/paginations/test.php

<?php $this->BcBaser->pagination('test'); ?>
でよびだすと、後者の
/app/webroot/theme/default(利用しているテーマ名)/Elements/paginations/test.php
が優先的によびだされるので、カスタマイズするときは基本的に、利用テーマのエレメンツフォルダに別名(simple.php, default.php以外)でファイルを作成するのがいいと思う。

あとは、これをガスガスカスタマイズするのですが、spanタグとかが入って上手く行かない場合少々強引な方法ですが、
$blog_paginate = $this->Html->tag('dd', $this->Paginator->numbers(〜〜〜〜〜〜);
$blog_paginate = str_replace('</span>','',$blog_paginate);
$blog_paginate = str_replace('<span>','',$blog_paginate);
echo $blog_paginate ;
とかの形で出力されたものにたいして、文字列置換をかけるのが美しくないけど手っ取り早いと思います。


 

≫ 続きを読む

baserCMS   2014/02/26   admin

contentsName関数の挙動について その2

contentsNameの挙動をちょっとカスタマイズしたので、メモ



http://www.pictnotes.jp/hoge

とかの固定ページ(第一階層しかないページ)で、contentsName 関数をつかうと、返値は Defaultになる。
これを、「hoge」にしたい場合がある。
たとえば、
 

<body id="<?php $baser->contentsName() ?>"> としてると、 <body id="Default">

となるけど、hogeページは、

<body id="hoge">
となって欲しい場合などの時のカスタマイズ。(baserCMS3系)
まず、変えたいbodyタグがあるlayoutファイルで該当のbodyタグ周りを下記のように修正

<?php
$contentsNameDefault = 'Default';
if( isset( $this->request->pass[0] ) ){
    $contentsNameDefault = $this->request->pass[0] ;
}
?>
<body id="<?php $this->BcBaser->contentsName(false, array('underscore'=>true,'default'=>$contentsNameDefault)) ?>">

と書き換える、contentsNameメソッドの引数で、defaultの値を強制的に書き換えてる挙動です。
内部的には、

lib/Baser/View/Helper/BcBaserHelper.php の1351行目あたり、getContentsNameメソッドの

    public function getContentsName($detail = false, $options = array()) {

        $options = array_merge(array(
            'home' => 'Home',
            'default' => 'Default' ,
            'error' => 'Error',
            'underscore' => false), $options);

の'default' => 'Default'の部分を上書きして上げている状態になります。

これでだいたいの挙動は網羅できると思います。
 

≫ 続きを読む

baserCMS   2014/02/26   admin

パンくずリストのカスタマイズ

<ul><li>とかのタグで構成されているパンくずリストを作成する場合
ただし、検証が甘い。



baserCMSで用意されている、$this->BcBaser->crumbs だと、<ul><li>とかのタグで構成されているパンくずリストには対応できません。
でもってちょっとカスタマイズというか改造。

<dl id="breadList">
  <dt><a href="/">HOME</a></dt>
  <dd><a href="/shop/">直営店</a></dd>
  <dd>本店</dd>
</dl>
といったケースのパンくずリストのタグを作りたい場合、 ベースとしては、デフォルトのnada-iconsにのElementsフォルダにある、crumbs.phpを利用してください。

crumbs.phpの
$this->BcBaser->crumbs(' &gt; ', 'ホーム');

$crumb = $this->BcHtml->getCrumbList(array('separator'=>'','firstClass'=> false,'lastClass'=> false), array('text'=> '<dt>HOME</dt>','escape'=> false));
echo $crumb ;
と変更
getCrumbListは、baserCMSの機能でなく、HtmlHelperのメソッドとなります。
http://book.cakephp.org/2.0/ja/core-libraries/helpers/html.html#HtmlHelper::getCrumbList
こちらを使うと、ul,liとかのタグで囲んでくれます。
ただ、これul,liしか対応してないので、今回の dl, dd(dt)は非対応、なのでちょっとカスタマイズ。
BcHtmlHelper.php にgetCrumbListのメソッドをまるっとコピーして、そちらを見るようにしてしまいます。

/**
 * Returns breadcrumbs as a (x)html list
 *
 * This method uses HtmlHelper::tag() to generate list and its elements. Works
 * similar to HtmlHelper::getCrumbs(), so it uses options which every
 * crumb was added with.
 *
 * ### Options
 * - `separator` Separator content to insert in between breadcrumbs, defaults to ''
 * - `firstClass` Class for wrapper tag on the first breadcrumb, defaults to 'first'
 * - `lastClass` Class for wrapper tag on current active page, defaults to 'last'
 * - `firstTag` use tag, defaults to 'ul'
 * - `secondTag` use tag, defaults to 'li'
 *
 * @param array $options Array of html attributes to apply to the generated list elements.
 * @param string|array|boolean $startText This will be the first crumb, if false it defaults to first crumb in array. Can
 *   also be an array, see `HtmlHelper::getCrumbs` for details.
 * @return string breadcrumbs html list
 * @link http://book.cakephp.org/2.0/en/core-libraries/helpers/html.html#creating-breadcrumb-trails-with-htmlhelper
 */
	public function getCrumbList($options = array(), $startText = false) {
		$defaults = array('firstClass' => 'first', 'lastClass' => 'last', 'separator' => '', 'firstTag' => 'ul', 'secondTag' => 'li');
		$options = array_merge($defaults, (array)$options);
		$firstClass = $options['firstClass'];
		$lastClass = $options['lastClass'];
		$separator = $options['separator'];
		$firstTag = $options['firstTag'];
		$secondTag = $options['secondTag'];
		unset($options['firstClass'], $options['lastClass'], $options['separator'], $options['firstTag'], $options['secondTag']);

		$crumbs = $this->_prepareCrumbs($startText);
		if (empty($crumbs)) {
			return null;
		}

		$result = '';
		$crumbCount = count($crumbs);
		$ulOptions = $options;
		foreach ($crumbs as $which => $crumb) {
			$options = array();
			if (empty($crumb[1])) {
				$elementContent = $crumb[0];
			} else {
				$elementContent = $this->link($crumb[0], $crumb[1], $crumb[2]);
			}
			if (!$which && $firstClass !== false) {
				$options['class'] = $firstClass;
			} elseif ($which == $crumbCount - 1 && $lastClass !== false) {
				$options['class'] = $lastClass;
			}
			if (!empty($separator) && ($crumbCount - $which >= 2)) {
				$elementContent .= $separator;
			}
			$result .= $this->tag($secondTag, $elementContent, $options);
		}
		return $this->tag($firstTag, $result, $ulOptions);
	}

オプションに、firstTag' と 'secondTag を追加してタグを自由に設定出来るようにしただけです。これで、dl,ddのタグで出力出来るようになります。

が、やはりこれだけでもいまいちで
<dl id="breadList">
の id="breadList" の部分や
  <dt><a href="/">HOME</a></dt>
の dtのタグが再現できません。

なので、ちょっと強引ですが
echo $crumb ;
する前に
$crumb = str_replace('<dd><a href="/"><dt>HOME</dt></a></dd>', '<dt><a href="/">HOME</a></dt>', $crumb);
$crumb = str_replace('<dl>', '<dl id="breadList">', $crumb);
とかで文字列変換をかけてあげれば、とりあえず思い通りにできたりします。

でもまだまだこれだけだと、もともとbaserCMSのcrumbsメソッドは、404 not found になるようなURLとかはリンクを張らない仕様になっているのでそこの機能も追加

BcBaserHelper.phpに

 

/**
 * 表示していいURLかを判別
 *
 * @param string $url
 * @param string $options
 * @return boolean
 * @access public
 * @manual
 */
	public function isViewLink($url = null, $options = array()) {

		if (!is_array($options)) {
			$options = array($options);
		}

		$options = array_merge(array(
			'escape' => false,
			'prefix' => false,
			'forceTitle' => false,
			'ssl' => false
			), $options);

		/*		 * * beforeIsViewLink ** */
		$event = $this->dispatchEvent('beforeIsViewLink', array(
			'url' => $url,
			'options' => $options
			), array('class' => 'Html'));
		if ($event !== false) {
			$options = $event->result === true ? $event->data['options'] : $event->result;
		}

		if ($options['prefix']) {
			if (!empty($this->request->params['prefix']) && is_array($url)) {
				$url[$this->request->params['prefix']] = true;
			}
		}
		$forceTitle = $options['forceTitle'];
		$ssl = $options['ssl'];

		unset($options['prefix']);
		unset($options['forceTitle']);
		unset($options['ssl']);

		// 管理システムメニュー対策
		// プレフィックスが変更された場合も正常動作させる為
		// TODO メニューが廃止になったら削除
		if (!is_array($url)) {
			$prefixes = Configure::read('Routing.prefixes');
			$url = preg_replace('/^\/admin\//', '/' . $prefixes[0] . '/', $url);
		}

		$_url = $this->getUrl($url);
		$_url = preg_replace('/^' . preg_quote($this->request->base, '/') . '\//', '/', $_url);
		$enabled = true;

		if ($options == false) {
			$enabled = false;
		}

		// 認証チェック
		if (isset($this->Permission) && !empty($this->_View->viewVars['user']['user_group_id'])) {
			$userGroupId = $this->_View->viewVars['user']['user_group_id'];
			if (!$this->Permission->check($_url, $userGroupId)) {
				$enabled = false;
			}
		}

		// ページ公開チェック
		if (isset($this->Page) && empty($this->request->params['admin'])) {
			$adminPrefix = Configure::read('Routing.prefixes.0');
			if (isset($this->Page) && !preg_match('/^\/' . $adminPrefix . '/', $_url)) {
				if ($this->Page->isPageUrl($_url) && !$this->Page->checkPublish($_url)) {
					$enabled = false;
				}
			}
		}

		if (!$enabled) {
			//$forceTitleの値に問わず、false
			return false;
		}else{
			return true;
		}

	}


とそのリンク先が表示していいのかのメソッドを追加、ちなみにこのソースは、getLink メソッドの一部を抜粋したソースなので、可能なら getLinkメソッドからこちらを参照するように変更かけるのがただしいのだけど、検証があまいので今回はそのまま、いつか確認ができたら、本体にマージしたいところ。

あとは、crumbs.php (エレメントのファイル)を少し書き直してあげる。
43行目あたりの
                $this->BcBaser->addCrumb($crumb['name'], $crumb['url'], array());
の所を、
                if( $this->BcBaser->isViewLink($crumb['url'])){
                    $this->BcBaser->addCrumb($crumb['name'], $crumb['url'], array());
                } else {
                    $this->BcBaser->addCrumb($crumb['name'], '', array());
                }
として、利用可能なリンク先かどうかのチェックを追加しておわり。
 

≫ 続きを読む

baserCMS   2014/02/15   admin

contentsName関数の挙動について

contentsNameの挙動を整理



contentsName関数は、
http://basercms.net/reference_3/archives/65
 

によれば、
[contentsName] コンテンツを特定するIDを出力する
と、cssとかの切り替えに便利なのですが、デフォルトがキャメルケースなので、それを小文字にしたいばあいは
<body id="<?php $this->BcBaser->contentsName(false, array('underscore'=>true)) ?>">
とすると、小文字で出力する事ができる。第2引数の「underscore」は通常アンダースコアつながりというオプションなのだが、こちらを指定することで、大文字にする事を回避する事ができます。

http://basercms.net/reference/archives
を例にとると、

<body id="<?php $this->BcBaser->contentsName() ?>">
引数をあたえない場合
<body id="Reference">
と出力される。

<body id="<?php $this->BcBaser->contentsName(true) ?>">
第一引数を trueに
<body id="ReferenceArchives">
と出力される。

<body id="<?php $this->BcBaser->contentsName(false, array('underscore'=>true)) ?>">
第一引数を falseに underscoreをtrueに
<body id="reference">
と出力される。

<body id="<?php $this->BcBaser->contentsName(true, array('underscore'=>true)) ?>">
第一引数を trueに underscoreをtrueに
<body id="reference_archives">
と出力される。

ちなみに、
http://basercms.net/reference_3/archives/65
のURLの場合、
<body id="<?php $this->BcBaser->contentsName() ?>">
引数をあたえない場合
<body id="Reference3
">
と、アンダースコアは削除され3は大文字がないのでそのままつながります。

<body id="<?php $this->BcBaser->contentsName(true) ?>">
第一引数を trueに
<body id="Reference3Archives65">
と、なります。

<body id="<?php $this->BcBaser->contentsName(false, array('underscore'=>true)) ?>">
第一引数を falseに underscoreをtrueに
<body id="reference_3">
と出力される。

<body id="<?php $this->BcBaser->contentsName(true, array('underscore'=>true)) ?>">
第一引数を trueに underscoreをtrueに
<body id="reference_3_archives_65">
と出力される。

URLの中にアンダースコアや数字が入っていると思った通りの挙動にならないかもしれないので注意が必要です。

とりあえず、僕のid指定とかは小文字だけで指定してるぜ!!
ってかたは、第2引数を「array('underscore'=>true)」にして対応してくださいませ。

 





 

 

≫ 続きを読む

baserCMS   2014/02/14   admin

プログラム一式をドキュメントルート以下におかない方法

baserCMSをインストールするときに、プログラム等の一式をドキュメントルート以下に展開しないで
運用する方法。



カスタマイズ前提とかで、サイトを構築するとき、セキュリティ上の事とかもろもろかんがえて、
baserCMSのプログラムフォルダ等をドキュメントルート以下に置きたく無い場合の運用方法。
(これを書く一ヶ月以上前にしたので、記憶みすで、間違いがあったらごめんなさい)

/var/www/html
がドキュメントルートとして、

/var/www/basercms
というフォルダにbaserCMSのパッケージを設置するとします。。

1) basercms/index.phpをドキュメントルート以下にコピー(移動でもいいよ)
2) コピーした、index.phpの中身を修正

38c38,39
< define('ROOT', dirname($_SERVER['SCRIPT_FILENAME']));
---
> //define('ROOT', dirname($_SERVER['SCRIPT_FILENAME']) . '/../basercms/');
> define('ROOT', realpath(dirname($_SERVER['SCRIPT_FILENAME']) . '/../basercms/'));
53c54,56
< require APP_DIR . DS . WEBROOT_DIR . DS . 'index.php';
---
> //require APP_DIR . DS . WEBROOT_DIR . DS . 'index.php';
> require ROOT . DS . APP_DIR . DS . WEBROOT_DIR . DS . 'index.php';
>


diffで書くと上記の様なかたち、やっていることは、ROOTの定数をbasercmsのパッケージがある絶対パスへ変更
と、上記にあわせて、appフォルダの場所を再指定。

3) webroot以下の files と theme フォルダをドキュメントルート以下にリンク
/var/www/basercms/app/webroot/files
/var/www/basercms/app/webroot/theme
の2つのフォルダは、ドキュメントルート以下に存在する必要があるのでこれに関しては、
1.シンボリックリンクをはる
2. ScriptAlias を設定する
のどちらかが必要です。
/var/www/basercms/app/webroot/files

/var/www/html/files
で、
/var/www/basercms/app/webroot/theme

/var/www/html/theme
と同じものになっている必要があるってことですね。これはコピーするだけではだめで、
プログラム的には、
/var/www/basercms/app/webroot/theme
のパスで見に行く事がほとんどなのですが、cssとかのファイルを閲覧者(ブラウザ)から見られる場合は
/var/www/html/theme
のドキュメントルートの方から見られるので、同じ物を参照してないと問題になってきます。

ln -s  /var/www/basercms/app/webroot/files files
ln -s  /var/www/basercms/app/webroot/theme theme
とかですね

まだ、構築中で本格運用はしてないですが、これで大丈夫なはず。

-- 2015.01.15 追記
css,js 等の呼び込みが上手く行ってないときは、
basercms/app/Config/install.php

Configure::write('App.baseUrl', '');
を追記する、特にスマートURL(mod_rewrite on)の状況において改善される場合有

 

≫ 続きを読む

baserCMS   2014/02/04   admin

baserCMSのライセンスのステキな関係

baserCMSの Advent Calendar があったので、
http://www.adventar.org/calendars/54
参加させていただきました。

 



あらためてbaserCMSのライセンスについてです。
baerCMSは、現在 version1(1系) と version2(2系) の 2バージョン存在します。
version1の方は開発も(実質的に)終了している事もあり、今更触ることもないと思います。

1系と2系の大きな違いは、細かい機能面の違いはるけど、

  1. 管理画面のインターフェイス
  2. ライセンスの変更

の2点です。(ちがってたら、@ryuringから指摘がはいると思います。)

で、今回は、ライセンスのお話。

baserCMSは、1系で、GPLライセンス (GPL version2)を採用しておりましたが、2系では、MIT ライセンスとなっております。

これは、小さな事の様で大きな違いです。

ライセンスの問題は複雑なので、間違いがあれば指摘してほしいのですが、GPLライセンスとMITライセンスの一番の違いと僕が思うところは、コピーレフトであるか無いかです。

GPLライセンスは、コピーレフト。MITライセンスはそうでない。

http://www.gnu.org/copyleft/copyleft.ja.html
に判りやすい、コピーレフトの一文があったので引用いたします。

コピーレフト(Copyleft)とは、プログラム(もしくはその他の著作物)を自由とし、加えてそのプログラムの改変ないし拡張されたバージョンもすべて自由であることを要求するための、一般的な手法の一つです

GPLライセンスで配布されている物をカスタマイズする時は、その成果物(カスタマイズされたもの)も自由でなくてはいけない。逆に書くと、ブラックボックス化してはいけない。という事になります。

これ、オープンソースである限りはいいのですが、商用利用しようとするといきなり困ったりします。
例えば、GPLライセンスのCMSをカスタマイズして、別名で○○CMSと名付けて売り出すと、GPLライセンス違反になってしまいます。

なので、世の中には、GPLと商用ライセンスのデュアルライセンスとかで配布している物も存在致します。
また、プラグインフォルダに関しては、GPLの対象外とするとかの付加条項をつけているものもあります。
(その場合、プラグインフォルダには,LGPLとかMITライセンスのパッケージを入れられたりする)

オープン(自由)であることを保証するには、いいライセンスではあるのですが、商用利用しようと考え出すと
すこしだけグレーゾーンが発生しているのが昨今の現状ではないでしょうか?

そういう事情も踏まえて、baserCMSは2系から、ライセンス形態をMITライセンスとしました。
@ryuringの英断ですね。

MITライセンスは、軽く書くと、その著作権表示の部分を削除しなければ好きにつかっていいよ。という物になります。

なので、上記の例と同じ感じに説明すると、baserCMSをそのまま名前をかえて、pictnotesCSMとかで有料配布しだしても問題ないのですね。

上記が可能なら、企業の資金力をバックに、cloneであるpictnotesCSMが爆発的な人気がでて、大元のbaserCMSが衰退しちゃう事もかんがえられなくはないです。その他、企業てきな営利で考えるのであれば、MITライセンスへ踏み切る事はかなり勇気がいる決断でした。
ですが、それよりまずbaserCMSが皆様に使われる用になることが重要だという決断でライセンスの変更はきまりました。

まぁ、格好いいこと書いてますが、baesrCMSで少なからず食べさて頂いてる僕としては、そうなると困ると言えば困るのですが、そこは、コミュニティーの活動をより活発にすれば自ずと防げる事であり、baserCSMが名実共に、コミュニティー主体の物になるという意思表示でもあります。

と言うことで、小難しい事を書いてきましたが、つまりはbaserCMSだと何も考えないで使えるよ!!って事です。
さらに書くならば、

Database - PostgreSQL - BSD派生ライセンス
Framework - CakePHP - MITライセンス
CMS - baserCMS - MITライセンス

あたりで、構築してパッケージにすれば、なにも問題無く商用販売できちゃうというステキなパッケージがつくれます。
OSで、FreeBSD - BSDライセンス を選択すればさらに拡がるのかな?


さて、話は少しだけかわって、baserCMS3系の開発状態。

僕自身最近忙しくてあまりさわれなかったのですが、またちらほら作業を開始して、どちらかといえば、僕は表示側のバグをフィックスしていってます。年内公開は現段階で不可能と言うことになりますが間違えなく進んでいってますので、期待して待っておいてくださいませ。

ということで、福岡で飲んでいる僕をみつけたら、飲まずに開発しろ!!ってはっぱかけて下さいませ。

以上、baserCMSをよろしくお願い致します。

 

≫ 続きを読む

baserCMS   2012/12/23   admin

baserCMSで、googleMapを全てのページで表示したい。

facebookの雑談ページのスレから。

全ページのフッターに、システム設定で入力した住所のGoogleMapを表示させたいのですが、コアのソースをコピーしただけだと、固定ページにしか表示できず、ブログとメールフォームではエラーが出てしまいます。

どうすればいいでしょうか?
 



これは、プラグインの方に、Helperが呼ばれていないのが原因なので暫定対応として
/baser/controllers/app_controller.php を /app/controllers/app_controller.php としてコピーします。
コピーしたファイルのクラス内に次のコードを追加します。

class AppController extends BaserAppController {
}
?>

class AppController extends BaserAppController {
    var $helpers = array(
                    'Session', 'BcPluginHook', BC_HTML_HELPER, BC_HTML_HELPER, 'Form', BC_FORM_HELPER,
                    'Javascript', BC_BASER_HELPER, BC_XML_HELPER, BC_ARRAY_HELPER, BC_BASER_ADMIN_HELPER, BC_GOOGLEMAPS_HELPER
    );
}

管理システムよりサーバーキャッシュを削除します。

おわり。(このファイル閉じタグが残ってた・・・)

チケットきるべきかな?

≫ 続きを読む

baserCMS   2012/10/27   admin

お問い合せフォームの確認画面に入力画面に戻るボタンを追加する

baserCMSのお問い合せフォーム(メールプラグイン)ってすごく便利なのですが、
入力画面に戻るボタンがないので、実装してみました。



baserCMS 2.0.3で確認しています。

とりあえず、変更点
baser/plugins/mail/views/elements/mail_form.php
の50行目あたりの

<?php if($freezed): ?>
    <?php echo $mailform->submit(' 送信する ', array('div' => false, 'class' => 'btn-red button', 'id' => 'MessageSubmit'))  ?>
<?php elseif($this->action != 'submit'): ?>

の部分に1行追加&1行修正して

<?php if($freezed): ?>
    <?php echo $mailform->submit(' 書き直す ', array('div' => false, 'class' => 'btn-red button', 'id' => 'MessageBack', 'name' => 'data[mode][back]'))  ?>
    <?php echo $mailform->submit(' 送信する ', array('div' => false, 'class' => 'btn-red button', 'id' => 'MessageSubmit', 'name' => 'data[mode][submit]'))  ?>
<?php elseif($this->action != 'submit'): ?>

と、戻るボタンの追加とsubmitボタンに名前をつけます。

でもって、次は baser/plugins/mail/controllers/mail_controller.php の324行目あたり function submit($id = null) のメソッドのなかの

        if(!$this->data) {
            $this->redirect(array('action' => 'index', $id));
        }else {

        if(!$this->data) {
            $this->redirect(array('action' => 'index', $id));
        } elseif( isset($this->data['mode']) && key($this->data['mode']) == 'back' ) {
            $this->_back($id);
        } else {

とします。

あわせて、元ファイルだと、352行目あたりの

	        }
	
	        $this->set('mailContent',$this->dbDatas['mailContent']);
	        $this->render($this->dbDatas['mailContent']['MailContent']['form_template'].DS.'submit');

を、

	            $this->set('mailContent',$this->dbDatas['mailContent']);
	            $this->render($this->dbDatas['mailContent']['MailContent']['form_template'].DS.'submit');
	        }

として、326行目(元ファイルは324行目)あたりの else 句の中に入れ込みます。


最後に、同じmail_controller.phpにメソッドをまるっと追加。

    /**
     * [private] 確認画面から戻る
     *
     * @param mixed mail_content_id
     * @return void
     * @access public
     */
    function _back($id)
    {
        $this->set('freezed',false);
        $this->set('error',false);

        if($this->dbDatas['mailFields']){
            $this->set('mailFields',$this->dbDatas['mailFields']);
        }

        //mailの重複チェックがある場合は、チェック用のデータを復帰
        $sendVal = array();
        $noSendVal = array();
        foreach($this->dbDatas['mailContent']['MailField'] as $val){
            if($val['valid_ex'] == 'VALID_EMAIL_CONFIRM'){
                if(! $val['no_send'] ){
                    $sendVal[$val['group_valid']] = $val['field_name'];
                } else {
                    $noSendVal[$val['group_valid']][] = $val['field_name'] ;
                }
            }
        }
        if(! empty($noSendVal) ){
            foreach( $noSendVal as $key => $val){
                foreach( $val as $v){
                    if( isset($this->data['Message'][$sendVal[$key]]) ){
                        $this->data['Message'][$v] = $this->data['Message'][$sendVal[$key]];
                    }
                }
            }
        }

        $this->action = 'index'; //viewのボタンの表示の切り替えに必要なため変更

        $this->set('mailContent',$this->dbDatas['mailContent']);
        $this->render($this->dbDatas['mailContent']['MailContent']['form_template'].DS.'index');
    }

とすれば、完成です。

で、スマホは基本PCと同じなので一応チェックして動作確認しておりますが、ケータイはview自体が別物なので baser/plugins/mail/views/elements/mobile/mail_form.php の

    <?php echo $mailform->submit(' 送信する ', array('class' => 'btn-red button'))  ?>

    <?php echo $mailform->submit(' 書き直す ', array('class' => 'btn-red button', 'name' => 'data[mode][back]'))  ?>
    <?php echo $mailform->submit(' 送信する ', array('class' => 'btn-red button', 'name' => 'data[mode][submit]'))  ?>

とすれば大丈夫です。

とりあえず、本体の方には、マージしてもらえるように(関連する細かいバグを含めて)リクエストしておりますが
現状のバージョンにくみこみたい場合はお試しください。

あと、完了画面で、リロードすると2回送信なるので、全部の処理が終わったあとに、
入力データの 初期化を組み込むべきだろうなぁ。取りあえずチケットは上げたのでそのうち修正されると思います。

≫ 続きを読む

baserCMS   2012/10/24   admin