iwaki

カテゴリの表示件数制限

0

カテゴリを表示件数を制限して一覧表示させたいと思っています。

ならlastnなどを使用して制限をかけられますが、
カテゴリの場合はどうやって制限すればよいのでしょうか?

具体的には、
5件以下の場合は5件表示、
5件以上の場合は4件表示して最後に「その他のカテゴリはこちら」
のように表示させたいです。

悩みこんでしまっているのでよろしくお願いいたします。

返信(13)

| 返信する
  • すみません、MTタグをエンコードしていませんでした。

    「MTEntriesならlastnなどを使用して...」です。

  • 以下の方法ではいかがでしょうか。


    <mt:if tag="BlogCategoryCount" le="5">

    <$mt:TemplateNote comment="5以下の場合、全て出力"$>
    <mt:Categories>
    <p><$mt:CategoryLabel$></p>
    </mt:Categories>

    <mt:else>

    <$mt:TemplateNote comment="6以上の場合、一度配列に入れて4件出力"$>
    <mt:Categories>
    <mt:SetVarBlock name="push(categories)"><$mt:CategoryLabel$></mt:SetVarBlock>
    </mt:Categories>
    <mt:for var="i" from="0" to="3">
    <p><$mt:Var name="categories[$i]"$></p>
    </mt:for>
    <p><a href="/hoge/">その他のカテゴリはこちら</a></p>
    </mt:if>

  • ありがとうございます!
    無事、思い通りの動作になりました!
    分かりやすい記載でしたのですんなり動きました。

    MTで配列が使えるとは知らなかったです。
    本当にありがとうございました。

  • カテゴリページに、
    サブカテゴリの表示件数を制限して一覧表示させたいです。

    例えば、カテゴリの中にサブカテゴリが5つあった場合、
    2カラムのレイアウトで、
    左側に1~3件目まで表示、
    右側に4~5件目までを表示したいです。

    もし、カテゴリの中にサブカテゴリが4つの場合は、
    2カラムのレイアウトで、
    左側に1~2件目まで表示、
    右側に3~4件目までを表示したいです。

    こちらのやり方を参考に、いろいろ試してみたのですが、
    やりたいことが出来ず困っております。
    どうぞ宜しくお願い致します。

    • こんにちは。

      以下、カテゴリテンプレートに書かれているものとし、
      サブカテゴリ総数÷2を四捨五入した件数を、左カラムに入れるものとします。
      (合ってますか?)

      <$mt:TemplateNote comment="サブカテゴリを配列へ"$>
      <mt:SubCategories>
      <mt:SetVarBlock name="push(categories)"><$mt:CategoryLabel$></mt:SetVarBlock>
      </mt:SubCategories>

      <$mt:TemplateNote comment="Forループ用の配列数計算"$>
      <$mt:Var name="count(categories)" op="--" setvar="categoriesCount"$>

      <$mt:TemplateNote comment="配列数÷2を四捨五入してカラム切り替え用に中間点を出す"$>
      <$mt:Var name="count(categories)" op="/" value="2" setvar="halfNum"$>
      <$mt:Var name="halfNum" op="+" value="0.5" sprintf="%d" setvar="halfNum"$>

      <mt:for var="i" from="0" to="$categoriesCount">

      <$mt:TemplateNote comment="ループ初回に左カラムを開始"$>
      <mt:If name="__first__"><div style="float:left"></mt:If>

      <p><$mt:Var name="categories[$i]"$></p>

      <$mt:TemplateNote comment="ループ中間点で左カラムを閉じ、右カラムを開始"$>
      <mt:If name="__counter__" eq="$halfNum"></div><div style="float:right"></mt:If>

      <$mt:TemplateNote comment="ループ終点で右カラムを閉じる"$>
      <mt:If name="__last__"></div></mt:If>

      </mt:for>


      非常にややこしくなってしまったので細かい解説は省きますが、

      出力内容を変更したい場合はSubCategoriesの中の変数セット部分などを変更してみてください。

      • SA からSAへの返信 | 2011年2月 9日 00:57 | 返信

        すみませんっ。
        四捨五入って何回も書いてるけど、間違いです。

        全部切り上げでした。

  • お忙しいところ本当にありがとうございます。
    感謝致します。
    MTでカテゴリの順番を制御するのは大変なのですね。。

    >出力内容を変更したい場合はSubCategoriesの中の
    >変数セット部分などを変更

    わかりました。トライしてみます!
    変数なども、まだまだ私にとっては難しく・・頑張って試してみます!

  • 今朝からトライしています。
    やってみたところ、

    ●サブカテゴリが5個ある場合、以下のように

    左:サブカテゴリ1    右:サブカテゴリ1
    左:サブカテゴリ2    右:サブカテゴリ2
    左:サブカテゴリ3    右:サブカテゴリ3
    左:サブカテゴリ4    右:サブカテゴリ4
    左:サブカテゴリ5    右:サブカテゴリ5

    と、同じものが左右に繰り返し出てきてしまいました。
    これを、


    左:サブカテゴリ1    右:サブカテゴリ4
    左:サブカテゴリ2    右:サブカテゴリ5
    左:サブカテゴリ3    

    となるようにするにはどこを修正すれば良いのでしょうか。
    度々申し訳ございません。
    よろしくお願いいたします。

    • すみません。
      カテゴリテンプレートへコピペしてみましたが5件でも問題ないようです。
      どこか変更されましたか?
      計10件出ているということは、何らかの原因で配列に10件入っているからだと思います。

      ちなみに、

      <mt:SubCategories>
      <mt:SetVarBlock name="push(categories)"><$mt:CategoryLabel$></mt:SetVarBlock>
      </mt:SubCategories>

      の部分を2回書くと、同様の出力結果になりますが...。 そんなことはしてないですよね。
  • SA様

    こんばんは。お世話になっております。
    大変お騒がせしました!
    自分が作業したタグなどを削除してコピペしたところ、
    バッチリ表示されました。

    >そんなことはしてないですよね。

    おっしゃるとおり、そんな事をしていたようです(お恥ずかしい)...。
    思ったとおりの状態を表示することができました。
    本当にありがとうございました。

  • SAさんの配列数÷2を切り上げてカラム切り替え用に中間点を出す方法のタグですが
    このカラムで折り返していくのを、例えば配列数÷2ではなくて
    5件ごとなどにカラムを分けていくのは可能でしょうか。

    左:サブカテゴリ1 右:サブカテゴリ6 さらに右:サブカテゴリ11
    左:サブカテゴリ2 右:サブカテゴリ7 さらに右:サブカテゴリ12
    左:サブカテゴリ3 右:サブカテゴリ8 以下カテゴリが続く…
    左:サブカテゴリ4 右:サブカテゴリ9
    左:サブカテゴリ5 右:サブカテゴリ10

    といったイメージです。

    • SA からayuへの返信 | 2011年4月 5日 22:15 | 返信

      こんばんはっ。

      lovelydashさんの2カラム版と同様に、カテゴリテンプレートに書く前提で、
      最終的にどんな並びになるのか分からないので全部左寄せです。

      現在のループ回数が5で割り切れる回数であればカラムを区切る感じです。
      後半のmt:Ifのvalue="5"の数字を変更すればその他の件数で分割もできるかと思います。

      <$mt:TemplateNote comment="サブカテゴリを配列へ"$>
      <mt:SubCategories>
      <mt:SetVarBlock name="push(categories)"><$mt:CategoryLabel$></mt:SetVarBlock>
      </mt:SubCategories>
      <$mt:TemplateNote comment="Forループ用の配列数計算"$>
      <$mt:Var name="count(categories)" op="--" setvar="categoriesCount"$>
      <mt:for var="i" from="0" to="$categoriesCount">
      <$mt:TemplateNote comment="ループ初回に左カラムを開始"$>
      <mt:If name="__first__">
          <div style="float:left;">
      </mt:If>
      <p><$mt:Var name="categories[$i]"$></p>
      <mt:If name="__last__">
          <$mt:TemplateNote comment="ループ終点だったらカラムを閉じる"$>
          </div>
      <mt:ElseIf name="__counter__" op="%" value="5" eq="0">
          <$mt:TemplateNote comment="終点ではなくループ回数が5の倍数であればカラム閉じて開始"$>
          </div>
          <div style="float:left">
      </mt:If>
      </mt:for>
      
      
  • >SAさん
    ありがとうございます!思い通りに表示されました。
    全部左寄せ、むしろ理想通りです。

返信する


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