seezoo cms のブログ記事

こちらでSeezooCMS用のWiki記法ブロックを公開しているわけですが、
これを作った理由が、おそらくみなさんの役に立つのではということで、
Tipsを書いておきます。
 
SeezooにはWYSIWYGなHTMLブロックなど必要な機能はひと通り揃っていて、
企業の担当者レベルで非常に更新のしやすいシステムですが、
一個だけ不満が。
それがテーブル作成でした。
 
WYSIWYGなHTMLエディタには、テーブル機能が搭載されておらず、
HTMLコードを直で書かないといけない。
そして、一般担当者レベルでは、表組みはテーブルが一番分かりやすい。
 
ということで、何か簡単にテーブルを書ける方法がないかということで、
作ったのがwiki記法ブロックです。
 
wiki記法ブロックに

||セル1||セル2||
||セル3||セル4||

と書けば、

<table>
<tr><td>セル1</td><td>セル2</td></tr>
<tr><td>セル3</td><td>セル3</td></tr>
</table>

と自動で出力してくれる。
 

||~セル1||セル2||
||~セル3||セル4||

と書けば

<table>
<tr><th>セル1</th><td>セル2</td></tr>
<tr><th>セル3</th><td>セル3</td></tr>
</table>

と自動で出力してくれる。
 
という仕組みです。
 
どうですか?これならHTMLわからない人でもテーブルを簡単に書けます。
 


ただ、ここまでの説明だと、飾りっけのないテーブルになってしまいますので、
本日のバージョンアップで任意のidとclassを振れるようにしていますので、
例えば、テンプレート用CSSやカスタムCSSに

.wikiclass table {
 margin: 0px;
 padding: 0px;
 background-color: #FFFFFF;
    border-spacing:0px;
    border-collapse:collapse;
    empty-cells:show;
    width:100%;
    border-top:1px solid #663300;
    border-left:1px solid #663300;
    background-color: #FFFFFF;
}
.wikiclass table td {
    border-right:1px solid #663300;
    border-bottom:1px solid #663300;
    padding:3px;
    margin:0px;
}
.wikiclass table th {
    background-color: #F6F6F6;
    border-right:1px solid #663300;
    border-bottom:1px solid #663300;
    padding:3px;
    width:30%;
    margin:0px;
}

と書いておき、classに「wikiclass」を設定すれば、装飾のされたテーブルを表示できるようになります。
 
どうですか?地味だけど便利でしょ?
 
ご活用ください。

先日作ったSeezooCMS用のWikiコードブロックをバージョンアップしました。
 
・作成したブロックを<div>で囲み、そこに任意のidとclassを付与できるようにしています。
 これにより、CSSやカスタムCSSで、そのブロックに任意のCSSを適用できます。
 
・初版では、wikiブロックにHTMLコードを入れた場合、自動サニタイズされる仕様になっていましたが、
 それを回避しています。<script>などもそのまま出力されてしまいますので、
 セキュリティホールを作らないように注意が必要です。
 
以上が今回のバージョンアップです。
ダウンロードはこちらから

seezoo cms(http://seezoo.org/)が楽しい。
プログラマ的に言って拡張がかなり楽!!
 
a-blog cms(http://www.a-blogcms.jp/)といい、
名古屋の人が作るツールは楽しい物ばかりだ。
 


昨日、seezooの開発元の音生さん(http://neo-navi.net/)に伺った際に、
色々話を聞かせていただいて、
その内容をもとにseezoo用のブロックを作ってみた。
 
前々からほしいと思っていた、wiki記法ブロックを作った。
パーサーを自分で書くのは大変だったので、
PEARのText_wikiに頼っている。

ダウンロードはこちらからどうぞ。


【インストール方法】

1)まず、PEARのText_wikiをインストールします。
PEARコマンドが使える場合は、
通常通りコマンドでインストールしてください。
 
使えない場合は、

・PEAR(ベースシステム)

http://pear.php.net/package/PEAR/download

をダウンロードして、解凍してできる、
PEAR.phpとPEARディレクトリを
system/application/libraries/ディレクトリに置きます。

・Text_Wiki

http://pear.php.net/package/Text_Wiki/download

をダウンロードして、解凍してできる、
Textディレクトリを同じく
system/application/libraries/ディレクトリに置きます。
 
 
2)ブロックを置く。
先ほど上記にてDLしたWikiブロックを解凍してできる、
kiyowikiディレクトリを、
blocksディレクトリに置きます。
 
3)ブロックを有効にする。
管理画面のブロック管理にいくと、
「インストール可能なブロックのリスト」に、
「Wiki記法ブロック」というのが追加されているので、
それを有効します。

