cocoa

用語一覧ページを作りたい

0

用語一覧ページを下記のように作りたいと思っているのですが、うまくいきません。。
ブログ記事のnameと言うカスタムフィールドに入力されたキーワードを、かな、漢字、カタカナ問わず50音順に並べ、
さらに"あかさたなはまやらわ"のカテゴリにまとめようとしています。


┣ice
┣あか
┣飴


┣柿
┣カメ


まず、nameのふりがなを、huriganaと言うカスタムフィールドに入力し、
categoryと言うフィールドのラジオボタンで、"あかさたなはまやらわ"の中から
該当の文字にチェックを入れカテゴリ分けさせようとしています。

下記サイトを参考にしていますが、最初の"あ"の見出しの後に全てのリストが出てきてしまいました。。
ちなみにカテゴリとカテゴリ説明は既に使用しているため使えません。

参考サイト:<a href="http://wp.mersy.jp/?p=236" target="_blank">http://wp.mersy.jp/?p=236</a>

<MTEntries sort_by="hiragana" sort_order="ascend">
<MTSetVarBlock name="push(letter)"><MTcategory></MTSetVarBlock>
</MTEntries>
<$MTSetVar name="i" value="0"$>
<MTEntries sort_by="hiragana" sort_order="ascend">
<$MTVar name="letter" index="$i" setvar="letternow"$>
<$MTVar name="i" op="-" setvar="x"$>
<$MTVar name="letter" index="$x" setvar="letterprev"$>
<MTIf name="__first__">
<h2><$MTVar name="letternow"$></h2>
<ul>
<MTElseIf name="letternow" ne="$letterprev">
</ul>
<h2><$MTVar name="letternow"$></h2>
<ul>
</MTIf>
<li><a href="<$MTEntryPermalink$>"><MTname></a></li>
<MTIf name="__last__">
</ul>
</MTIf>
<$MTSetVar name="i" op="++"$>
</MTEntries>
<MTElse>

複雑で申し訳ありませんが、ご教授いただけますでしょうか。。
よろしくお願いします。

返信(31)

