Pictnotes メインイメージ

お仕事メモ

baserCMS

baserCMSのCKEditorをカスタマイズしてみる

SyntaxHighlighter というコード表示のJSを組み込んだのはいいけど、いちいち <pre class="brush: php">と書くのは面倒なので、CKEditorのメニューに組み込んでみた。



今回は、3パータンのカスタマイズをしてみました。

1)直接コードに書いちゃえ。その1
/baser/view/helpers/bc_ckeditor.php
をカスタマイズします。
300行目辺りの

$jscode .= "editor_" . $field ." = CKEDITOR.replace('" . $this->domId($fieldName) ."',". $this->Javascript->object($ckoptions) .");";

の前あたりに

$jscode .= "CKEDITOR.config.format_pre = { element : 'pre', attributes : { 'class' : 'brush: php' } };";

とかくと、「フォーマット」「書式付き」の部分が <pre> から <pre class="brush:php">と変更されます。 ただし、これだと他にJSやSQLに対応できないので、お奨めはできません。


2)直接コードに書いちゃえ。その2
今回のお奨め。
/baser/view/helpers/bc_ckeditor.php の51行目あたりから

    var $style = array(
                    array(    'name' => '青見出し(h3)',
                            'element' => 'h3',
                            'styles' => array('color'=>'Blue')),
                    array(    'name' => '赤見出し(h3)',
                            'element' => 'h3',
                            'styles' => array('color' => 'Red')),
                    array(    'name' => '黄マーカー(span)',
                            'element' => 'span',
                            'styles' => array('background-color' => 'Yellow')),
                    array(    'name' => '緑マーカー(span)',
                            'element' => 'span',
                            'styles' => array('background-color' => 'Lime')),
                    array(    'name' => '大文字(big)',
                            'element' => 'big'),
                    array(    'name' => '小文字(small)',
                            'element' => 'small'),
                    array(     'name' => 'コード(code)',
                            'element' => 'code'),
                    array(     'name' => '削除文(del)',
                            'element' => 'del'),
                    array(     'name' => '挿入文(ins)',
                            'element' => 'ins'),
                    array(    'name' => '引用(cite)',
                            'element' => 'cite'),
                    array(     'name' => 'インライン(q)',
                            'element' => 'q')
            );

となっている所に、コードを追加して

    var $style = array(
                    array(    'name' => '青見出し(h3)',
                            'element' => 'h3',
                            'styles' => array('color'=>'Blue')),
                    array(    'name' => '赤見出し(h3)',
                            'element' => 'h3',
                            'styles' => array('color' => 'Red')),
                    array(    'name' => '黄マーカー(span)',
                            'element' => 'span',
                            'styles' => array('background-color' => 'Yellow')),
                    array(    'name' => '緑マーカー(span)',
                            'element' => 'span',
                            'styles' => array('background-color' => 'Lime')),
                    array(    'name' => '大文字(big)',
                            'element' => 'big'),
                    array(    'name' => '小文字(small)',
                            'element' => 'small'),
                    array(     'name' => 'コード(code)',
                            'element' => 'code'),
                    array(     'name' => '削除文(del)',
                            'element' => 'del'),
                    array(     'name' => '挿入文(ins)',
                            'element' => 'ins'),
                    array(    'name' => '引用(cite)',
                            'element' => 'cite'),
                    array(     'name' => 'インライン(q)',
                            'element' => 'q'),
                    array(     'name' => 'php code(pre)',
                            'element' => 'pre',
                            'attributes' => array('class'=>'brush: php')),
                    array(     'name' => 'sql code(pre)',
                            'element' => 'pre',
                            'attributes' => array('class'=>'brush: sql'))
            );

と「スタイル」のリストに新しいリストを追加してあげます。 たぶんこれが一番簡単です。

3)きちんとviewのテンプレートから引数でもってくる。 正統派のカスタマイズですが、ややめんどい。 /baser/plagins/blog/views/blog_posts/admin/form.php の167行目あたりから

