LOGIN ID Password Auto Login Register Now! Lost Password?
XOOPS2BasicManual
About XOOPS
JavaScriptをOnでご覧ください。

6.3 ブロックの概念

ブロックシステム概要

XOOPSの外観上の特徴とも言えるのが、ブロックです。

単独のPHPアプリケーション + ブロック + ログイン機能 == XOOPS

などと、意地の悪い書き方もされるくらい、ブロックは重要な要素となっています。

しかし、その割に XOOPS 2.0.xのブロック実装は、実は完全な作りかけであり、いろいろな意味で、XOOPSらしくありません。実装としても、newblocksテーブルに対して、直接ゴリゴリとやっています。

本家版XOOPS 2.1/2.2 では、このあたりの実装をきちんと行い、newblocksテーブルに対して、blockinstancesテーブルを作るなど、かなりまともになってい ますが、結果的に、従来のモジュールとの互換性、という問題に直面してしまっています。

XOOPS 2.0.xにおけるブロックは、以下の要素を持ちます。

  • ブロックID ... 各ブロックが固有に持つ番号です
  • 所属モジュール ... モジュールブロックでは、その親モジュール番号を保持しています
  • 関数番号 ... モジュールブロックにおける、ブロックアップデート時の識別子として利用されている番号ですが、やや実装がおかしいようです。
  • オプション ... 各ブロックはオプション値を任意の個数持ちます。各引数は、半角の|で区切られています。
  • 名前 ... モジュールが用意した初期ブロック名です。
  • タイトル ... サイト管理者が名づけるブロック名です。
  • 内容 ... カスタムブロックにだけ意味を持ちます。
  • 表示位置 ... 0〜5の数値をとり、それぞれ、左・右・中央左・中央右・中央という意味になりますが、実際にどこに表示されるかは、テーマ次第です。
  • 表示順 ... 数値をとり、同一の表示位置同士で比較し、大きいものほど下に表示されることになります。
  • タイプ ... 以下の5種類が用意されています。
    • S ... システムブロック
    • M ... モジュールブロック
    • D ... 複製されたモジュールブロック
    • C ... カスタムブロック
    • E ... 複製されたカスタムブロック(実装なし)
  • カスタムブロックタイプ ... カスタムブロックの場合にのみ意味を持ちます。
    • H ... テキストサニタイザ 処理をなにも通過しない通常カスタムブロック
    • P ... 内容がPHPのeval()に渡される特殊なカスタムブロック
    • T ... テキストサニタイザ 処理を一通りかける通常カスタムブロック
    • S ... Tと同じだが、なぜかSmileyだけが無効化された通常カスタムブロック
  • 表示のON/OFF
  • モジュールのディレクトリ
  • ブロック処理関数の存在するファイル
  • 表示関数名
  • 編集関数名
  • テンプレート
  • キャッシュ時間
  • 最終更新時間
ブロックとモジュール

ブロックは、どこのページに表示するかを、モジュール単位で決定することができます。
(XOOPS 2.1/2.2は、モジュールのどのページ、という部分まで指定可能)

これも当然ですが、1つのモジュールに複数のブロックを表示することもできますし、複数のモジュールで同一のブロックを表示することもできます。

ブロックと表示対象モジュールを結びつけているのが、block_module_linkテーブルです。

表示対象モジュールには2つだけ例外が存在します。

  • モジュール番号-1: トップページ
  • モジュール番号0: すべてのページ

ブロックに対して、その表示対象モジュールを指定したい場合、blocksadminモジュールを利用するのが一番です。

ただし、あるモジュール(トップページも含む)について、表示されるブロックの一覧をみたり、順番を変更する、という使い方に限っては、 ブロック管理 の方が使いよいでしょう。

カスタムブロック

通常のブロックは、モジュールが提供しますが、モジュールとは独立して存在するのが「カスタムブロック」です。

カスタムブロックは4種類あります。(上記ブロックシステム概要を参照)

そのうち、PHPカスタムブロックだけは特殊で、PHPのeval()関数の引数となります。つまり、出力する場合には、echo文を書くわけです。

また、PHPファイルと異なり、最初からPHPモードになっているため、<?php ?>でくくる必要はありません。その逆に、?> <?php という形で挿入することで、HTMLモードに切り替えることは可能です。

eval()関数の内側は、関数の様なスコープになっていますので、$xoopsUserなどのグローバル変数を利用する場合には、global宣言を使うか、スーパーグローバル変数$GLOBALSを利用する必要があることに注意してください。

それ以外の、通常カスタムブロックの3種類については、内容が出力される前にどのような処理がなされるかだけの違いです。

ブロック管理 において、デフォルトで選択されている「HTMLブロック」は、 テキストサニタイザ を通過しないため、BB Codeの展開などもされないことも意外と知らない人が多く、FAQになっています。

また、カスタムブロックはいずれも、system_block_dummy.html というテンプレートを共通に利用します。このテンプレートは、カスタムブロックだけでなく、テンプレートを利用しないすべてのブロックについて利用される ので、このテンプレートを編集すると、それらがすべて影響を受ける点に注意が必要です。

なお、カスタムブロックについても、blocksadminモジュールを利用するのが最善の管理方法と言えるでしょう。


Previous
6.4 テキストサニタイザ
Top of contents Next
6.2 グループの概念
Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities