本家版2.0.14/15のハマリ点

Date 2006-08-30 12:52:23 | Category: XOOPS

in englishin japanese
本家版2.0.14では、テンプレートの扱いが大きく変わった、ということだけは知っていたのですが、wrapsが動かない、という症状を改善するためにあちこち追ってみて、どこなのかがようやくわかりました。

いわゆる肝は1箇所だけです。下のソースコードを読むのが一番手っ取り早いのですが、一応解説します。

- 利用テンプレートセットがdefault以外なら従来通りのDBテンプレート方式
- 利用テンプレートセットがdefaultの時だけ、FILEテンプレートに切り替わる
-- /themes/(テーマ)/modules/(dirname)/(テンプレートファイル) があれば、そのFILE (1)
-- なければ /modules/(dirname)/templates/(テンプレートファイル) からのFILEテンプレート (2)
-- それもなければ…空テンプレート (3)

俺的とX2の折衷案、という表現が正しいでしょうか。
ただ、この処理には参りました。というのも、D3モジュールでは、そもそも、そこにテンプレートファイルはありませんから、defaultテンプレートセットを利用されていると、テンプレートが読み込まれません。

というわけで、(3)の部分の改良をリクエストします。(コードでの赤字の部分)

-- それもなければ…DBテンプレートを読み込む (3)

これでバッチリです。お〜い、Skalpaさん、見てる?

class/smarty/xoops_plugins/resource.db.php

function smarty_resource_db_tplinfo( $tpl_name ) {
	static $cache = array();
	global $xoopsConfig;

	if ( isset( $cache[$tpl_name] ) ) {
		return $cache[$tpl_name];
	}
	$tplset = $xoopsConfig['template_set'];
	$theme = isset( $xoopsConfig['theme_set'] ) ? $xoopsConfig['theme_set'] : 'default';
	
	$tplfile_handler =& xoops_gethandler('tplfile');
	// If we're not using the "default" template set, then get the templates from the DB
	if ( $tplset != "default" ) {
		$tplobj = $tplfile_handler->find( $tplset, null, null, null, $tpl_name, true);
		if ( count( $tplobj ) ) {
			return $cache[$tpl_name] = $tplobj[0];
		}
	}
	// If we'using the default tplset, get the template from the filesystem
	$tplobj = $tplfile_handler->find( "default", null, null, null, $tpl_name, true);

	if ( !count( $tplobj ) ) {
		return $cache[$tpl_name] = false;
	}
	$tplobj = $tplobj[0];
	$module = $tplobj->getVar( 'tpl_module', 'n' );
	$type = $tplobj->getVar( 'tpl_type', 'n' );
	$blockpath = ( $type == 'block' ) ? 'blocks/' : '';
	// First, check for an overloaded version within the theme folder
	$filepath = XOOPS_THEME_PATH . "/$theme/modules/$module/$blockpath$tpl_name";
	if ( !file_exists( $filepath ) ) {
		// If no custom version exists, get the tpl from its default location
		$filepath = XOOPS_ROOT_PATH . "/modules/$module/templates/$blockpath$tpl_name";
		
		if ( !file_exists( $filepath ) ) {
			return $cache[$tpl_name] = $tplobj ;
		}
		
	}
	return $cache[$tpl_name] = $filepath;
}





You can read more news at PEAK XOOPS.
http://xoops.peak.ne.jp

The URL for this story is:
http://xoops.peak.ne.jp/md/news/index.php?page=article&storyid=354