拙著「上手に稼ぐカラ売りテクニック」が発売されました。
株価が下がる局面で利益を得ることができる「空売り」について、詳しく解説した本です。
自由国民社刊で、定価1,512円(税込)です。
一定件数以上のリストに「続きを表示」のリンクを付ける
先日、mixiのMovable Typeのコミュニティで、以下のような質問を見かけました。
- サイドバーに、最新のブログ記事を最大15件表示したい
- ブログ記事が15件を超えている場合は、「他を見る」のリンクを表示したい
Movable Typeには、ブログ記事等のリストを表示するタグがいくつかあります。
それらのタグの多くには、最近のn件まで表示するためのlastnモディファイアがあります。
ただ、上のご質問のように、lastnで指定した件数よりも、実際にあるブログ記事等の件数が多い場合に、続きがあることを表示する機能はありません。
このような表示を行いたい場合の方法を紹介します。
1.全件数を求めるタグがある場合
ご質問の例のように出力するには、「ブログ記事が全部で15件を超えているときだけ、最新15件の記事の一覧の後に、『他を見る』のリンクを出力する」という処理をすれば良いです。
そのためには、ブログ記事の全件数を知ることが必要です。
ブログ内のブログ記事の全件数は、MTBlogEntryCountタグで得ることができます。
このタグの値を変数に代入して、変数の値が15を超えていれば、「他を見る」のリンクを出力するように処理を行います。
具体的には、以下のようにタグを組みます。
なお、8行目の「リンク先」の箇所は、実際のリンク先のアドレスに置き換えます。
<ul> <mt:Entries lastn="15"> <li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li> </mt:Entries> </ul> <$mt:BlogEntryCount setvar="entry_count"$> <mt:If name="entry_count" gt="15"> <p><a href="リンク先">他をみる</a></p> </mt:If>
まず、1~5行目で、最近の15件のブログ記事のタイトルを出力します。
6行目で、ブログ全体の記事の数を、変数entry_countに代入します。
そして、7行目のMTIfタグで、変数entry_countの値が15を超えているかどうかを判断し、その時だけ8行目を出力します。
2.全件数を求めるタグがない場合
リストによっては、リストの全件数を求めるタグがない場合もあります。
例えば、MTArchiveListタグを使って、月別アーカイブのリストを出力する場合、月別アーカイブの全件数を求めるようなタグはありません。
このような時の方法を考えます。
2-1.考え方
この場合は、リスト系のタグのlastnモディファイアに「出力したい件数+1」を指定して、最大で「出力したい件数+1」回繰り返しを行うようにします。
例えば、最近3か月の月別アーカイブのリストを出力するなら、「lastn="4"」とします。
もし、リストの全件数が、出力したい件数より多ければ、このリストは「出力したい件数+1」回繰り返されます。
上の例だと、4か月分以上の月別アーカイブがあれば、MTArchiveListタグ内のブロックは4回繰り返されます。
一方、リストの全件数が、出力したい件数以下なら、このリストは「出力したい件数」回以下しか繰り返されません。
上の例だと、月別アーカイブが3か月分以下なら、MTArchiveListタグ内のブロックは3回以下だけ繰り返されます。
これらのことから、繰り返しが4回行われた時は、4か月分以上の月別アーカイブがあることになります。
この性質を利用します。
まず、リスト系のタグを使う前に、「is_over」という名前の変数に「0」を代入しておきます。
後で、この変数を使って、「出力したい件数+1」回の繰り返しが行われたかどうかを判断するようにします。
次に、繰り返しの中で変数「__counter__」の値を調べます。
この変数は、繰り返しの何回目かを表す変数です。
__counter__の値が「出力したい件数」以下であれば、通常どおりにリストを出力します。
一方、__counter__の値が「出力したい件数+1」になった時には、リストは出力せずに、変数is_overに「1」を代入します。
このようにすると、リスト全体の件数が、「出力したい件数」以下で収まっていれば、変数is_overの値は、リストに入る前にセットした0のままになります。
一方、リスト全体の件数が、「出力したい件数」より大きい場合、繰り返しの最後の処理で、変数is_overに値1がセットされることになります。
後は、リスト出力の繰り返しが終わった後で、変数is_overに値1がセットされているかどうかで、「他を見る」のリンクを出力するかどうかを変えるようにします。
2-2.タグの組み方
ここまでの話に基づいて、実際にタグを組んでみましょう。
例えば、月別アーカイブページのリストを最近3か月分だけ出力し、それより過去の月別アーカイブページがあるときは、「他を見る」のリンクを出力するとします。
それには、以下のようにタグを組みます。
<mt:SetVar name="is_over" value="0"> <ul> <mt:ArchiveList archive_type="Monthly" lastn="4"> <mt:If name="__counter__" le="3"> <li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveTitle$></a></li> <mt:Else> <mt:SetVar name="is_over" value="1"> </mt:If> </mt:ArchiveList> </ul> <mt:If name="is_over"> <p><a href="リンク先">他を見る</a></p> </mt:If>
1行目で、変数is_overに0を代入します。
3行目で、月別アーカイブを出力する処理を、を4回繰り返します。
4行目のMTIfタグで、変数__counter__の値が3以下かどうかを調べます。そして、3以下であれば、5行目が処理されて、各月別アーカイブのリンクが出力されます。
一方、変数__counter__の値が4の時は、4行目の条件が成立しません。
この場合は8行目の処理に進み、変数is_overの値が1になります。
そして、11行目以降で、変数is_overの値が1の時(月別アーカイブページが4件以上あるとき)だけ、「他を見る」のリンクが出力されます。