tohokuaikiのチラシの裏

技術的ネタとか。

NetCommonsで使われているCSSが、ファイルを修正しても反映されないのでついカッとなってやってしまった。

NetCommonsで使われているCSSを編集したかったんだけど、どーも反映されない。

んー、って思って調べてみたら、DBからCSSをロードしてる。

なんでそんな・・・・と思ったけど、そう言うことらしい。
NetCommons2公式サイト

テーマはwebapp/style/themes/下にそのテーマ用にフォルダ作るんだけど、そのままじゃ利用できなくて、管理画面のモジュール管理から一括アップデートかけないとhtdocs下に反映されない。

#アップデートログ見てると、グローバルファイルコピーってので、コピーされてるっぽいんだが、この作業だけ行う方法が不明。

だって。

こんなの毎回やってらんねー。XOOPSだと、開発環境でならALTSYS使って一発なのに。


ってことで、見境なくハック!!

htdocs/css.phpの70行目に

<?php
//$order_params = array();
include dirname(__FILE__).'/css_auto_update.php';
$result = $db->selectExecute("css_files", $where_params, $order_params, null, null, "_fetchcallbackCss");

ってcss_auto_update.phpをincludeさせる。

で、css_auto_update.phpの内容は

<?php
function css_auto_update()
{
	global $db, $where_params, $order_params;
	
	$result = $db->selectExecute("css_files", $where_params, $order_params);
	
	foreach ($result as $row){
		$path = '***';
		$_path = $row['dir_name'];
		if (preg_match('@^/themes/@', $_path)){
			$path = STYLE_DIR.$_path;
		}
		else {
			$_path_info = explode('/', trim($_path, '/'),  2);
			if (count($_path_info) == 2){
				$path = sprintf('%s/webapp/modules/%s/files/css/%s', 
								BASE_DIR, $_path_info[0],$_path_info[1] );
			}
		}
		if (file_exists($path)){
			$utime = date('YmdHis', filemtime($path));
			if ( $row['update_time'] < $utime){
				$row['data'] = file_get_contents($path);
				$row['update_time'] = $utime ;
				$where_params = array(
					'dir_name' => $row['dir_name'],
					'type' => $row['type'],
					'block_id' => $row['block_id'],
					);
				$db->updateExecute('css_files', $row, $where_params);
			}
		}
	}
}
css_auto_update();

もう、何が正解だかわけわかんないけど、とりあえずこれで2回リロードすれば効くようになった。よっしゃぁああぁぁ!!!