あとは、通常のブロックと同様、
ページ編集画面で「Wiki記法ブロック」を追加して、
表示されるテキストエリアにWiki記法を書けばOKです。
使える記法については、
http://pear.reversefold.com/dokuwiki/text_wiki:samplepage
ここを参考にしてください。


 
ここまで来て気づいた。。。
Text_WikiのインスタンスをいちいちViewで有効にしてる…orz
動くには動くけどスマートじゃないし、色々無駄。。。
そのうちヘルパとして用意したバージョンを公開しますね。
とりあえず、利用される場合は、
完全自己責任の名のもとに使うベータ版として利用してくださいね。
あくまでも、これは私のお勉強のためのものですから!!

あ、そしてもう一個気づいた、wiki記法ブロックにidとclass付けれるようにしたほうがいいな、、、カスタムCSSで自由に操作できるもの。
 


追記:バージョアンアップ 2010/12/29

・作成したブロックを<div>で囲み、そこに任意のidとclassを付与できるようにしています。
 これにより、CSSやカスタムCSSで、そのブロックに任意のCSSを適用できます。
 
・初版では、wikiブロックにHTMLコードを入れた場合、自動サニタイズされる仕様になっていましたが、
 それを回避しています。<script>などもそのまま出力されてしまうので、
 セキュリティホールを作らないようにしてください。

ちょっと野暮用で(という言い方も変だが)、
さくらインターネット(スタンダード)にSeezooCMSをインストールする必要があった。
 
公式のインストール方法を元に設置まで進んで、
いざインストール設定をと思うと進めない。
???
と思い、/index.phpに直接アクセスしたら、
インストーラーを見ることができたので、
なーんだと思ってインストール完了。
 
さぁ、じゃあ使おうじゃないかと思うと、
ここでさっきの問題が何を意味しているかわかった。
mod_rewriteの動作が変!!!orz
 
最初はmod_rewriteの動作がなのかなと、
.htaccess周りをずっと見ていたのだけれど、
どうもなんか違う。.htaccessの書き方は正常だ。。。
 
というようなことをTwitter嘆いていたら、
@longkey1さんが
・ルーティングあたりに問題がある。
・mod_rewrite後PHPにPATH_INFOが渡されないのが問題かも。
とアドバイスを受ける。
 
!!!
 
初めてCGIモードでPHPを触ったのですが、
CGIモードの場合、PATH_INFO周りの扱いが非常に面倒になるのですね…。
知りませんでした。。。
 
でも共有ホスティングではCGIモードがメインの日本では、
知らなかったでは済まされない事態…@longkey1さんありがとうございます。。。
 


 
私が行った対処方です。
 
まず、seezoo CMSデフォルトのサンプルでは、.htaccessは、

RewriteEngine On

RewriteCond $1 !^(index\.php|sitemap.xml|sitemap_ssl.xml|css|js|captcha|uploads|templates|blocks|phpMyAdmin|.+\.gif$|.+\.jpg$|.+\.png$|.+\.js$|.+\.css$|.+\.json$|.+\.ico$|.+\.swf$|.+\.flv$)
RewriteRule ^(.*)$ index.php/$1 [L]

 
こんな感じですが、これを
 

RewriteEngine On
RewriteBase /
RewriteCond $1 !^(index\.php|sitemap.xml|sitemap_ssl.xml|css|js|captcha|uploads|templates|blocks|phpMyAdmin|.+\.gif$|.+\.jpg$|.+\.png$|.+\.js$|.+\.css$|.+\.json$|.+\.ico$|.+\.swf$|.+\.flv$)
RewriteRule ^(.*)$ index.php?__REQ__=$1 [L]

 
こんな風にします。@_tk84さんの情報によると、さくらの場合は、基本的にRewriteBaseの設定は行った方が良いようです。ありがとう!_tk84さん。
 
