にゃあ

XOOPS Cube + preload でカスタムブロックを作成する方法

カスタムブロックは、通常legacyモジュールやaltsysで作ることができます。ここでは、プリロードでカスタムブロックを作ることを紹介します。

その前に、ここで紹介するTipsは、管理画面でカスタムブロックを作るより、はるかに回りくどくPHPの知識が必要な点を注意しておきます。なので、特殊な機能や要件を必要としない限り、カスタムブロックは管理画面で作るべきです。

まず、XOOPS Cubeのプリロードでカスタムブロックを作るメリットはいくつかあります。

  • ファイルとして配布できる
  • ファイルなので、不要になれば削除するだけ
  • PHPなどの複雑なロジックが書きやすい(通常のカスタムブロックでもPHPは使えます)

特にこの中でも、ファイルとして扱えるメリットは大きいです。たとえば、開発環境で一定の変数を出力したりとデバッグ用途にブロックをプリロードで実装します。あとは、公開するときにプリロードを削除するだけで、データベースを汚したりすることは一切ありません。管理画面で操作するブロックだと、ついつい消し忘れ・消し損ないなんてこともありますが、プリロードだとファイルを確実に削除すれば、消し損なうこともありません。

ダウンロード

次に、プリロードのソースを紹介します。16行目の$indexが、ブロックを表示する位置になります。l, r, cl, cc, crの順に、左・右・中央左・中央中・中央右を意味します。

18行目から22行目はブロックの表示に関する設定です。nameはブロック名で、アルファベット英数ですきな名前を指定します。titleはブロックの題目で、ブロックの上部に表示されます。contentはブロックの内容で、HTMLなどで書くことができます。weightはブロックの並び順で、数値が小さいほど上に、数値が多きほど下にブロックが表示されます。

<?php
/**
 * A simple description for this script
 *
 * PHP Version 5.2.4 or Upper version
 *
 * @package    PreloadBlock
 * @author     Hidehito NOZAWA aka Suin <http://suin.asia/>
 * @copyright  2009 Hidehito NOZAWA
 * @license    http://www.gnu.org/licenses/gpl-2.0.html GNU GPL v2.0
 *
 */

class PreloadBlock extends XCube_ActionFilter
{
	protected $index = 'l';
	protected $block = array(
		'id'      => -1,
		'name'    => 'preload_block',
		'title'   => 'プリロードブロック',
		'content' => '<i>ブロックの内容</i>',
		'weight'  => -1, // 並び順
	);
	protected $indexes = array(
		'l' => 0,
		'r' => 1,
		'cl' => 3,
		'cr' => 4,
		'cc' => 5
	);
	protected $blocks = array(
		'l' => 'xoops_lblocks',
		'r' => 'xoops_rblocks',
		'cl' => 'xoops_clblocks',
		'cr' => 'xoops_crblocks',
		'cc' => 'xoops_ccblocks'
	);

	public function postFilter()
	{
		if ( $this->mController->_mStrategy->mStatusFlag != LEGACY_CONTROLLER_STATE_PUBLIC )
		{
			return;
		}

		$this->mRoot->mDelegateManager->add('Legacy_RenderSystem.BeginRender', array(&$this, 'beginRender'));
		$this->mRoot->mContext->mAttributes['legacy_BlockShowFlags'][$this->indexes[$this->index]]  = true;
		$this->mRoot->mContext->mAttributes['legacy_BlockContents'][$this->indexes[$this->index]][] = $this->block;
	}

	protected function beginRender(&$tpl)
	{
		if ( !empty($tpl->_tpl_vars['isFileTheme']) )
		{
			uasort($tpl->_tpl_vars[$this->blocks[$this->index]], array(&$this, 'reOrder'));
		}
	}

	protected function reOrder($a, $b)
	{
		if ($a['weight'] == $b['weight'])
		{
			return 0;
		}
		return $a['weight'] > $b['weight'] ? 1 : -1;
	}
}

?>

なお、このプリロードはしゃのさんのnowプリロードを参考にさせていただきました。


コメント&トラバ

トラックバックを送る

無関係なスパムのトラックバックを防止するため、リンク先で本サイト(suin.asia)への言及が確認されないトラックバックは破棄しています。

トラバURL : http://suin.asia/trackback/320

コメントを書く

お名前* URL
本文*
合い言葉* ←「toesimpapa」と入力して下さい。
* この記事の話題と関係ないコメントはどんな内容でも削除します。(移動できないので)

トラックバック

トラックバックがないのはさみしいにゃん…。

コメント

コメントはないです。誰かコメント書いてよぅ…。

このブログの著者


Suinと申します。

@suin on Twitter

サブメニュー

最近気になるモノ!

WindowsからMacに乗り換えて半年ですが、Macは細かいところまで丁寧に作られていて、親切なユーザーインターフェイスが気に入ってます。iMacはMagic Mouseと洗練されたデザインのBluetoothキーボードがついてくるので、お得だなあ、なんて思ってます。私に買ってもいいという方、いたら教えてください 笑。

最近のエントリ

XOOPS Cube Dev Ring

最近のコメント

最近のトラックバック

ひとりで喜ぶログ
デュラララに登場するチャットを再現した (04/09)
ひとりで喜ぶログ
デュラララに登場するチャットを再現した (03/28)
http://www15.atpages.jp/~classicalstudio/wordpress/?p=50
getcwd()とdirname(__FILE__)は違う結果になるときがある (12/22)
Re:
CSSのtext-align:center;は<div>には通用しない (12/15)
XOOPS専門-株式会社RYUS - d3blog
Shiori 1.02 (12/02)
9deMaio.com - blog
Koins 1.00 (11/11)
インターネット覚え書き「ビボウログ」
CSSのtext-align:center;は<div>には通用しない (09/16)
hinoeuma1966
CSSのtext-align:center;は<div>には通用しない (07/03)
Suin.org
ブログ作ってみた (03/23)
Suin.org
ブログ作ってみた (03/23)