スタッフブログ

  • 最新配信
  • RSS

ブロック管理を表示モジュールでフィルタリングしてみた

hamaco : XOOPS » TIPS小ネタ 2010/8/19 18:22

Blogger's Avatar

こんにちはこんにちは hamacoです。

主にJavaScriptを使ってXOOPSサイトとプチカスタマイズしてみよう の第3回です。
今回はブロック管理をちょこっとカスタマイズしてみようと思います。

XOOPSのブロック管理画面は通常、表示設定がされているブロックが全て一覧で出てくると思いますが、これを表示されるモジュール毎にフィルタリングが出来るようにしてみたいと思います。
あまり使ったことがないのですが、XOOPS2にはそんな感じの機能がデフォルトであるらしいですね。

※今回のはlegacyモジュールや、themes/adminの下を弄ったりする為XCLをアップデートする際注意が必要になるかもしれません。

JavaScriptだけでやるには色々データが足りないので、まずブロック一覧が表示されるページのプログラムを弄ります。

XOOPS_ROOT_PATH/modules/legacy/admin/actions/BlockListAction.class.phpの89行目にある、executeViewIndexアクションを以下のように置き換えます。
function executeViewIndex(&$controller, &$xoopsUser, &$render)
{
	$render->setTemplateName("block_list.html");
	foreach (array_keys($this->mObjects) as $key) {
		$this->mObjects[$key]->loadModule();
		$this->mObjects[$key]->loadColumn();
		$this->mObjects[$key]->loadCachetime();
					$this->mObjects[$key]->loadBmodule();
	}

	//
	// Build active modules list and set.
	//
	$handler =& xoops_gethandler('module');
	$moduleArr[0] =& $handler->create();
	$moduleArr[0]->set('mid', -1);
	$moduleArr[0]->set('name', _AD_LEGACY_LANG_TOPPAGE);
	
	$moduleArr[1] =& $handler->create();
	$moduleArr[1]->set('mid', 0);
	$moduleArr[1]->set('name', _AD_LEGACY_LANG_ALL_MODULES);

	$criteria =& new CriteriaCompo();
	$criteria->add(new Criteria('hasmain', 1));
	$criteria->add(new Criteria('isactive', 1));
	
	$t_Arr =& $handler->getObjects($criteria);
	$moduleArr = array_merge($moduleArr, $t_Arr);
	$render->setAttribute('moduleArr', $moduleArr);
	
	$render->setAttribute("objects", $this->mObjects);
	$render->setAttribute("pageNavi", $this->mFilter->mNavi);
	
	//
	// Load cache-time pattern objects and set.
	//
	$handler =& xoops_gethandler('cachetime');
	$cachetimeArr =& $handler->getObjects();
	$render->setAttribute('cachetimeArr', $cachetimeArr);
	
	$render->setAttribute('actionForm', $this->mActionForm);
}

次に、XOOPS_ROOT_PATH/themes/admin/modules/legacy/block_list.htmlの23行目辺り(formタグの上)に以下のコードを貼り付けます。
<select id='module_filter'>
	<{xoops_optionsArray from=$moduleArr value=mid label=name}>
</select>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script type="text/javascript">
$("#module_filter").change(function() {
	var mid = new RegExp(" " + $(this).val() + " ");

	$("form table.outer tr").each(function() {
		if ($(this).attr('bmids')) {

			console.log($(this).attr('bmids').match(mid));
			($(this).attr('bmids').match(mid)) ? $(this).show() : $(this).hide();
		}
	});
});
</script>


これで、ブロック管理ページで以下の画像のように表示先のモジュールでフィルタリングができるようになります。
通常状態

picoでフィルタリング

トラックバック

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.