先日、キャッチアップさんのシャレオツオフィスで行われた第一回 baserCMS 勉強会で話した内容をそのまま残しますね。
(記事内のべっしーのLINEスタンプの画像は、作者カネウチカズコ氏の本人の許可を得て掲載しています)

baserCMS勉強会
2016.06.24 @キャッチアップ
テーマ関係の新機能・改善点を試してみたよ
baserCMS 3.0.10の裏話


要望をこんな感じで投げたらこんなに作ってもらえたよ!
@itm_kiyoさんさん、
@kaburkさんさん、
本当にありがとうございました!
やっとbaserCMSでできるようになったこと

ファイルアップローダープラグインをコアプラグインとして梱包
これ4年前から(略
昔のスライドあります
もっと言うと、最初から有効(インストール済状態)にしておいて欲しいです。

だってCMSでしょ?

現場目線で嬉しい新機能

ログメンテナンス

エラーログの悲劇からの解放されます(分かる人には分かる_
今表示している画面で使われているテーマファイルが全部わかる!

デバックモード2か3で下に出るようになりました。
includeしてるファイルも全てわかります。超便利!
新ヘルパー
テーマ作る上で嬉しいヘルパーが増えました
BcBaser::getParams()
そのページのurlとかクエリとかプラグインかどうかとかが分かります。
//出力例
var_dump( $this->BcBaser->getParams());
HOMEの場合
array(6) {
["plugin"]=>
NULL
["pass"]=>
array(1) {
[0]=>
string(5) "index"
}
["isAjax"]=>
bool(false)
["query"]=>
array(0) {
}
["url"]=>
bool(false)
["here"]=>
string(1) "/"
}
固定ページの場合
array(6) {
["plugin"]=>
NULL
["pass"]=>
array(2) {
[0]=>
string(5) "about"
[1]=>
string(5) "index"
}
["isAjax"]=>
bool(false)
["query"]=>
array(0) {
}
["url"]=>
string(6) "about/"
["here"]=>
string(7) "/about/"
}
ブログ記事の場合
array(6) {
["plugin"]=>
string(4) "blog"
["pass"]=>
array(1) {
[0]=>
string(1) "3"
}
["isAjax"]=>
bool(false)
["query"]=>
array(0) {
}
["url"]=>
string(15) "news/archives/3"
["here"]=>
string(16) "/news/archives/3"
}
メールフォームの場合
array(6) {
["plugin"]=>
string(4) "mail"
["pass"]=>
array(0) {
}
["isAjax"]=>
bool(false)
["query"]=>
array(0) {
}
["url"]=>
string(8) "contact/"
["here"]=>
string(9) "/contact/"
}
siteName getSiteName
ありそうでなかった その1
ダッシュボードのサイト基本設定のWEBサイト名だけを取得
$this->BcBaser->getSiteName()
siteUrl getSiteUrl
ありそうでなかった その2
baserCMSがインストールしたサイトのURLが取得できます
$this->BcBaser-> getSiteUrl()
BlogHelper関係

ブログ関係のヘルパーがだいぶ増えました(まだ足りてない)
getBlogs
ブログの情報(説明や設定、表示件数、コメント許可などなど)が取得できます。
var_dump($this->BcBaser->getBlogs('news'));
ブログを指定しなかったら全ブログの情報が配列で取得できます。かなり便利!!
var_dump($this->BcBaser->getBlogs());
出力例↓
array(3) {
[0]=>
array(23) {
["id"]=>
string(1) "1"
["name"]=>
string(4) "news"
["title"]=>
string(12) "新着情報"
["description"]=>
string(65) "baserCMS inc. [デモ] の最新の情報をお届けします。"
["layout"]=>
string(7) "default"
["template"]=>
string(7) "default"
["status"]=>
bool(true)
["list_count"]=>
string(2) "10"
["list_direction"]=>
string(4) "DESC"
["feed_count"]=>
string(2) "10"
["tag_use"]=>
bool(true)
["comment_use"]=>
string(1) "1"
["comment_approve"]=>
string(1) "0"
["auth_captcha"]=>
bool(true)
["widget_area"]=>
string(1) "2"
["exclude_search"]=>
bool(false)
["use_content"]=>
bool(true)
["created"]=>
string(19) "2016-02-02 21:01:37"
["modified"]=>
NULL
["eye_catch_size_thumb_width"]=>
string(3) "300"
["eye_catch_size_thumb_height"]=>
string(3) "300"
["eye_catch_size_mobile_thumb_width"]=>
string(3) "100"
["eye_catch_size_mobile_thumb_height"]=>
string(3) "100"
}
[1]=>
array(23) {
["id"]=>
string(1) "2"
["name"]=>
string(6) "course"
["title"]=>
string(6) "講座"
// (省略)
}
[2]=>
array(23) {
["id"]=>
string(1) "3"
["name"]=>
string(10) "staff-blog"
["title"]=>
string(21) "スタッフブログ"
// (省略)
}
}
これによって、こんな要望に応えられます。
- ブログを柔軟に増やしていきたい(部署毎、プロジェクト毎など)
- 最新記事はHOMEに自動で追加して欲しい
今まではブログを新規追加する度にこう追記してました
スタッフブログ
スタッフブログ一覧
BcBaser->blogPosts('staff-blog', 8);?>
こう書けるようになります。
BcBaser->getBlogs();
foreach ($blogs as $key => $blog):
?>
一覧
BcBaser->blogPosts($blog['name'], 8);?>
blogName getBlogName
ありそうでなかった その3
ブログのブログアカウント名を取得できます。
var_dump( $this->Blog->getBlogName());
↓
string(4) "news"
getCurrentBlogId currentBlogId
ありそうでなかった その4
ブログのIDを取得できます。
var_dump( $this->Blog->getCurrentBlogId());
↓
string(1) "1"
getPostDetail method
やっとできるようになった その1
記事本文の概要(content),本文(detail)を別々に取得できるようになりました。
//記事概要
$this->Blog->getPostContent($post)
//記事本文
$this->Blog->getPostDetail($post)

★改善要望
$this->Blog->getPostContent($post)
にデフォルトで付与されるタグが余計。
テーマ(フロントエンド)側で制御したい。
,
★改善要望2
文字数カットがHTMLタグ含まれてのカットなので使えない。
//概要がある場合:文字数指定で出力
if( $this->Blog->getPostContent($post) ) {
//このままだと文字数カット時にタグも含まれてしまう
$str = $this->Blog->getPostContent($post, '', false, 100);
}
else //概要がない場合:本文を文字数指定で出力
{
$str $this->Blog->getPostDetail($post,array('cut'=> 100 ));
}
現時点ではこうするしかない
//概要がある場合:文字数指定で出力
if( $this->Blog->getPostContent($post) ) {
//このままだと文字数カット時にタグも含まれてしまう
$str = strip_tags($this->Blog->getPostContent($post)); }
else //概要がない場合:本文を文字数指定で出力
{
$str = strip_tags($this->Blog->getPostDetail($post));
}
// 文字数でカット
$num = 100;
if(mb_strlen($str) >= $num) {
echo mb_substr($str, 0,$num)."…";
} else {
echo $str;
}
eyeCatch(BcUpload->uploadImage) アイキャッチ画像のパス取得
やっと画像のurlパスを取得できるようになった(ずっと皆言ってた)

今まではこれだけ必要だった
$blogName = $posts[0]["BlogContent"]["name"];
$baseCurrentUrl = "/".$blogName . '/archives/';
$baseCurrentImgUrl = "/files/blog/".$blogName . "/blog_posts/";
if( $this->Blog->getEyeCatch($post) ){
// アイキャッチ画像のパス
$eyeCatch = $baseCurrentImgUrl . $post["BlogPost"]["eye_catch"];
// アイキャッチ画像の小さいサイズを利用する
$eyeCatch = str_replace(".jpg","__mobile_thumb.jpg", $eyeCatch);
// $eyeCatch_m = str_replace(".jpg","__thumb.jpg", $eyeCatch);
} else {
$eyeCatch = $this->BcBaser->getThemeUrl()."img/no-photo-thumb.png";
}
たったこれだけに!!
$eyeCatch = $this->blog->getEyeCatch($post,array(
'imgsize' => 'thumb',
'output' => 'url',
'noimage' => $this->BcBaser->getThemeUrl() ."img/no-photo.png"
));
blogPosts拡張
複数ブログから記事を拾ってこれるようになった
//全ブログから10件記事を取得
$this->BcBaser->blogPosts(null, 10, array(
'contentsTemplate' => 'news' //どのブログ(post.php)を使うか
));
→HOMEで最新記事のスライドショーが簡単に!
記事取得のgetBlogPost()ではまだでした、、、

これができるようになれば、
ブログが勝手に増えても対応できる全ブログの最新記事のスライドショーを作成できます

今 欲しいヘルパーとか機能とか
wordpressのbody_class()

ずっと言っていた気がするけど。
4年前から言ってた。(某スライド参照)
ちょっと古い設計しそうかもしれませんが、フロントエンドにはCSSシグネチャって考え方があるんですよ。
CMSには結構有効で、これがあればテーマファイルで判定や分岐処理を書く手間が減ります。
実はFITさんで実装済み。
プラグインでなくて標準で入って欲しいなー。
スマホ用テーマはテーマ単位で切り替えたい

PC、タブレット、スマホ等、デバイス別にテーマを切り替えられるように指定できると嬉しい
↓現在
theme/
└ {テーマ}
├ Elements
├ smartphone
├ Layouts
├ smartphone
…
↓こうなると嬉しい
theme/
├ {PC用テーマ}
├ Elements
├ Layouts
…
└ {スマホ用テーマ}
├ Elements
├ Layouts
…
メモ:自分でヘルパーを触りたい時
各Helperをテーマ内にコピーすればOK。
/lib/Baser/View/Helper/Bc****Helper.php
/lib/Baser/Plugin/{プラグイン}/View/Helper/****Helper.php
/app/Plugin/{プラグイン}/View/Helper/****Helper.php
↓テーマ内にフォルダ[Helper]を作成してコピペ
theme/{theme}/Helper/
プラグイン開発は難しくて無理でも、
便利なヘルパーを自分で作っていって、
よく使うようなのは皆で共有していければいいですね!

コメント