モジュール別スタイルシート読み込み

モジュールのテンプレートはbody要素の内側なので、直接link rel=stylesheetを書くのははばかられるし、XCLのテンプレートシステム使って管理、編集したいよなぁ、って事で。
スタート地点はhead要素内にlink要素を埋め込む事。index.phpにこんな感じで埋め込み

$link = '<link rel="stylesheet" type="text/css" media="screen" href="'.XOOPS_URL.'/modules/sample/main.css" />';
$xoopsTpl->assign('xoops_module_header',$link);

テーマの中に<{$xoops_module_header}>てあるからそこにlink要素のタグ文字列をアサインすればいい。
これだとXCLのテンプレートシステムが使えない。そこで、テンプレートを展開するだけのphpスクリプトを書いて、テンプレートシステムから取得したスタイルシートをcontenttype:text/cssで吐き出させれば良い。
モジュール直下にこんなスクリプトを置く。名前は何でもいいがとりあえずmodheader.phpとかにするか。

<?php
require_once "../../mainfile.php";

// send header
if( ! headers_sent() ) {
	$cache_limit = 3600 ;

	session_cache_limiter('public');
	header("Expires: ".date('r',intval(time()/$cache_limit)*$cache_limit+$cache_limit));
	header("Cache-Control: public, max-age=$cache_limit");
	header("Last-Modified: ".date('r',intval(time()/$cache_limit)*$cache_limit));
	header('Content-Type: text/css') ;
}
require_once XOOPS_ROOT_PATH.'/class/template.php' ;
$tpl =& new XoopsTpl() ;
$tpl->display( 'db:main.css' ) ;
exit ;
?>

次にテンプレートディレクトリにmain.cssを配置。中身はモジュールしだいでいかようにでも。

/*たとえばこんなスタイル*/
h4{
 color : red;
}

モジュールインストールかアップデートするとmain.cssがテンプレートシステムに加わる。
index.phpでやったxoops_module_headerへのアサインを変更。

$link = '<link rel="stylesheet" type="text/css" media="screen" href="'.XOOPS_URL.'/modules/sample/modheader.php" />';
$xoopsTpl->assign('xoops_module_header',$link);

これでテンプレートに登録されたスタイルが吐き出されるはず。