| 返信する
  • 記事が古い上に参考になっていないようでスミマセン。
    ちょっと書かれたソース見てみますね。

    <h2>あ</h2>
    <ul>
    <li>ice</li>
    <li>あか</li>
    <li>飴</li>
    <li>柿</li>
    <li>カメ</li>
    </ul>

    多分、みたいになっているということですよね?

  • 実際のコードは間違っていないかもしれませんが、ひとまず最初の所は「hiragana」というカスタムフィールドとのことなので、

    <MTEntries sort_by="field:hiragana" sort_order="ascend">
    <MTSetVarBlock name="push(letter)"><MTcategory></MTSetVarBlock>
    </MTEntries>

    こんな感じになるんじゃないでしょうか?

    • 実際のテンプレートは正しいかもしれないので一応ですが、その後のところにある

      <MTEntries sort_by="hiragana" sort_order="ascend">
      <$MTVar name="letter" index="$i" setvar="letternow"$>

      ここもcustomfieldでの値にソートする様にsort_byが違うかもしれないですね。

  • <$MTVar name="i" op="-" setvar="x"$>
    ここの部分は
    <$MTVar name="i" op="--" setvar="x"$>
    の方がいいかもしれないですね。

    現在出力されているHTMLも抜粋でもあるとわかりやすいです。

  • 「Movable Typeのカテゴリリストにダミーの親カテゴリを表示する」(http://www.koikikukan.com/archives/2011/09/05-015555.php)
    で説明されているような、一旦ハッシュに突っ込んでループで取り出す方法もありますよ。

  • まーしーさん、guimihanuiさんコメントありがとうございます。
    カテゴリとカテゴリの説明欄は既に別で使用しているので、
    使うことができません。。

    まーしーさんの方法で修正をしたところ表示できたのですが、
    さらにキーワードというカスタムフィールドで、"ゲスト"が選択されている記事だけを表示させたいのですが、

    <MTEntries sort_by="field:yomikata3" sort_order="ascend">
    <MTSetVarBlock name="push(letter)"><MTyomikata4_test></MTSetVarBlock>
    </MTEntries>
    <$MTSetVar name="i" value="0"$>
    <MTEntries sort_by="field:yomikata3" sort_order="ascend">
    <MTIf tag="keywords" eq="ゲスト">

    上記のように入力したところ"あかさたな"の見出しが表示されなくなってしまいました。。
    出力されているHTMLはまーしーさんのご指摘の通りリスト表示する予定です。
    <h2>あ</h2>
    <ul>
    <li>ice</li>
    <li>あか</li>
    <li>飴</li>
    <li>柿</li>
    <li>カメ</li>
    </ul>

    すみませんがご教授いただけますでしょうか。。

    • >さらにキーワードというカスタムフィールドで、"ゲスト"が選択されている記事だけを表示させたいのですが、

      <MTIf tag="keywords" eq="ゲスト">

      とのことなのですが、キーワードというカスタムフィールドの形式は何になりますか?
      MTタグはMTkeywordsという指定になっているということですよね?

      • はい、MTタグはになります。
        形式はラジオボタンになります。複数選択肢がある中で、
        ゲストを選んだブログ記事になります。

        • ソースの全体をはっていただけるとわかりやすいのですが、

          <li><a href="<$MTEntryPermalink$>"><MTname></a></li>

          の部分を
          <MTIf tag="keywords" eq="ゲスト">

          で囲んで
          <MTIf tag="keywords" eq="ゲスト">
          <li><a href="<$MTEntryPermalink$>"><MTname></a></li>
          </MTIf>

          という感じになっているという認識であっていますか?
          たとえばそのキーワードというカスタムフィールドに入っている値をみてみるために
          <MTIf tag="keywords" eq="ゲスト">
          <li><a href="<$MTEntryPermalink$>"><MTname></a>:<MTKeywords></li>
          </MTIf>

          等としてみた場合、ちゃんとそのキーワードカスタムフィールドの値は出力されています??

          • はい、認識は合っています。

            <MTIf tag="keywords" eq="ゲスト">

            <li><a href="<$MTEntryPermalink$>"><MTname></a>:<MTKeywords></li>

            </MTIf>
            とした場合、値はちゃんと出力されています。
            ただ見出しが先にきている名前の見出ししか表示されていません。

            <h2>あ</h2>
            <ul>
            <li>ice</li>
            <li>柿</li>
            </ul>

            このような表示になっています。

            • あ、ごめんなさい、そもそもなのですが、

              <MTEntries field:keywords="ゲスト">
              </MTEntries>

              みたいなかんじで、2箇所あるMTEntriesの方で先にフィルタリングをかけてあげればいいようなきがしますがどうでしょう?
              <MTEntries field:keywords="ゲスト" sort_by="hiragana" sort_order="ascend">

              こんなかんじとかで。

              • ご指示いただいた通りにしたところ、ゲストの記事が10件しか出てこなかったので
                (おそらく設定の10件表示がきいていると思います)

                <MTEntries lastn="0" field:keywords="ゲスト" sort_by="hiragana" sort_order="ascend">

                としたところ、全件でてきました!
                これで問題なさそうです!お付き合いいただいて本当にありがとうございました!

              • 度々本当にすみません。。もし可能ならなのですが、
                ページ上部に各見出しへのリンク(アンカー)を張れたら
                理想的なのですが、、わかりますでしょうか。。
                "あ〜わ"までの見出しがあり、"あ"をクリックすると"あ"の見出しのところにページ内リンクするイメージです。。

              • できていたと思ったのですが、

                <MTEntries lastn="0" field:keywords="ゲスト" sort_by="hiragana"

                の、MTEntries lastn="0"と記述してしまうと、
                50音順にならなくなってしまい、最新記事順になってしまいました。。
                何も入れないと、設定の10件がきいてしまい、10件を0件にしたり、
                <MTEntries offset="0">

                と入力してみたりもしたのですが、最新記事順になってしまいます。。
                ページ内アンカーについては
                <h2><a name="<$MTVar name="letternow"$>" id="<$MTVar name="letternow"$>"></a><$MTVar name="letternow"$></h2>

                と入力をさせたところ、うまくいきました!

                • lastn="9999"とかにしてみるとか
                  もしくはlimit="N"をつかえばよさそうなきがしますがどうでしょう?

                  MTEntries | テンプレートタグリファレンス
                  http://www.movabletype.jp/documentation/appendices/tags/entries.html

                  • 今気づいたのですが、lastn="9999"で全件表示はできたのですが
                    その前に、それとは関係なくあいうえお順ではなく、最新記事順に並んでいました。。
                    field:keywords="ゲスト"が優先されてしまっているようです。。何かわかりますでしょうか。。

                  • limit="N"だとフィールドにチェックをいれていない記事の最新10件が並んでしまいます

                  • 現状のソースを貼ります。よろしくお願いします。

                    <MTEntries field:keywords="ゲスト" sort_by="hiragana" sort_order="ascend">
                    <MTSetVarBlock name="push(letter)"><MTcategory></MTSetVarBlock>
                    </MTEntries>
                    <$MTSetVar name="i" value="0"$>
                    <MTEntries field:keywords="ゲスト" sort_by="hiragana" sort_order="ascend">
                    <$MTVar name="letter" index="$i" setvar="letternow"$>
                    <$MTVar name="i" op="--" setvar="x"$>
                    <$MTVar name="letter" index="$x" setvar="letterprev"$>
                    <MTIf name="__first__">
                    <h2><$MTVar name="letternow"$></h2>
                    <ul>
                    <MTElseIf name="letternow" ne="$letterprev">
                    </ul>
                    <h2><$MTVar name="letternow"$></h2>
                    <ul>
                    </MTIf>
                    <li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
                    <MTIf name="__last__">
                    </ul>
                    </MTIf>
                    <$MTSetVar name="i" op="++"$>
                    </MTEntries>
                    <MTElse>

                  • limitは全件表示させたいので、0や9999など試しましたが思い通りになりませんでした

                    • なるほどなるほど。
                      思い通りにならなかったというのはlimit="999"でも最新順になったということであっています?
                      それとも「チェックをいれていない記事」が表示された感じですか?一応確認ですが、この「チェック」は「キーワード」というラジオボタンのカスタムフィールドのゲスト以外ということですよね?
                      書かれたMTテンプレートとはき出されているソースがどうなっているのかこちらは想像しているのみなのでずれていると無駄なので具体的に書いていただくとかしていただけると少しはわかるかもです。。。

                      関係無いかもしれないですが、貼っていただいたソースの最後のMTElseは何用ですか?

                  • limit="999"の場合はカスタムフィールドのゲスト以外が一番上に並んでいて、その下にゲストの記事が並んでいます。
                    順序は昇順(古い記事が一番上)になっています。
                    ソースの最後のMTElseは参考にしたサイトに張ってあったので、そのままにしていましたが不要です。

                  • りんご
                    キウイ
                    パイナップル


                    ┣柿
                    ┣カメ


                    ┣豆


                    ┣ice
                    ┣あか
                    ┣飴

                    現状こんな並びで、本当であれば下のようになってほしいのです。


                    ┣ice
                    ┣あか
                    ┣飴


                    ┣柿
                    ┣カメ


                    ┣豆


                    りんご
                    キウイ
                    パイナップル

                    • MTEntries field:keywords="ゲスト"
                      のフィルタリングがうまく動いていないみたいな気がするのですが、上に書かれているこうなってほしい側ので
                      「あ」
                      から
                      「桃」
                      までをこのソース1つで再現しようとしています??
                      りんご〜桃
                      はなんか表示内容が違うみたいですが現状のコードだとそもそもこうならない様な気がしますがどうでしょう??

                  • りんご〜桃までは、ゲストではない記事です。
                    ソース側はこのようになっています。


                    • りんご






                    • カメ








                    • ice

                  • 間違えました、もう一度貼り付けます

                    <ul>
                    <li>りんご</li>
                    <li>桃</li>
                    </ul>
                    <h2>か</h2>
                    <ul>
                    <li>柿</li>
                    <li>カメ</li>
                    </ul>
                    <h2>ま</h2>
                    <ul>
                    <li>豆</li>
                    </ul>
                    <h2>あ</h2>
                    <ul>
                    <li>ice</li>
                    </ul>

      • すみません、エンコードできていなかったのですが、

        <MTkeywords>
        になります。

  • ゲストのチェックが入っていないものが出ているのは少々謎なのでそこはどの指定が引っかかっているのか見る必要があるかと思いますが、guimihanuiさんが書かれているようにハッシュでやってもいいかもしれません。

    <mt:Entries field:keywords="ゲスト">
        <$mt:category setvar="letter"$>
        <mt:SetVarBlock name="list{$letter}" append="1">
    <li><a href="hoge"><$mt:name$></a></li>
        </mt:SetVarBlock>
    </mt:Entries> 
    <mt:loop name="list">
      <h2><mt:GetVar name="__key__"></h2>
      <ul><mt:GetVar name="__value__"></ul>
    </mt:loop>

    件数とkeywordsのフィルタリングがきいているのかどうかは一度単純なコードを出力してみる必要がありそうです。

返信する


カテゴリグループ

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