tabAccordion によるサイドメニューの折りたたみ for WordPress
WordPress で tabAccordion によるサイドメニューの折りたたみについて質問を頂きましたので、本エントリーにてカスタマイズを紹介します。
このカスタマイズを行うことで、サイドメニューをサンプルの「最近のエントリー」「カテゴリーリスト」「月別アーカイブリスト」のように、アコーディオン風に折りたたむことができます。
設定は当ブログでの配布テンプレート「WordPress テーマ(テンプレート)・3カラム版」用に最適化していますが、CSSを変更すれば他のテンプレートでも応用可能です。
注:IE6で正常に動作していないため、別途確認して修正します。修正致しました。対処方法は5項へ。
1.3カラムレイアウトの修正
tabAccordion の表示幅が広いため、左サイドバーを右サイドバーの左側に移動し、サンプルと同じカラムレイアウトに変更します。
まず「アーカイブ」・「インデックス」・「シングルポスト」・「ページ」の各テンプレート編集画面を開き、左サイドバーを中央カラムの右側になる位置に移動(赤色を削除して青色を追加)します。
変更前
<?php get_header(); ?>
<?php include (TEMPLATEPATH . '/sidebar2.php'); ?>
<!-- center -->
<div id="content">
<div class="blog">
:
変更後
:
<?php include (TEMPLATEPATH . '/sidebar2.php'); ?>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
次に「スタイルシート」編集画面を開き、中央カラムの左罫線(赤色部分)を削除します。
/* for 3 columns fixed layout */
.layout-three-column #content {
float: left;
width: 478px;
margin: 0 0 10px 0;
border-bottom: 1px solid #669;
border-left: 1px solid #669;
border-right: 1px solid #669;
}
また、フッタに clear プロパティ(青色部分)を追加します。
これはフッタの内容が短い場合、フッタがサイドバーの真下に表示される不具合を回避するためです。
#footer {
margin: 10px 0;
padding: 1px 0;
clear: both;
}
この段階でブログを表示し、カラムレイアウトが正常に変更されたことを確認してください。
2.スクリプトのダウンロード・アップロード
tabAccordion のサイトより、tabAccordion.zip のリンクをクリックしてダウンロード。
解凍した中にある、
scripts/moo.fx.js
scripts/moo.fx.pack.js
scripts/prototype.lite.js
を scripts フォルダごと、WordPress のインストールディレクトリにアップロードしてください。
3.tabAccordion の設定
「スタイルシート」に tabAccordion のスタイル(下記)を追加します。各設定がどの部分に反映されるかは、コメント(/* ~ */)を参考にしてください。
/* タブ全体 */
#wrapper {
float: left;
width: 338px;
margin: 0 auto;
padding: 20px 0 0 18px;
}
/* リスト表示部分 */
.boxholder{
clear: both;
}
/* タブ */
.tab{
float: left;
width: 110px;
_width: 106px;
}
/* タブに表示するタイトル */
.tabtxt{
margin: 0 1px 0 0;
padding-bottom: 2px;
border: 1px solid #666;
color: #444;
background: #f6f6f6;
text-align: center;
font-size: 75%;
line-height: 2.0;
}
/* リストのタイトル */
#wrapper .box h2 {
margin: 3px 0;
font-size: 83.3%;
font-weight: bold;
}
/* リストの内容 */
#wrapper .box ul {
font-size: 83.3%;
}
/* タブのリンク */
.tab a,
.tab a:link,
.tab a:visited {
color: #444;
text-decoration: none;
}
.tab a:hover {
color: #069;
text-decoration: underline;
}
/* リストの内容(p要素を用いた場合) */
#wrapper p {
margin: 0;
padding: 5px 0;
font-size: 75%;
line-height: 1.5;
/*text-align: justify;*/
}
/* リストマーク表示 */
.box ul {
padding-left: 16px;
}
html > body .box ul {
padding-left: 14px;
}
.box ul li {
magin-left: 6px;
}
「ヘッダー」テンプレートの head 終了タグの前に下記を追加します。これは tabAccordion スクリプトを起動するための設定です。
<script type="text/javascript" src="<?php bloginfo('wpurl'); ?>/scripts/prototype.lite.js"></script>
<script type="text/javascript" src="<?php bloginfo('wpurl'); ?>/scripts/moo.fx.js"></script>
<script type="text/javascript" src="<?php bloginfo('wpurl'); ?>/scripts/moo.fx.pack.js"></script>
<script type="text/javascript">
function init(){
var stretchers = document.getElementsByClassName('box');
var toggles = document.getElementsByClassName('tab');
var myAccordion = new fx.Accordion(
toggles, stretchers, {opacity: false, height: true, duration: 600}
);
//hash functions
var found = false;
toggles.each(function(h2, i){
var div = Element.find(h2, 'nextSibling');
if (window.location.href.indexOf(h2.title) > 0) {
myAccordion.showThisHideOpen(div);
found = true;
}
});
if (!found) myAccordion.showThisHideOpen(stretchers[0]);
}
</script>
赤色で示した部分は、次に設定する tabAccordion 本体の中にある (X)HTML 要素あるいは class 属性名と対応しています。(X)HTML マークアップを変更する場合は、上記の赤色部分も併せて変更してください。
最後に tabAccordion で表示される本体(下記)を、「サイドバー2」の先頭に追加します。カラムレイアウトの構造上、先頭に追加しないとレイアウトが崩れますのでご注意ください。
<div id="wrapper">
<div id="tabcontent">
<div class="tab"><h2 class="tabtxt" title="first"><a href="javascript:;">Entries</a></h2></div>
<div class="tab"><h2 class="tabtxt" title="second"><a href="javascript:;">Categories</a></h2></div>
<div class="tab"><h2 class="tabtxt" title="third"><a href="javascript:;">Archives</a></h2></div>
<div class="boxholder">
<div class="box">
<h2>Recent Entries</h2><ul><?php get_archives('postbypost', '10','custom' ,'<li>' ,'</li>'); ?></ul>
</div>
<div class="box">
<h2>Categories</h2><ul><?php wp_list_cats('sort_column=name&optioncount=1&hide_empty=1'); ?> </ul>
</div>
<div class="box">
<h2>Archives</h2><ul><?php wp_get_archives('show_post_count=true'); ?></ul>
</div>
</div>
</div>
</div>
<script type="text/javascript">
Element.cleanWhitespace('tabcontent');
init();
</script>
赤色で示した部分は必ず同じ名称にしてください。
なお、表示内容はお好みにカスタマイズしたいと思いますので、タグの構造を簡単に説明しておきます。
<div id="wrapper"> ← tabAccordion 全体
<div id="tabcontent">
↓ タブ表示部分
<div class="tab"><h2 class="tabtxt" title="first"><a href="javascript:;">[1番目のタブタイトル]</a></h2></div>
<div class="tab"><h2 class="tabtxt" title="second"><a href="javascript:;">[2番目のタブタイトル]</a></h2></div>
<div class="tab"><h2 class="tabtxt" title="third"><a href="javascript:;">[3番目のタブタイトル]</a></h2></div>
↓ タブをクリックした時に表示される部分
<div class="boxholder">
<div class="box">
[1番目に表示するリストの内容]
<div class="box">
[2番目に表示するリストの内容]
</div>
<div class="box">
[3番目に表示するリストの内容]
</div>
</div>
</div>
</div>
↓ tabAccordion スクリプトを起動
<script type="text/javascript">
Element.cleanWhitespace('tabcontent');
init();
</script>
青色のカッコ書きで示した部分は適宜変更可能ですので、お好みのリストを表示させてください。
また、各 ID 属性、class 属性名は変更可能ですが、ひとつ前のリストにある名称および、スタイルシートと名称が一致するようにしてください。
4.折りたたみ速度を変更する
速度を変更する場合は、「ヘッダー」テンプレート直前に設定した、
toggles, stretchers, {opacity: false, height: true, duration: 600}
の赤色部分を変更してください。
5.IE6 で正常に動作しない場合の対処
ページの先頭に XML 宣言が記述されている場合、IE6 では正常に動作しないようです。IE6 で動作させたい場合は XML 宣言を削除してください。
2007.12.12
script 要素の内容を修正しました。



