サブカテゴリーリストのエクスプローラ風折りたたみ
当サイトでこれまで紹介してきた「サブカテゴリーリストの折りたたみ」カスタマイズは、「折りたたみマーク(+ツリー化)」という形式が主体でしたが、新たに Windows のエクスプローラのツリー表示と同じように、タイトルの左側に折りたたみ画像を表示し、折りたたみ状態によって画像を切り替えられるカスタマイズを紹介致します。
ここでは、Movable Type のデフォルトテンプレート(スクリーンショット)および公開テンプレートでのカスタマイズ方法について説明します。
1.スクリプトのダウンロード
下記のリンクをクリックし、リンク先のページにある menufolder.js のリンクをクリックしてダウンロードしてください。
2.menufolder.js の設定変更
ダウンロードした menufolder.js を任意のエディタで開き、下記のように該当部分を青色の内容に変更してください。
// サブカテゴリー用折りたたみマーク
// 上:閉じている状態で表示されるマーク
// 下:開いている状態で表示されるマーク
var openMarkForSubCategories = '<img src="close.png" style="border:none;vertical-align:middle;" />';
var closeMarkForSubCategories = '<img src="open.png" style="border:none;vertical-align:middle;" />';
// サブカテゴリー用折りたたみマーク挿入位置
// カテゴリー前に折りたたみマークを配置:true
// カテゴリー後に折りたたみマークを配置:false
var preMarkForSubCategory = true;
// サブカテゴリーのタイトルとマークのスペース
var offsetForTitleAndMarkOfSubcategory = 1;
3.スクリプトのアップロード
menufolder.js の修正が終わったら保存し、メインページと同じディレクトリにアップロードしてください。
4.テンプレートに script 要素追加
サブカテゴリーリストの折りたたみを利用する各テンプレートの </head> の直前に下記のタグを追加してください。charset 属性は menufolder.js の文字コードを指定してください(分からなければとりあえずサンプルのまま貼り付けてください)。
<script type="text/javascript" src="<$MTBlogURL$>menufolder.js" charset="utf-8"></script>
5.テンプレートにサブカテゴリーリスト表示用タグを追加
デフォルトテンプレートの場合は5.1項、公開テンプレートの場合は5.2項のサブカテゴリーリスト表示用タグを、表示したいテンプレートの任意の位置に追加します。
5.1 公開テンプレート
<div class="sidetitle">
Categories
</div>
<div class="side">
<div id="categories">
<MTTopLevelCategories>
<MTSubCatIsFirst><MTHasParentCategory><div id="subcategories<MTParentCategory><$MTCategoryID$></MTParentCategory>list"></MTHasParentCategory><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>] <MTHasSubCategories></div></MTHasSubCategories>
<MTElse>
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><MTCategoryLabel> <MTHasSubCategories></div></MTHasSubCategories>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul><MTHasParentCategory></div></MTHasParentCategory></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>
<script type="text/javascript">
<!--
<MTTopLevelCategories>
<MTHasSubCategories>FoldNavigation('subcategories<$MTCategoryID$>','off',false);</MTHasSubCategories>
<MTSubCatsRecurse>
</MTTopLevelCategories>
//-->
</script>
5.2 デフォルトテンプレート
<div class="module-categories module">
<h2 class="module-header">カテゴリー</h2>
<div class="module-content" id="categories">
<MTTopLevelCategories>
<MTSubCatIsFirst><MTHasParentCategory><div id="subcategories<MTParentCategory><$MTCategoryID$></MTParentCategory>list"></MTHasParentCategory><ul class="module-list"></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li class="module-list-item"><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>] <MTHasSubCategories></div></MTHasSubCategories>
<MTElse>
<li class="module-list-item"><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><MTCategoryLabel> <MTHasSubCategories></div></MTHasSubCategories>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul><MTHasParentCategory></div></MTHasParentCategory></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>
<script type="text/javascript">
<!--
<MTTopLevelCategories>
<MTHasSubCategories>FoldNavigation('subcategories<$MTCategoryID$>','initState',false);</MTHasSubCategories>
<MTSubCatsRecurse>
</MTTopLevelCategories>
//-->
</script>
6.スタイルシート変更
デフォルトテンプレートの場合は6.1項、公開テンプレートの場合は6.2項の CSS をスタイルシートに追加してください。
6.1 デフォルトテンプレート
#categories ul {
margin-left: 0;
padding-left: 0;
list-style: none;
}
#categories ul li {
padding-left: 15px;
}
div .subcategories {
margin-left: -15px;
}
6.2 公開テンプレート
#categories ul {
margin: 0 0 0 2px;
padding: 0;
list-style: none;
}
#categories ul li {
margin: 2px 0 2px 5px;
padding-left: 10px;
list-style: none;
}
#categories li li {
margin: 2px 0 2px 5px;
padding-left: 10px;
list-style: none;
}
div .subcategories {
margin-left: -15px;
}
公開テンプレートの場合は、すでに設定されている下記の CSS を削除してください。
.side #categories ul {
padding-left: 16px;
}
.side #categories ul ul {
padding-left: 10px;
}
.side #categories li {
list-style-type: circle;
}
7.画像のアップロード
下記の折りたたみマーク画像をダウンロード(Windows であれば右クリックして「名前を付けて画像を保存」を選択)し、メインページと同じディレクトリにアップロードしてください。
画像はお好みのものをご利用ください。
- Movable Type6で記事のない親カテゴリのカテゴリページを出力する方法
- Movable Typeでブログ記事が属するカテゴリアーカイブのリンクをブログ記事ページに表示する
- Movable Typeで「カテゴリ+年別」の記事一覧を表示する方法
- Movable Typeで親カテゴリーアーカイブに表示した記事のメインカテゴリまでのパンくずリストを表示する
- Movable Typeのカテゴリのベースネームについて
- Movable Typeで複数ブログのブログ記事を同名のカテゴリ別に振り分ける方法
- Movable TypeのMTIfCategoryタグとMTEntryIfCategoryタグの違い
- Movable Typeのカテゴリリストで階層別に背景画像を変更する
- Movable Typeのカテゴリ・フォルダで特定の最上位階層を表示しない方法
- Movable Typeのカテゴリリストにダミーの親カテゴリを表示する
- MTEntriesタグのcategoryモディファイアに「AND」を含むカテゴリを指定する
- ブログ記事ページに自分が属するカテゴリのツリーと直属カテゴリの他のブログ記事一覧を表示する
- Movable Type 5でのMTEntriesタグのcategory/catgoriesモディファイアの動作改善について
- 親カテゴリーアーカイブにサブカテゴリーのブログ記事を表示する場合に特定のサブカテゴリーのブログ記事をフィルタリングする
- 特定のカテゴリのブログ記事を表示する
≫ ブログの細かなナビゲーションを改善&アップグレード!【Movable Typeカスタマイズ】 from shoe-g.com 植山周志のぶっ飛びブログ
このブログをちょっと使いやすく、見やすくしようと細かなところをいくつか変更してみ... [続きを読む]
★こんばんは、初めまして★
わからないことが多いので、いつも参考にさせていただいております。
お陰様で、いろいろと助かってます。
ありがとうございます(^ω^)
ちょっとわからないことがあるので、質問よろしいでしょうか?
今、仕事でサブカテゴリーを作成しているんです。
上の図の様に作成したいのですが、どのようにすれば、開いた項目を右にインデント?することができるのでしょうか?
説明が下手ですみません(><。)
>ともんさん
こんばんは。
いつもご利用ありがとうございます。
ご質問の件ですが、冒頭のスクリーンショットを例にすると、6.1項の
#categories ul li {
padding-left: 15px;
}
の部分が右にインデントさせている部分になります。ご質問の解釈が違っておりましたら再度ご質問ください。
それではよろしくお願い致します。
こんにちは。
ゆっくりで結構ですのでよろしければ教えていただきたく。
当方のブログでこのエクスプローラ風折りたたみとツリー化を併用しているのでが、
サブカテゴリーの有るカテゴリー名と無いカテゴリー名の左端の位置を合わせたいのですがどうしたらよいでしょうか?
現在はここで紹介されているCSSは追加せず、ツリー化で紹介されているCSSのみを使うと、
サブカテゴリーの有るカテゴリーの折りたたみマークと、サブカテゴリーの無いカテゴリー名の左端が合うのでとりあえず良いかな、という状態です。
きれいに位置を揃えられたら格好よいのではないかと思いあれこれいじってみたのですが挫折しました・・・
>サラリーマンさん
こんばんは。
ご質問の件ですが、現在スタイルシートに設定されている100行目辺りの設定を下記の設定に置き換えてみてください。
#categories ul {
margin: 0 0 0 2px;
padding: 0;
list-style: none;
}
#categories ul li {
margin: 2px 0 2px 5px;
padding-left: 32px;
list-style: none;
}
#categories li li {
margin: 2px 0 2px 5px;
padding-left: 17px;
list-style: none;
}
div .subcategories {
margin-left: -13px;
}
ul.tree li {
background-image: url("http://woresite.jp/material/tree_lst_dotted.gif");
background-repeat: no-repeat;
list-style: none;
}
ul.tree li.end {
background-image: url("http://woresite.jp/material/tree_end_dotted.gif");
list-style: none;
}
また、元から設定されている360行目辺りの下のCSSは必ず削除してください。
/* サイドメニュー(サブカテゴリー用) */
.side #categories ul {
padding-left: 16px;
}
.side #categories ul ul {
padding-left: 10px;
}
それではよろしくお願い致します。
こんばんは。
素晴しく早い回答ありがとうございます。
ビッタリ合いました!
360行付近を削除してなかったのは痛かったですね。。。
他のツリー化したサイドメニューとの兼ね合いが難しそうですが、
おかげさまでヒントを得ることができました。
ちょっと悪戦苦闘してみます。
>サラリーマンさん
こんばんは。
ご連絡ありがとうございます。
他のツリー画像との干渉がもれてましたね、すいません。
セレクタ名を変更して色々お試しになってください。
ではでは!
yujiro 様
ご厚意に甘えてこちらでもお世話になります。
サブカテゴリーリストのエクスプローラ風折りたたみを使わせていただきます。
homeとアーカイブページでは(+)(?)のマークが出るのですが、
それ以外では(×)マークが出ます。正しく(+)(?)のマークが出るようにするにはどうしたらいいのでしょうか。
お手透きのときにお教えいただけないでしょうか。
>taiyooさん
こんにちは。
ご質問の件ですが、2項の
var openMarkForSubCategories = '<img src="close.png" style="border:none;vertical-align:middle;" />';
var closeMarkForSubCategories = '<img src="open.png" style="border:none;vertical-align:middle;" />';
の赤色部分を
var openMarkForSubCategories = '<img src="http://www.propatent.jp/cgi-bin/close.png" style="border:none;vertical-align:middle;" />
var closeMarkForSubCategories = '<img src="http://www.propatent.jp/cgi-bin/open.png" style="border:none;vertical-align:middle;" />';
にしてみてください。
それではよろしくお願い致します。
yujiro 様
大変ありがとうございました。ご厚意に甘えて気持ちよく使わせていただきます。
また、何かありましたら、相談させて下さい。
大変お世話になっております。親カテゴリの中にファイルを一つだけ入れると、サブカテゴリーに何件のファイルが含まれていても、親カテゴリー中のファイル数は1と表示されます。折りたたんだ状態でこれを見ると、どうも誤解を招きそうな感じがします。
親カテゴリにファイルが一件だけ入っている場合、親カテゴリのファイル数は1という表示を抹消するにはどうしたらいいか、お教え願えませんか。
お世話になります。もう一つです。うるさい問い合わせで申し訳ないと思っています。
2007/03/06-013608.php#c11044のこのページで、imegeで表示してあるサンプルでは、カテゴリーの先頭に、リスト表示用の○記号がありません。しかし、ダウンロードして作成した表示では○記号がついています。
○記号が付くと、その分でカテゴリの文字記載が窮屈になります。このページのimege画像のように表示先頭の○記号を削除する方法があれば、教えてください。
>taiyooさん
こんにちは。
2つめのご質問の件ですが、CSSを下記に置き換えてみてください。
#categories ul.module-list {
margin: 0 0 0 2px;
padding: 0;
list-style: none;
}
#categories ul.module-list li.module-list-item {
margin: 2px 0 2px 5px;
padding-left: 10px;
list-style: none;
}
#categories li.module-list-item li.module-list-item {
margin: 2px 0 2px 5px;
padding-left: 10px;
list-style: none;
}
div .subcategories {
margin-left: -15px;
}
また一つ目の質問ですが、1件の時だけ非表示にするのは困難です。
それではよろしくお願い致します。
大変ありがとうございました。お陰でカテゴリーの表示に余裕が出るようになりました。助かりました。
ところで親カテゴリーの件ですが、1件の時だけ非表示にするのは困難ということはわかりました。
読み直してみて、No10の記載は確かに誤解を招くような記載でした。失礼しました。親カテゴリー欄の末尾には数字の表示が全くでないようにする方法はないものでしょうかと、そういうご相談をさせていただいていたつもりでおりました。
お忙しい折、ご無理なご相談をするつもりはありませんので、お手透きの時、1月後でも、2月後でもお考えいただければ幸いです。
もし、数字表示を消すことが無理であれば、これはこのまま喜んで使用させて頂きます。
ありがとうございました。
>taiyooさん
こんばんは。
それであれば、タグの中にある
[<$MTCategoryCount$>]
の部分を
<MTHasParentCategory>[<$MTCategoryCount$>]</MTHasParentCategory>
にすれば大丈夫だと思いますのでお試しください。
それではよろしくお願い致します。
大変ありがとうございました。お陰ですっきりしました。
はじめまして、いつもお世話になってます。
サイドメニューをエクスプローラ風にしたところ
categoryの記事タイトルだけに小さなリストマーク(?)の●が左に付いてしまうようになりました;
ちゃんと+-の表示もされていて折りたためるのですが・・・。
どうしたら外せますでしょうか?
初歩的な質問で申し訳ありません。
>うしゃぎさん
こんばんは。
ご質問の件につきまして、すいませんが不具合が発生しているサイトのURLをご連絡頂けますでしょうか(文言だけでは適切な回答ができませんので…)。
それではよろしくお願い致します。
あ、貼り忘れてました、ごめんなさい;
まだ途中なのでごちゃごちゃしてたり、色んな意味でごめんなさい・・・;
>うしゃぎさん
こんばんは。
遅くなって申し訳ありません。
ようやく原因が分かりました。
<div id="categories">
のすぐ下に ul 要素がない(li 要素で始まってしまっている)のが原因です。
記事に掲載しているタグ再度上書きしてお試し頂けますでしょうか。
それではよろしくお願い致します。
年末でお忙しい中、本当にごめんなさい(;´Д⊂
ええっと、すぐ下というのは
<div class="sidetitle">
Categories
</div>
<div class="side">
<div id="categories">
<ul>
<MTTopLevelCategories>
という風に<div id="categories">の下に<ul>を記述するという事でしょうか?
それとも<div id="categories">の下の最初の<li>の前に<ul>を記述するという事でしょうか?
<div id="categories">の下に<ul>を記述する事で●は消すことができたのですが、文字が小さいままで、左の→と被ってしまっていて上手く表示されないのです;
<ul>か<li>の閉じ忘れが原因なのでしょうか・・・。だとしたら何処なのでしょう;;
色々弄ってはみたのですが、上手く表示されず、お手上げです・・・_| ̄|○
ちなみに小粋さんの公開テンプレートそのままなのですが・・・;;
またまたお手数かけます・・・;;
すぐに回答ください、とは言いませんので><
気長に待ってます。宜しくお願いします。
あぅ・・・タグそのままコピペしちゃいました・・・;
ごめんなさい・・・orz
訂正です↓
<div class="sidetitle">
Categories
</div>
<div class="side">
<div id="categories">
<ul>
<MTTopLevelCategories>
という風に<div id="categories">の下に<ul>を記述するという事でしょうか?
それとも<div id="categories">の下の最初の<li>の前に<ul>を記述するという事でしょうか?
<div id="categories">の下に<ul>を記述する事で●は消すことができたのですが
文字が小さいままで、左の→と被ってしまっていて上手く表示されないのです;
<ul>か<li>の閉じ忘れが原因なのでしょうか・・・。だとしたら何処なのでしょう;;
色々弄ってはみたのですが、上手く表示されず、お手上げです・・・_| ̄|○
ちなみに小粋さんの5.1公開テンプレートそのままなのですが・・・;;
連投失礼しました(´;ω;`)
>うしゃぎさん
こんばんは。
言葉足らずですいません。
ul要素は手で追加するのではなく、5.1のリストの7行目と16行目にul要素の開始タグと終了タグがあるのですが、それがページに反映されていないようにみえました。それで「記事に掲載しているタグ再度上書きしてお試し頂けますでしょうか。」と申し上げた、というのが経緯です。
なお5.1のリストはご質問を頂いた時に動作を再確認したのですが、一番外側のul要素が欠落しなかったので、コピー誤りか修正されたものと判断致しました。
もし不具合ががなおらないようでしたら、テンプレートをメールの本文に貼り付けてお送りください。
それではよろしくお願い致します。
コピーし直してもダメでしたのでメールでテンプレートを送りたいのですが
メールは何処から送れば宜しいでしょうか?
メールフォームから送ろうとしたら
「スパムの関係上送れません」という感じの文章が出て送れませんでした;
ごめんなさいー;
>うしゃぎさん
すいません。
コメントフォームにメールアドレスを入力して再度ご連絡ください。頂いたメールアドレスに私のメールアドレスをご連絡致します。
それではよろしくお願い致します。
Σあああぁ!その手がありましたねw
気づけずにすいません;;
宜しくお願いします><
>うしゃぎさん
こんばんは。
メールでも回答済ですが、バージョン4.0では一部動作しないタグがありますので、バージョン4.01にアップロード願います。
それではよろしくお願い致します。
こんにちは
現在、(001)カテゴリー名から、pmHeadChangerを使用して、pmhc=""にてカテゴリーの表示順を制御しています。
カテゴリ数が膨大にあるため、menufolder.jsを導入したいのですが、カテゴリーリストの表示順を制御する方法があれは教えていただきたいのですが。。
よろしくお願いいたします。
>つかりんさん
こんにちは。
ご質問の件ですが、「カテゴリーとフォルダを並べ替えるプラグイン(MT4以降用)」の利用をおすすめします。
それではよろしくお願い致します。
「カテゴリーとフォルダを並べ替えるプラグイン(MT4以降用)」
うまく行きました。
有難うございます!!
>つかりんさん
こんばんは。
ご連絡ありがとうございました。
うまくできたようでよかったです。
ではでは!
お手すきのときで結構ですので、教えていただけるでしょうか。
こちらの折りたたみカスタマイズを使わせていただいているのですが、
すべてのカテゴリ一覧ではなく、任意のカテゴリのみ、この表示の仕方で表示させることはできるでしょうか?
>shihorigonさん
こんにちは。
ご質問の件ですが、MT4以降をお使いであれば、5項のscript 要素を出力する部分を次のように変更してください(青色部分を追加)。
<script type="text/javascript">
<!--
<$MTSetVar name="category" value="カテゴリー名"$>
<MTTopLevelCategories>
<MTHasSubCategories>
<MTIf tag="CategoryLabel" like="$category">
FoldNavigation('subcategories<$MTCategoryID$>','off',false);
</MTIf>
</MTHasSubCategories>
<MTSubCatsRecurse>
</MTTopLevelCategories>
//-->
</script>
赤色で示した「カテゴリー名」に、折りたたみたいカテゴリー名を設定してください。カテゴリー名が複数ある場合は、
value="カテゴリー1|カテゴリー2|カテゴリー3"
のようにパイプ(|)で区切ってください。パイプは半角で入力してください。
それではよろしくお願い致します。