tohokuaikiのチラシの裏

技術的ネタとか。

NetCommonsで使われているJavaScriptフィあるが、ファイルを修正しても反映されないのでCSSと同じようにやってしまった

以前の記事
NetCommonsで使われているCSSが、ファイルを修正しても反映されないのでついカッとなってやってしまった。 - ・・・tohokuaikiのチラシの裏(それ図解できたらいいなぁ)
と同様にJavaScriptも変更されるようにした。CSSはデザイナにはおおむね好評だった。そりゃそーだよな。

js_auto_update.php

<?php
function js_auto_update()
{
	global $db, $where_params, $order_params;

	$result = $db->selectExecute("javascript_files", $where_params, $order_params);

	foreach ($result as $row){
		$dir = sprintf('%s/webapp/modules/%s/files/js/default',
					   BASE_DIR, $row['dir_name']);
		// get all js files
		$js_contents = '';
		$do_update = false;
		if (file_exists($dir) && is_dir($dir)) {
			if ($dh = opendir($dir)) {
				while (($file = readdir($dh)) !== false) {
					if (preg_match('/^\.+$/', $file)) continue; 
					$js_file = $dir.'/'.$file;
					$js_contents .= file_get_contents($js_file);
					$utime = date('YmdHis', filemtime($js_file));
					if ( $row['update_time'] < $utime){
						echo "/*  $js_file    */\n";
						$do_update = true;
					}
				}
				closedir($dh);
			}
		}
		
		if ($do_update){
			$row['data'] = $js_contents;
			$row['update_time'] = $utime ;
			$where_params = array(
				'dir_name' => $row['dir_name'],
				);
			$db->updateExecute('javascript_files', $row, $where_params);
		}
	}
}
js_auto_update();

って作って、htdocs/js.phpの64行目に

<?php
$order_params = array("read_order" => "ASC");
include dirname(__FILE__).'/js_auto_update.php';
$result = $db->selectExecute("javascript_files", $where_params, $order_params, null, null, "_fetchcallbackJs");

って入れてやる。

何故か、1回リロード余分にしないとうまく動かないが、まぁいいや。