スタッフブログ
カスタムブロックって?
XOOPS Cubeでは、ページのサイドに表示するパーツをブロックと言います。ブロックには2種類あります。ひとつは、モジュールブロックです。モジュールブロックは、モジュールに付属するブロックです。例えば、ニュースモジュール(bulletin)のブロックには、ニュースの新着記事を一覧するブロックなどがあります。ニュースの新着記事をトップページに表示する場合に、モジュールブロックは非常に便利です。
もうひとつのブロックは、カスタムブロックです。モジュールブロックと違い、カスタムブロックはサイトオーナーが自由に中身を作り込むことができます。カスタムブロックのよくある使い道は、サイトの紹介・説明をトップページに表示することがあります。弊社のサイトのトップページの「XOOPS Cube のことなら RYUS にお任せください。」もカスタムブロックを使って表示されています。
PHPカスタムブロックは高度なブロックが作れる!
カスタムブロックは、普通のテキスト、HTML、PHPなどで書くことができます。この中でも、PHPを使うと更に高度なカスタムブロックを作ることが可能です。なぜ、PHPかというと、カスタムブロックの中身を動的に変えることができるからです。これはどういうことかというと、例えば、見ているユーザや、時間帯など様々な「条件」によって表示をかえることが可能だからです。
PHPカスタムブロックを作るときに困ること
PHPカスタムブロックは、高度がことができる反面、作るのが面倒という一面があります。それは、PHPがプログラミング言語のため、ちょっとでも文法を間違ようものなら「XOOPS Cubeの画面が真っ白!」という惨事を引き起こしかねません。画面が真っ白になって何が困るかというと、管理画面に行こうとしても画面が真っ白で管理画面へのリンクが出なくなるのです。こうなると管理画面に行けなくないり*1、カスタムブロックの修正ができなくなります。
画面真っ白ほどでもないですが、もうひとつ困ることとして、作りにくさにあります。PHPでちょっと複雑なプログラムを書くには、XOOPSの管理画面ではあまりにも不便なのです。タブによるインデントがつけにくいし、バグを洗い出すのも大変です。エラーが起きても、エラーメッセージが表示されません。そこで、このエントリでは、PHPカスタムブロックのうまい作り方を説明します。
危ない!普通の作り方
先にPHPカスタムブロックの普通の作り方を説明しておきます。これは、画面が真っ白になってしまうかもしれない、リスクのある作り方でもあります。
1. 管理者アカウントでログイン2. 互換モジュールでの手順:「管理メニュー」→「互換モジュール」→「ブロックのインストール」→「カスタムブロック追加」
ALTSYSモジュールでの手順:「管理メニュー」→「ALTSYS」→「カスタムブロック」→「(新規)」
3. 互換モジュール:「タイトル」「コンテンツ」を入力し、「タイプ」を「PHPスクリプト」に設定し、「送信」
ALTSYS:「タイトル」「コンテンツ」*2を入力し、「カスタムブロックの種類」を「カスタム(PHP eval())」に設定し、「送信」
この方法では、「送信」した瞬間、トップページが真っ白なんてことも起こりかねません…。それに、作り込むのもえらく大変です。
安全に楽に!賢い作り方
賢い作り方は、画面真っ白リスクを最小限にして、作り易い方法で作っていきます。基本的な作り方は、「普通の作り方」と同じですが、賢い作り方は最初が違います。今日の日付を表示するカスタムブロックを作るのを例にとって説明していきましょう。
- まず、mainfile.phpがあるフォルダに「blocks」というフォルダを作ります。
- 次に、「blocks」フォルダの中に、PHPファイルを作ります。今回は、「today_date.php」という名前にします。
- そして、「today_date.php」をエディターで開き、最初に以下のコードを書きます。2行目のプログラムがうじゃうじゃ書いてあるのはおまじないだと思ってください。
<?php if ( !defined('XOOPS_ROOT_PATH') ) require dirname(dirname(__FILE__)).'/mainfile.php'; // おまじない // ここにやりたい命令文を書く ?>
- 最後に、「// ここにやりたい命令文を書く」のところに、以下のコードを追加して、今日の日付を表示するプログラムを組み込みます。
echo "今日は、".date('Y/m/d')."です。";
<?php if ( !defined('XOOPS_ROOT_PATH') ) require dirname(dirname(__FILE__)).'/mainfile.php'; echo "今日は、".date('Y/m/d')."です。"; ?>
これで、実際に動くかテストすることにしますが、このコードをカスタムブロックにそのままコピーするわけではありません!それでは、危ない普通の作り方と同じになってしまうからです。賢い作り方では、まずブロック単体でのテストをします。先ほど、today_date.phpは/blocksの下に作りました。つまり、http://あなたのXOOPS/blocks/today_date.phpにアクセスすれば動作確認できるのです。実際にアクセスしてみて、思った通りの表示になっていることを確認します。そして、表示に問題がなくエラーも出ていなければ、管理メニューに行ってカスタムブロックを作るページを開きます。
ここでも、上のコードをカスタムブロックにそのままコピーするわけではありません!せっかく、ファイルになっているので、それをロードする(読み込む)コードだけを書いて、カスタムブロックの「コンテンツ」をすっきりさせてしまいましょう!そのために以下のコードをコピーして、カスタムブロックの「コンテンツ」にそのまま貼りつけます。「作ったファイル名」の部分は、適宜書き換えてください。うまく張り付けられたら、「送信」します。すると、うまくカスタムブロックが表示されているはずです。
$file = 'today_date.php'; // 作ったファイル名
// 以下おまじない
$path = XOOPS_ROOT_PATH.'/blocks/'.$file; // ファイルの場所を特定
if ( file_exists($path) ) require $path; // ファイルが存在すれば読み込む
実は、ファイルでカスタムブロックを作っておいたのは、他にも意味があります。それは、カスタムブロックの表示や動作を変更する日が来るのに備えて、編集しやすい形にしておくということです。もし、コードが管理画面のフォームに書かれていると、コードの見通しがよくなく編集しにくくなります。しかし、ファイルになっていれば、エディターで広い画面でコードを修正できます。便利ですよね。もし、PHPでカスタムブロックを作ることがあれば、ぜひ賢い方法をお試しください。
*1 もし万が一真っ白になって管理画面へのリンクが無くなってもご心配なく。http://url_to_your_xoops/admin.phpなどのURLを直接たたけば、管理画面に行くことは可能です。*2 「コンテンツ」はFckEditorを使っている場合は、「ソース」をクリックのあとコンテンツを入力。