<?php
    $styles = array('mystyle'=>
           array(
                    array(    'name' => '青見出し(h3)',
                            'element' => 'h3',
                            'styles' => array('color'=>'Blue')),
                    array(    'name' => '赤見出し(h3)',
                            'element' => 'h3',
                            'styles' => array('color' => 'Red')),
                    array(    'name' => '黄マーカー(span)',
                            'element' => 'span',
                            'styles' => array('background-color' => 'Yellow')),
                    array(    'name' => '緑マーカー(span)',
                            'element' => 'span',
                            'styles' => array('background-color' => 'Lime')),
                    array(    'name' => '大文字(big)',
                            'element' => 'big'),
                    array(    'name' => '小文字(small)',
                            'element' => 'small'),
                    array(     'name' => 'コード(code)',
                            'element' => 'code'),
                    array(     'name' => '削除文(del)',
                            'element' => 'del'),
                    array(     'name' => '挿入文(ins)',
                            'element' => 'ins'),
                    array(    'name' => '引用(cite)',
                            'element' => 'cite'),
                    array(     'name' => 'インライン(q)',
                            'element' => 'q'),
                    array(     'name' => 'php3 code(pre)',
                            'element' => 'pre',
                            'attributes' => array('class'=>'brush: php')),
                    array(     'name' => 'sql3 code(pre)',
                            'element' => 'pre',
                            'attributes' => array('class'=>'brush: sql'))
        )
      );
?>

と入れ替えるスタイルを記載します。ここで「mystyle」は好きに置き換えてもらって大丈夫ですが、あとで同じ文字列を設定する必要があるので忘れないでください。
次に、

<?php echo $bcForm->ckeditor('BlogPost.content',
    array('cols' => 60, 'rows' => 20),
    $ckEditorOptions1) ?>

となっているところを

<?php echo $bcForm->ckeditor('BlogPost.content',
    array('cols' => 60, 'rows' => 20),
    array_merge($ckEditorOptions1,array('stylesSet'=>'mystyle')),$styles) ?>

といれかえます。
このあと、$ckEditorOptions1が$ckEditorOptions2となっているところが直ぐしたにあるのですがそこも同じ様に

<?php echo $bcForm->ckeditor('BlogPost.content',
    array('cols' => 60, 'rows' => 20),
    $ckEditorOptions2) ?>

となっているところを

<?php echo $bcForm->ckeditor('BlogPost.content',
    array('cols' => 60, 'rows' => 20),
    array_merge($ckEditorOptions2,array('stylesSet'=>'mystyle')),$styles) ?>

といれかえます。(1つだけだと反映できません。) とすると、ここで設定したスタイルで上書きができます。
'stylesSet'=>'mystyle'の部分のmystyleは先のスタイルの設定の配列の部分のkeyと同じ文字列です。
ただ、今回設定した preですが、思った通りの囲みが出来ないことが多いのでやっぱりソースビューで綺麗にしてあげる必要がありそうです。 とりあえず、オリジナルのstyleとかをボタン一つで当て込みたい時とかに使えるテクニックでした。

 

≫ 続きを読む

baserCMS   2012/09/19   admin

SyntaxHighlighterをbaserCMSに組み込んでみる

baserCMS2.0.4
PHP等のソースコードを見やすくするために、とりあえず一番よさげだったSyntaxHighlighter組み込んでみたときのメモ書き。



サイトは、SyntaxHighlighterになります。
右側に、downloadのリンクがあるのでそちらから、最新版なり好きなバージョンを落としてください。
この時利用したのは、最新版のsyntaxhighlighter_3.0.83です。

ダウンロード後、解凍して、現在つかってるテーマの中にそのままFTPなりでアップロード
/app/webroot/themed/{テーマ名}/js/syntaxhighlighter_3.0.83
とかになります。

