こないだbaserCMS勉強会で話した内容 ~ baserCMS 3.0.10のテーマ関係の新機能・改善点を試してみたよ

先日、キャッチアップさんのシャレオツオフィスで行われた第一回 baserCMS 勉強会で話した内容をそのまま残しますね。

(記事内のべっしーのLINEスタンプの画像は、作者カネウチカズコ氏の本人の許可を得て掲載しています)


baserCMS勉強会

2016.06.24 @キャッチアップ

テーマ関係の新機能・改善点を試してみたよ

目次

baserCMS 3.0.10の裏話



要望をこんな感じで投げたらこんなに作ってもらえたよ!

@itm_kiyoさんさん、
@kaburkさんさん、
本当にありがとうございました!

やっとbaserCMSでできるようになったこと

ファイルアップローダープラグインをコアプラグインとして梱包

これ4年前から(略
昔のスライドあります

もっと言うと、最初から有効(インストール済状態)にしておいて欲しいです。
ファイルアップローダーのインストール状態のスクリーンショット

だってCMSでしょ?

現場目線で嬉しい新機能

ログメンテナンス

basercms3.0.10-errorlogのスクリーンショット
エラーログの悲劇からの解放されます(分かる人には分かる_

今表示している画面で使われているテーマファイルが全部わかる!

利用中のテンプレートファイル一覧
デバックモード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/ 

プラグイン開発は難しくて無理でも、
便利なヘルパーを自分で作っていって、
よく使うようなのは皆で共有していければいいですね!

  • URLをコピーしました!

この記事を書いた人

どうでもいいことばかりです

コメント

コメントする

目次