PEAK XOOPS - XCL2.1でのXoopsTplフック方法 in englishin japanese

Archive | RSS |
XOOPS
XOOPS : XCL2.1でのXoopsTplフック方法
Poster : GIJOE on 2007-11-01 06:03:50 (9945 reads)

in englishin japanese
XCDM#1でも発表したネタなのですが、XCL2.1ではpreload一発で、レンダラーのかなり大きな部分をフックすることができます。
preloadでフックするべきデリゲート名は、おなじみ 'XoopsTpl.New' です。

まずはソースコードを見てください。

フック処理が来た直後に、
XOOPS_TRUST_PATH/libs/smartyplugins
を、Smartyプラグイン用ディレクトリとして挿入してます。

「これ、どこかで見たことあるな」と思った人は勘がいいです。まさに、
http://ryus.co.jp/modules/wordpress/index.php?p=57
と同じですから。

でも、ryusSmartyPluginsEx との違いは、追加ではなく挿入していることです。
ユーザディレクトリから先に探すことにより、デフォルトのSmartyプラグインを乗っ取ることができるのです。

そして、乗っ取って一番面白いのは、やはり resource.db.php でしょう。XOOPS_TRUST_PATH/libs/smartyplugins/resource.db.php にDBリソースの見つけ方を記述することで、テンプレートの動作を自由にコントロールできます。(その具体例は次回)

このpreloadにおける hook()メソッドでは、それ以外に、コンパイルIDの指定を行っています。これによって、テーマ毎に異なるコンパイルキャッシュを生成するようになり、テーマを切り替えたけどテンプレートは切替前のテーマ付属のテンプレートのまま、というトラブルを避けることができます。

このあたりは、本家版コアのパクリですが、コアの構成ファイルを一切おきかえずとも、このような重要な仕様改善ができるというのは、まさにXCL2.1の真骨頂でしょう。

preload/HdXoopsTplHook.class.php


<?php

class HdXoopsTplHook extends XCube_ActionFilter
{
	function preBlockFilter()
	{
		$this->mRoot->mDelegateManager->add( 'XoopsTpl.New' , array( $this , 'hook' ) ) ;
	}

	function hook( &$xoopsTpl )
	{
		global $xoopsConfig ;

		array_unshift( $xoopsTpl->plugins_dir , XOOPS_TRUST_PATH.'/libs/smartyplugins' ) ;
		$compile_id = $xoopsConfig['template_set'] . '-' . $xoopsConfig['theme_set'] ;
		$xoopsTpl->compile_id = $compile_id ;
		$xoopsTpl->_compile_id = $compile_id ;
	}
}

?>


Printer friendly page Send this story to a friend

Comments list

gigamaster  Posted on 2007/12/15 0:40
Hi,

I test the resource.db.php hack to load theme templates
it's a very easy solution (only tested with legacy modules)
Imagine to personalize almost every 'output' element and
extend with extra smarty plugins... Freedom and Fun !

GIJOE  Posted on 2007/12/13 6:22
Of course, I shall write the next content
suico  Posted on 2007/11/29 19:43
Sorry GIJOE, what is the purpose of hooking? Can you show me an example ? I don t understand the use of it. Is it like the smarty plugins ?
Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!