こちらの、JSとCSSをテンプレートから読みに行くように追加。

	<?php $bcBaser->css('../js/syntaxhighlighter_3.0.83/styles/shCoreDefault') ?>
	<?php $bcBaser->js(array('jquery-1.7.2.min','jquery.corner','yuga','startup','syntaxhighlighter_3.0.83/scripts/shCore','syntaxhighlighter_3.0.83/scripts/shBrushJScript')) ?>

という感じ。
shBrushJScriptとか、は別途必要ならshBrushCss,shBrushPhpとを呼び込み必要があるのだけど、ここは<pre class="brush: sql;">とか書いたらそれに該当するものを動的に呼び込んでくれないかなぁ。。(知らないだけ?)とおもってます。
とりあえず、ソースおっかけるのもあれなんで、そのまま使いたいと思います。<pre ~~かくのが以外と面倒かもw

 

 

≫ 続きを読む

baserCMS   2012/09/12   admin

blogプラグインで表示しているページのデザインを変更する

baserCMS2.0.4
<?php $bcBaser->content() ?>
で、表示してある部分のデザインを変更したい場合。



/baser/plugins/blog/views/blog/
以下のphpファイルを修正してください。(バックアップをお忘れ無く)
blogの中のフォルダは
default = PC
smartphone =  スマホ
mobile = ガラゲー
のテンプレートなっています。

これは、appフォルダに置いても認識してくれないのでここで修正するしかなさげ。

≫ 続きを読む

baserCMS   2012/09/12   admin

basderCMS ブログの本文と詳細の使い分け

baserCMS2.0.4
baserCMSのblogプラグインの、記事登録には、本文と詳細の2つの入力フィールドがあります。
言葉の意味は判るのですが、どのように使い分けたらいいのか不明だったので探ってみました。



端的に書くと、本文は、一覧表示(そのブログの記事一覧)に出てくる。
詳細は、その記事(ブログ)の詳細ページ(一覧ページの「≫ 続きを読む」リンクを押したあとのページ)とカテゴリー一覧のページに出てくる。

詳細ページでは、本文と詳細は<hr>とかのタグを挟まずに連なって出てくる事になる。

というのが、基本の動き。
これをカスタマイズしたいときは、
/baser/plugins/blog/views/helpers/blog.php
のgetPostContentという関数があるので、それを修正すればOKなんですけど、ちょっと敷居が高いですよね。baserCMSをversion upする時に困りますし。


で、少し安全にカスタマイズするために、
/baser/plugins/blog/views/helpers/blog.php
をそっくりそのまま、appの同じディレクトリに設置します。
/app/plugins/blog/views/helpers/blog.php
にそのまま、ファイルを複製しておいてください。(viewsフォルダ以下はデフォルトでは存在しないと思うので作ってくださいね)

これで、baser以下のblog.phpでなく、app以下のblog.phpが参照されるように変わりました。
あとは、こちらのblog.phpを修正してください。

baserフォルダをいじらないでbaserCMSをversion upするときにも,直接いじるより安全かと思います。
version up時には、
/baser/plugins/blog/views/helpers/blog.php

/app/plugins/blog/views/helpers/blog.php
の、差分をとって、カスタマイズ以外の所を書き直しかな?

--余談
basrCMSのプラグインフックの仕組み http://basercms.net/manuals/2/programmers/5.html#PluginHook
をつかって、出力書き換えてあげればいけるんじゃね?とちょっと探ってみたのですが、現状のフックでbeforeLayout を使うと、
/baser/plugins/blog/views/blog/default/single.php の出力結果を書き換える形になりそうなので、ちょっと効率悪そうだと言うことで断念。
getPostContent メソッドだけを上書き出来ればいいのですけどね。じゃあ、class継承すれば良いじゃんという話になるのですが、現状では時間がないので今度みてみます。
--余談おわり