次に、/index.phpの冒頭に、次のPHPスクリプトを埋めます。
 

if( isset( $_GET['__REQ__'] ) ){
    $_SERVER['PATH_INFO'] = $_GET['__REQ__'];
}

 
ここまでの流れを説明すると、
URLのパス情報を「__REQ__」というリクエストで送信して、
それを受け取ったindex.phpが、
$_GET['__REQ__']を$_SERVER['PATH_INFO'] に代入して、
ルーティングを成功させようという魂胆。
 
 
これでいけるか。と思ったら、まだ変。。。
改めてCodeIgniterのルーティングについて調べる。
すると、CodeIgniterでは、何を基準にルーティングするのかを決める設定があって、
デフォルト状態ではそれが「auto」になっているという話。
それを明確に「PATH_INFO」を基準にせよとすれば、
うまく行くっぽい!
 
/system/application/config/config.php
の次の箇所

$config['uri_protocol']	= "AUTO";

$config['uri_protocol']	= "PATH_INFO";

 
と書き換えた。
 
 
これで成功!めでたしめでたし。
あとはつくるだけ。
 


 
@longkey1さん、@_tk84さん、ありがとうございます!

先日のオープンソースカンファレンス名古屋2010(以下OSC)でキックオフとなった、
seezoo cms
 
OSCで担当の方とちょっとだけ意気投合したので、
帰宅後触ってみたらconcreat5っぽいのでいいなぁと思ったので、
ぜひ、開発(主にEC用のプラグインになるかと思いますが)に参加したい!
と思ったら、
私が普段メインで使っているクララオンラインの専用サーバーのPHPは
Ver5.1.6なので、要件をみたしてない(T_T)
 
とTwtterで嘆いたところ、公式アカウント
json_encode()だけどうにかできれば、5.1でも使えるとのこと!
ありがたい事に、公式ブログでも対応方法を書いていただけた。
ただ、私はマルチバイトを簡単に扱えて、なおかつ、staticでも使えるJsphonのが好きなので、
こちらで対応した(後述)。
 


というわけで、クララオンラインのサーバーにインストールする手順。
 
1)seezoo公式からシステムDL

2)json_encode()を擬似的に作成

3)インストーラーがPHPのバージョンチェックをしているので、これをスキップ

4) 通常通りインストール
 


 
こちらの記事によると、
CodeIgniterのヘルパー関数に擬似的なjson_encode()を作りましょう!
ってなってるんですが、恥ずかしながらCodeIgniterは名前は知ってたものの、使ったことがない!!
 
というわけで、お手軽実装のほうで。
 
まず、JSONエンコードするライブラリ「Jsphon」をこちらからダウンロードして、
解凍してできた
・Jsphon.php
・Jsphonディレクトリ
をsystem/application/libraries/に置きます。
 
次に、system/application/helpers/seezoo_helper.phpを開いて、一番下に
 

if ( ! function_exists('json_encode') ){

    require_once(APPPATH . 'libraries/Jsphon.php');
    function json_encode($data){
        return Jsphon::encode($data);
    }
}

 
を追記。
これで擬似的にjson_encode関数を作れます。
 
upgrade.phpというものもあります。
こっちを使えば、インクルードするだけで使えそうです。(マルチバイトはどうかな…。未確認)
 


次に、インストーラーのバージョンチェックをスキップします。
 
system/application/controllers/install.phpを開いて
 

$viewdata['php_version'] = version_compare(PHP_VERSION, '5.2.0', '>');

 
とされているところを
 

$viewdata['php_version'] = version_compare(PHP_VERSION, '5.1.0', '>');

 
に変更。

ここまでやったら、あとは、普通にインストーラーを走らせれば、
インストールできました。
 
今日はここまで!
これから使ってみながら、開発にも入り込んでいきます!