mune

タグで関連付けしたエントリーをソートしたい

0

こんにちは。
質問させて下さい。

現在ウェブページテンプレートにて、エントリーのタグが表示されるページを作っています。
エントリーのタグ表示までは出来ているのですが、デフォルトのコードを引用している為、「mt-search.cgi」へ遷移してしまいます。

出来れば同ページ内でソート機能を実装したいのですが技術的に可能なのでしょうか?

何か良い方法は無いかと思いこちらに質問させて頂きました。

返信(25)

| 返信する
  • 現在のコードは以下になります。

    <MTTags>
    	<span class="tag">
    		<a href="javascript:void(0)" onclick="location.href='<$mt:TagSearchLink encode_js="1"$>';return false;" rel="tag"><$mt:TagName$></a>
    	</span>
    </MTTags>
    
  • えーとやりたい事で、ソートって部分が意味不明です。
    不明というか、何でソートとかの部分の情報不足ですね。
    >「mt-search.cgi」へ遷移してしまいます。
    これは、ブログ記事にリンクしたいという意味?

  • >oscarさん
    レスありがとうございます。
    説明不足でスミマセン。。

    「ソート」というのは例えばjQuery等を使用して、同ページ内で選んだタグが付いたエントリーのみ表示するという意味でした。

    その様な事は出来るのでしょうか?

  • あぁそういう意味ですか。
    jQueryなら何通りか方法がありそうですね。jQueryのajaxでバックグラウンド側で走らせた検索結果を取り込む等。
    とりあえず、一般的な解決だと(jQuery関係ないんですが)

    <MTEntryTags>
    <MTTagName setvar="tagname">
    <MTEntries tag="$tagname" unique="1">
    <a href="<$EntryPermalink$>"><$MTTagName$></a>
    </MTEntries>
    </MTEntryTags>

    なのでしょうが、おそらくコンテクスト制限で表示はされないと思います。コンテクスト制限を外す方法もありますが、ここは一発でお考えのような事ができる、TagSupplementalsプラグインのご使用を提案します。
    TagSupplementals_Plugin - ogawa - 「タグ」機能を追加・拡張するプラグイン。 - Project Hosting on Google Code
    このプラグインで使用可能になる、MTRelatedEntriesコンテナタグがそのものずばりの物だと思います。
    ご確認ください。

  • >oscarさん
    プラグインのご提示ありがとうございます!
    コチラの方法で実装してみます。
    取り急ぎお礼まで。

  • >oscarさん
    私の説明が下手で意図が伝わってない様ですので
    改めてご説明させて頂きます。ご協力頂ければ幸いです。
    実現したいポイントを以下にまとめました。

    ・ウェブページ内に記述

    ・同カテゴリのブログ記事についているタグを一覧表示する(以下、リスト表示部分)
     例えば、タグは「All」「a」「b」「c」とします
     
    ・その横に記事へのリンクとタイトルがリスト表示されています。(以下、タイトル表示部分)
     
    ・初めのページでは「All」が選択されている状態
     
    ・(リスト表示部分の)リストになったタグをクリック→
    (タイトル表示部分で)タグが付いた記事のみリスト表示
    (mt-search.cgiに遷移せずにjQuery等で同ページ内で処理)

    ・MT5での実装

    ・現在のコードは以下になります。(解りやすい様にシンプルに書換えてました)


    <!-- リスト表示部分 -->
    <ul>
    <MTTags>
    <li><a href="javascript:void(0)" onclick="location.href='<$mt:TagSearchLink$>"><$mt:TagName$></a></li>
    </MTTags>
    </ul>

    <!-- タイトル表示部分 -->
    <ul>
    <MTEntries>
    <li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
    </MTEntries>
    </ul>

  • 的外れかもしれませんが、お求めの機能はMT側よりjQueryのお話だと思います。

    以下のような感じでどうでしょうか。headでjQueryを読み込んでいる前提です。

    <!-- リスト表示部分 -->
    
    

    <ul id="tagList">
    <li><a id="all" href="javascript:void(0)">all</a></li>
    <MTTags>
    <li><a id="tag<$MTTagID$>" href="javascript:void(0)"><$mt:TagName$></a></li>
    </MTTags>
    </ul>

    <!-- タイトル表示部分 -->
    <ul id="tagTitle">
    <MTEntries>
    <li class="all <MTEntryTags glue=" ">tag<$MTTagID$></MTEntryTags>"><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
    </MTEntries>
    </ul>

    <script type="text/javascript">
    (function($){
    $("#tagList li a").click(function(){
    var id = $(this).attr("id");
    $("#tagTitle li").each(function(){
    if($(this).hasClass(id)){
    $(this).show();
    } else {
    $(this).hide();
    }
    });
    });
    })(jQuery);
    </script>

  • >tinybeansさん
    ありがとうございます!
    ご提案頂いたjQueryコードでほぼ実現できました。

    もう2点ほど、重ねてご質問させて下さい。

    ・同カテゴリのタグのみリストアップする
    ・同カテゴリの記事のみリストアップする

    この場合、どう記述すれば良いのでしょうか?

  • 追記です。
    tinybeansさんから教えて頂いた方法だと、
    同じタグ名でもリスト表示されてしまいます。。

    ・同タグ名はまとめて表示する

    この条件を含めて表示させる方法はありますでしょうか?
    どなたかご教授下さい。

    • 凡ミスしてました。。先程投稿した、

      ・同タグ名はまとめて表示する

      は私のスペルミスでしたので訂正いたします。
      しかし、コチラはまだ未解決で困っています。

      ・同一のカテゴリのタグのみリストアップする
      ・同一のカテゴリの記事のみリストアップする

      以下のコードでは表示できません。。
      何か良い方法がありましたらご教授下さい。
      宜しくお願い致します。


      <MTArchiveList>
      <$MTEntryCategory setvar="cat"$>
      </MTArchiveList>


      <ul id="tagList">
      <li><a id="all" href="javascript:void(0)">All</a></li>
      <MTTags>
      <li><a id="tag<$MTTagID$>" href="javascript:void(0)"><$mt:TagName$></a></li>
      </MTTags>
      </ul>


      <ul id="tagTitle">
      <MTEntries category="$cat">
      <li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
      </MTEntries>
      </ul>


      • ごめんなさい、いずれにしても結構複雑になると思いますが、ウェブページはカテゴリという概念ではなくフォルダという概念だと思いますが、「同一のカテゴリ」とは「何と同一」のカテゴリですか?

        • >tinybeansさん
          ご返答ありがとうございます。
          もう少しで実装できそうなんですが、
          何か基本的なサイト設計でつまずいている気がします。。

          同一のカテゴリとは、記事同士の同一カテゴリです。

          各ブログ記事のURLはそれぞれ以下の様にしてます。
          www.sample.com/cat/detail_1.html
          www.sample.com/cat/detail_2.html
          www.sample.com/cat2/detail_1.html
          www.sample.com/cat2/detail_2.html

          現在以下のURLでウェブページを表示してます。
          www.sample.com/cat/index.html
          www.sample.com/cat2/index.html

          「cat」で表示している時は「cat」に
          「cat2」で表示している時は「cat2」に
          関連してる記事のみ表示させたいのです。

          これはタグ一覧を表示してる部分も同様です。
          現在の状況では全てのタグが表示されてしまっています。

          それぞれの記事で該当カテゴリを選択
          していますが、うまく表示されないのです。。

          この説明で上手く伝わりますでしょうか?
          是非お力をお貸し下さい。

  • 恐らく、、ウェブページ内で

    <$MTCategoryLabel$>

    タグが使用できたら解決できると思うのですが・・・
    こちらのタグをウェブページ内で使える用に出来ないものでしょうか?

  • >muneさん
    こんにちは。

    >各ブログ記事のURLはそれぞれ以下の様にしてます。
    >www.sample.com/cat/detail_1.html
    >www.sample.com/cat/detail_2.html
    >www.sample.com/cat2/detail_1.html
    >www.sample.com/cat2/detail_2.html
    >現在以下のURLでウェブページを表示してます。
    >www.sample.com/cat/index.html
    >www.sample.com/cat2/index.html

    ここでウェブページを使っているのが、設計的に良くないと思います。
    カテゴリ毎に、そのカテゴリのブログ記事の情報を集約したページを作るなら、カテゴリアーカイブテンプレートを使うのが基本です。

    また、おやりになりたいことを実現するには、「カテゴリ○○のブログ記事についているタグを集めて、順に出力する」というようなテンプレートタグが必要です。
    しかし、Movable Typeの標準のテンプレートタグには、そのようなタグはありません。
    ハッシュを使って実現できなくもないですが、記事の数が増えてくると、速度的に問題になると思われます。

    • >壱さん
      コメントありがとうございます。
      やはり設計的に無理がありましたか。。。

      ハッシュを使って実現する以外に
      何か良い方法はないものでしょうか?

      そもそもMTでは難しい問題なのでしょうか?

      • >muneさん
        こんにちは。

        MT標準のテンプレートタグでどうにかしようとすれば、ハッシュを使う以外の方法はないと思います。

        • >壱さん
          なるほど。設計は見直します。

          ハッシュを使い速度が遅くなっても
          構わないのですが、どの様な記述をすれば良いものか…
          ご教授頂けませんでしょうか。。
          又は何か参考になるページがありましたらお教えください。
          宜しくお願い致します。

          • >muneさん
            こんにちは。

            カテゴリーアーカイブリストのテンプレートに以下のように書けば、ご希望の動作になると思います。

            <mt:Entries>
                <mt:EntryTags>
                    <$mt:TagName setvar="tag_name"$>
                    <$mt:SetVarBlock name="tag_list" key="$tag_name"$><$mt:TagID$></mt:SetVarBlock>
                </mt:EntryTags>
            </mt:Entries>

            <h2>タグ</h2>
            <ul id="tag_list">
                <li><a id="tag_0" href="#">All</a></li>
            <mt:Loop name="tag_list" sort_by="key">
                <li><a id="tag_<$mt:GetVar name="__value__"$>" href="#"><$mt:GetVar name="__key__"$></a></li>
            </mt:Loop>
            </ul>

            <h2>ブログ記事</h2>
            <ul id="entry_list">
            <mt:Entries>
                <li class="tag_0<mt:EntryTags> tag_<$mt:TagID$></mt:EntryTags>"><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a>(<mt:EntryTags glue=", "><$mt:TagName$></mt:EntryTags>)</li>
            </mt:Entries>
            </ul>

            <script type="text/javascript">
            $(document).ready(function() {
                $('#tag_list li a').click(function() {
                    var tag_id = $(this).attr('id');
                    if (tag_id == 'tag_0') {
                        $('#entry_list li').show();
                    }
                    else {
                        $('#entry_list li').hide();
                        $('#entry_list li.' + tag_id).show();
                    }
                    return false;
                });
            });
            </script>

            • >壱さん
              サンプルコードのご提示ありがとうございます!
              カテゴリアーカイブに導入した所、当初想定していた
              表示を実現できました!

              しかし、私の設計ミスが原因なのですが…
              各ウェブページに記述していた他の要素を
              読めなくなってしまいました…

              各カテゴリには個別に情報を入力したいのですが、
              アーカイブテンプレートでは、以下のタグが使えません。

              <$MTPageBody$>
              <$MTPageMore$>

              壱さんの「Movable Type 5 Webサイト製作ガイドVolume 1」を
              購入して読みましたが、その辺りの事はVolume2を見れば書かれてますか?

              大変お手数なのですが、
              この場合の回避方法をお教え頂けますでしょうか。

              • こんにちは。

                テキストだけの簡単な文章なら、カテゴリの説明に入力して、MTCategoryDescriptionタグで出力することができます。

                ただ、WYSIWYGが必要な文章を入力する場合だと、カテゴリの説明では無理です。
                ウェブページに入力した上で、カテゴリとウェブページをカスタムフィールド等を利用して紐づけるような方法が考えられます。

                • >壱さん
                  こんばんは。

                  これはWYSISYGが必要な文章で・・・2箇所の入力があります。
                  なので、カスタムフィールドの設定をしてみましたが、
                  カテゴリーアーカイブでページの情報を読みこんでくれません。
                  普通にタグを入力しただけでは駄目なのでしょうか?

                  <mt:If tag="PageDataProfile_jp"><mt:PageDataProfile_jp></mt:If>
                  <mt:If tag="PageDataProfile_en"><mt:PageDataProfile_en></mt:If>
                  

                  ウェブページの情報を読み取る方法が
                  あるのでしたら大変お手数なのですがご教授下さい。
                  宜しくお願い致します。

                  • こんにちは。

                    MTの内部的には、カテゴリとウェブページの間には何の関係もなく、お互いに独立した存在です。
                    したがって、カテゴリアーカイブテンプレートの中では、そのままではMTPage系のテンプレートタグを使うことはできません。

                    カテゴリとウェブページを紐づけたいのであれば、自力で何らかの仕組みを作る必要があります。
                    例えば、以下のような方法が考えられます。

                    1.カテゴリに「関連先ウェブページのタグ」というカスタムフィールドを追加し、テンプレートタグ名を「MTCategoryPageTag」にします。
                    2.各カテゴリの「関連先ウェブページのタグ」のカスタムフィールドと、それに対応する各ウェブページのタグに、同じ値(かつ他のカテゴリと重複しない値)を入力します。
                    例えば、カテゴリAにウェブページAを結び付けたい場合なら、カテゴリAの「関連先ウェブページのタグ」カスタムフィールドと、ウェブページAのタグに、同じ値を入力します。
                    3.カテゴリアーカイブテンプレートに以下のような部分を入れて、関連先ウェブページの情報を出力します。

                    <mt:If tag="CategoryPageTag">
                        <$mt:CategoryPageTag setvar="page_tag"$>
                        <mt:Pages tag="$page_tag">
                            ウェブページの情報を出力するテンプレートタグやHTML
                        </mt:Pages>
                    </mt:If>

                    • >壱さん!
                      お教え頂いたやり方で完璧に実装する事ができました!
                      感激感動です!!

                      今回の件でMTの基本部分を徹底的にお浚いする事ができました。
                      参考書も山の様に読み耽りましたし・・・。

                      MTの事解ってくると楽しいですね。
                      壱さんの著書volume2も購入させて頂き、深く勉強させてもらいます。

                      oscarさん、tinybeansさん、壱さん
                      この度は本当にありがとうございました。

          • >muneさん
            こんにちは。

            書き忘れましたが、ハッシュをはじめ、変数の使い方については、拙著「Movable Type 5 Webサイト製作ガイドVolume 2」で詳細に解説しています。

            http://www.h-fj.com/blog/mt5bookvol2/

        • >壱さん
          なるほど。設計は見直します。

          ハッシュを使い速度が遅くなっても
          構わないのですが、どの様な記述をすれば良いものか…
          ご教授頂けませんでしょうか。。
          又は何か参考になるページがありましたらお教えください。
          宜しくお願い致します。

返信する


OpenID対応しています OpenIDについて