新着エントリーの New マークを親カテゴリーに表示する
先日エントリーした「新着エントリーに New マークをつける」で「サブカテゴリーリストを折りたたんだ状態で親カテゴリーにもNewマークを表示させたい」というご要望をいただきましたので、本エントリーにてご紹介します。 以下、カスタマイズ方法です。 |
1.サブカテゴリー構成が2階層の場合
サブカテゴリー構成が2階層の場合、親カテゴリーに子カテゴリーの新着エントリーの日付を反映させることで、New マークを表示させます。ただし New マークは全ての親カテゴリーに反映されるので、3階層以上のカテゴリー構成の場合は2項をご利用ください。
1.1 サブカテゴリーリストの修正
サブカテゴリーリストの折りたたみ用タグ(下記)に青色部分を追加します。
<!-- サブカテゴリー用 -->
<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$>] <span class="new"><MTEntriesWithSubCategories lastn="1"><$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$></MTEntriesWithSubCategories></span><MTHasSubCategories></div></MTHasSubCategories>
<MTElse>
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><MTCategoryLabel> <span class="new"><MTEntriesWithSubCategories lastn="1"><$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$></MTEntriesWithSubCategories></span>
<MTHasSubCategories></div></MTHasSubCategories>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul><MTHasParentCategory></div></MTHasParentCategory></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>
<!-- サブカテゴリー用 -->
1.2 スクリプトの設定・CSSの設定
スクリプトの設定・CSSの設定については新着エントリーに New マークをつけるを参照ください。
2.サブカテゴリー構成が3階層以上の場合
サブカテゴリー構成が3階層以上の場合は、途中の親カテゴリーに New マークを表示させないようにするため、1項とは設定内容が異なります。
2.1 サブカテゴリーリストの修正
サブカテゴリーリストの折りたたみ用タグ(下記)に青色部分を追加してください。
<!-- サブカテゴリー用 -->
<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$>] <span class="new"><MTEntries lastn="1"><$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$>:</MTEntries><MTTopLevelParent><$MTCategoryID$></MTTopLevelParent></span><MTHasSubCategories></div></MTHasSubCategories>
<MTElse>
<li><MTHasSubCategories><div class="subcategories" id="subcategories<$MTCategoryID$>name"></MTHasSubCategories><MTCategoryLabel> <span class="new">00:00:00:00:00:00:<MTTopLevelParent><$MTCategoryID$></MTTopLevelParent></span><MTHasSubCategories></div></MTHasSubCategories>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul><MTHasParentCategory></div></MTHasParentCategory></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>
<!-- サブカテゴリー用 -->
2.2 スクリプトの追加
下記のスクリプトを2.1項のタグの下に追加してください。
<script type="text/javascript">
<!--
// passage time
var pass = 24;
// display content
var content = 'New!!';
var currentDate = new Date();
var spans = document.getElementById('categories').getElementsByTagName('span');
var list = new Array();
for (i = 0; i < spans.length; i++) {
if(spans[i].getAttribute('class') == 'new' ||
spans[i].getAttribute('className') == 'new') {
if (spans[i].childNodes[0]) {
time = spans[i].childNodes[0].nodeValue.split(":");
var entryDate = new Date(time[0], time[1]-1, time[2], time[3], time[4], time[5]);
list.push(time[6]);
var now = (entryDate.getTime() - currentDate.getTime())/(60*60*1000);
now = Math.ceil(now);
if(-now <= pass){
spans[i].innerHTML = content;
spans[i].style.display = 'inline';
for(j = 0; j < list.length; j++){
if(list[j] == time[6]){
spans[j].innerHTML = content;
spans[j].style.display = 'inline';
break;
}
}
}
}
}
}
//-->
</script>
このスクリプトの動作ですが、各カテゴリーの日付の最後に最上位の親カテゴリーIDを予め付与しておき、新着エントリーがあった場合にその親カテゴリーIDのカテゴリーを再検索して、New マークを与えています。
2.3 CSSの設定
CSSの設定については新着エントリーに New マークをつけるを参照ください。
2006.02.28 追記
2.2項、3項でエントリーが存在しない親カテゴリーの考慮がもれていましたのでタグを修正しました。
2006.08.19
記事を全面修正しました。
2009.01.06
スクリプトを修正しました。
- Movable Typeの各リストに新着マークを表示する(jQuery編)
- 新着マークを画像に表示する
- dTree サブカテゴリーリスト + 新着表示 for Movable Type
- 投稿者情報に New マークをつける
- 新着トラックバックに New マークをつける
- New マーク表示カスタマイズ改善のお知らせ
- 新着コメントに New マークをつける
- 新着エントリーのあるカテゴリーに New マークをつける
早速の対応、ありがとうございます!
ですが・・・
なぜか親カテゴリーに表示されないのです(T△T)
記事のとおりにしているつもりなのですが・・・。
折りたたみ・ツリー化・親カテゴリーに合計数表示を全部使っているのですが
これがいけないのかと思い、
記事内の「2.2階層のみのサブカテゴリー構成の場合」を全部コピー&ペーストしてみても
親カテゴリーにnewがつかないのです( ノД`)シクシク…
もしよろしければ、考えられる原因を教えていただけないでしょうか?
お手数をおかけしてしまって、申し訳ありません・・・
ありがとうございました!
修正版のタグで無事に表示されました!
いろいろお手数をかけてしまってすいませんでした。
>ちゅんさん
こんばんは。
いえいえ、確認不足ですいませんでした。
無事にできてよかったです。
ではでは!
こんにちは^^
何故かこのスプリクトだと 表示されません
トラックバック用のだと 子カテゴリーにだけ 表示されました
色々入れ替えて試してみましたが
原因不明なので お時間ありましたら
教えて頂けると うれしいです
>MELLさん
こんばんは。
ご返事遅くなってすいません。
このエントリーの記事を見直しましたので再度設定してみて頂けますでしょうか。
それではよろしくお願い致します。
初めまして、七海と申します。
New表示をさせたくこのスプリクトを使用させていただいたのですが、
MT4.23-ja でウィジットとして使用した場合、カテゴリ月間アーカイブの再構築時に、
Can't call method "id" on unblessed reference
と言ったErrorを吐き出して再構築されません。
Errorを吐き出すのはカテゴリ月間アーカイブのみで、ほかの所ではErrorを吐くことはありません。
なにぶんかなり前の記事ですので申し訳ないのですが、回避する方法があれば教えていただきたいのです。
よろしくお願いします。
>七海さん
こんばんは。
ご返事遅くなってすいません。
MTTopLevelCategories タグの中で MTEntriesWithSubCategories タグを使用するとNGになるようなので、次の部分を変更してください。
変更前
<span><MTEntriesWithSubCategories lastn="1"><$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$></MTEntriesWithSubCategories></span>
変更後
<span><MTCategoryLabel setvar="cat"><MTEntries category="$cat" include_subcategories="1" lastn="1"><$MTEntryDate format="%Y:%m:%d:%H:%M:%S"$></MTEntries></span>
それではよろしくお願い致します。
お忙しい中、回答いただきありがとうございました。
エラーはでなくなったのですが、今度はNewが表示されなくなりました。
クラス指定を外すと更新時間の表示はされるのですが、とすると表示が無くなります。
どうしたらよいでしょう?
よろしくお願いします。
>七海さん
こんばんは。
ブログ記事のないカテゴリーがあると、JavaScript が正常に動作していないようでした。
2.2項のスクリプトを修正しましたのでお試しください。
それではよろしくお願い致します。
たびたびすみません。
Javaスプリクトの修正を行ったのですが、親カテゴリの方に付くNewマークが、子カテゴリとは無関係の親カテゴリに付いてしまいます。
別の親カテゴリを持つ子カテゴリの記事を同じ日に編集した場合、一番上の親カテゴリのみNewマークが表示され、ほかの親カテゴリには表示されません。
折りたたみを行っているので、その影響でしょうか?
お忙しいところ、何度もすみません。
教えていただけると助かります。
>七海さん
こんにちは。
ご質問の件ですが、事象が発生しているページのURLをお知らせください。
それではよろしくお願い致します。
こんばんは。
http://nf-nanami.com/arekore/
このページです。
よろしくお願いします。
>七海さん
こんにちは。
ページのソースコードだけでは原因が分からないため、ご利用中のテンプレート(該当部分)をメールにてご送付ください。
それではよろしくお願い致します。
役立つ情報・ツールの公開をありがとうございます。
WordPressにおいて、サイドバーなどにカテゴリー・リスト(カテゴリー名だけのリスト)を表示することもあると思います。そんなとき、新着記事を含んでいるカテゴリー名の横に「new」マークを表示したいのですが、MovableType用の本投稿内容を改編したものはないでしょうか?
>pyon-yonさん
こんばんは。
ご返事遅くなり大変申し訳ありません。
WordPress用のプラグインを作成しましたのでご利用ください。
http://www.koikikukan.com/archives/2012/01/25-012345.php
それではよろしくお願い致します。