とりあえず、このblogは(今だけかも) 詳細ページに<hr>をいれるのと、一覧からのリンクのアンカーを消してみました。


ちなみに、getPostContentは、postContentという関数から呼ばれているだけみたいなので
マニュアル postContent
こちらの関数の引数を増やしてあげたりすると、すこしデザインの幅ができそうです。
手を入れたら、採用してくれるかなぁ???

≫ 続きを読む

baserCMS   2012/09/12   admin

basderCMSのpluginを作ってみる その1

basderCMSのプラグインの作り方メモ(作りながら書いてるので、最後の記事ができるまで改訂が入ります)



とりあえず、現在あるプラグインを覗いて中身を確認するのがはやいけど、とりあえずのHotwo

1)サーバ上の、app/plugins(baser/pluginsと間違わないこと) フォルダに作成したいプラグイン名のフォルダを作成する。

ここでは、PostgreSQLのINDEX管理ページを作りたいので postgresql_index というフォルダ名にする
ちなみにこの段階で、管理画面から、 > プラグイン管理 > プラグイン一覧
を覗いてみると、作成したフォルダ名がリストにでてくる。

とりあえず、こんな感じに表示されるはず。
プラグイン説明その1
 

2) 必要なディレクトリを作成

とりあえず、いろいろ置いておいて必要なディレクトリとファイル(空ファイル)を作成します。
(D)がdirectory (F)がfileです。 -> まだ未完成です。

postgresql_index(D)
├ config (D)
│ ├ bootstrap.php
│ ├ config.php
│ ├ csv (D)
│ │ └ postgresql_index
│ ├init.php
│ └ sql (D)
│    └ postgresql_index.csv
│    └ postgresql_index.php

├ controllers (D)
│ └ postgresql_index_controller.php

├ models (D)
│ └ postgresql_index.php

├ vendors (D)
│ ├ css (D)
│ │ └ postgresql_index.css
│ └ js (D)
│    └ postgresql_index.js

├ VERSION.txt

└ views (D)
  ├ bootstrap.php
  ├ config.php
  ├ helpers (D)
  │ └ postgresql_index_baser.php
  └ postgresql_index (D)
     └ admin
       └ postgresql_index.php


3)プラグインの説明や開発者を登録しよう。

リストにはプラグイン名(フォルダ名)しかでてないと思うので、その他の情報
「バージョン    説明    開発者    登録日 更新日」なんかを表示出来る様にしよう。
config/config.phpファイルに
<?php
/**
 * PostgreSQL INDEX設定プラグイン
 */
$title = 'PostgreSQL Index';
$description = 'DatabaseにPostgreSQLをしている場合推奨するindexを張ることができます。';
$author = 'itm_kiyo';
$url = 'http://www.pictnotes.jp';
$adminLink = array('admin' => true, 'plugin' => 'postgresql_index', 'controller' => 'postgresql_index', 'action' => 'index');
//$adminLink = '/admin/postgresql_index/postgresql_index/index'; と指定するのと一緒です。
$installMessage = 'ここに文章を記載しておくと、INSTALL時にここの文章を出力できます。';
?>
と記載してアップロードで、管理画面上で「説明    開発者」が表示されるようになります。

次に、
VERSION.txt ファイルに
1行目に 0.9.0 と書いてアップロードするとバージョン情報が入ってきます。ファイルには、あわせてリリースノートも
書いておくと良いでしょう。

0.9.0

///////////////////////////////////////////////////////////////////////////////////////////////////////////
// +---------------------------------------------------------------------------------------------------+ //
// + Release Notes
// +---------------------------------------------------------------------------------------------------+ //
///////////////////////////////////////////////////////////////////////////////////////////////////////////

[2012-08-24] PostgreSQL Index 0.9.0
-リリース

[2012-08-24] PostgreSQL Index 0.9.1
-いきなりバグフィックス


その2に続く

 

≫ 続きを読む

baserCMS   2012/08/24   admin