ブログ記事やウェブページ、コメント、アイテムなどの様々なリストから、項目をランダムに選んで表示するための MovableType プラグインを書いてみました。静的生成、静的生成+PHP、ダイナミック パブリッシングで動作します。同様の機能を持った MT プラグインが他にも存在しますが、ブログ記事やウェブページなど MT のオブジェクトに限定せず、あらゆる項目をランダムに表示することが可能です。
以下のテンプレートの例のように、ランダムに項目を抽出したい範囲を MTRandomize
ブロックタグで囲みます。続いて、個々の項目を MTRandomizeSeparator
タグで区切ります。MTRandomize
ブロックタグは、MTRandomizeSeparator
で区切られた項目をランダムに選択し、lastn
で指定された数だけ表示します。
<ul><MTRandomize lastn="3"> <li>Item 1</li> <$MTRandomizeSeparator$> <li>Item 2</li> <$MTRandomizeSeparator$> <li>Item 3</li> <$MTRandomizeSeparator$> <li>Item 4</li> <li>Item 5</li> <$MTRandomizeSeparator$> <li>Item 6</li> <$MTRandomizeSeparator$> </MTRandomize></ul>
項目の区切りは MTRandomizeSeparator
タグで明示されればよいので、ブログ記事やウェブページ、コメント、トラックバックなどの MT によって自動生成されるものを始め、手動で列挙したアイテムまで、あらゆる要素を表示することが可能です。
静的生成(スタティック)で利用した場合、項目がランダムに選択されるのは、再構築のタイミングでテンプレートタグが処理された時になります。それ以降、そのテンプレートタグが再び再構築されない限りは、同じ内容が表示され続けます。使用シーンとしては、検索結果テンプレートなどで使用する方法です*1。
静的生成(スタティック)で PHP のコードが含まれるページを生成します。ページが表示される度に PHP が動作し、項目をランダムに表示します。Randomize プラグインでは、php
オプションを指定するだけで、ランダム表示を行うための PHP コードを生成します。
<ul><MTRandomize lastn="3" php="1"> : </MTRandomize></ul>
Randomize プラグインは、MT 標準のダイナミック パブリッシングにも対応しています。静的生成+PHP と同様に、表示される度に異なる項目がランダムに選択され表示されます。
MTRandomize
ブロックタグlastn
で指定された数だけランダムに項目を選択し、それらを表示します。lastn
に 0 を指定すると、全てのアイテムがシャッフルされて表示されます。MTRandomizeSeparator
変数タグMTRandomize
ブロックタグの内部で使用し、アイテムの区切り箇所を宣言します。MTRandomizeSeparator
で分割された結果、空白、タブ、改行のみを含むブロックはランダム表示の候補からは外されます。最新のブログ記事 10 件の中から、ランダムに 5 件のブログ記事を表示する例です。
<ul><MTRandomize lastn="5"> <MTEntries lastn="10"> <li><$MTEntryTitle$></li> <$MTRandomizeSeparator$> </MTEntries> </MTRandomize></ul>
任意の広告を表示する例です。
<MTRandomize lastn="1"> <!-- 広告1 --> <$MTRandomizeSeparator$> <!-- 広告2 --> <$MTRandomizeSeparator$> <!-- 広告3 --> : </MTRandomize>
master
) ... バグ修正や機能追加など開発途中のバージョンです。開発中の新機能などをいち早く利用できますが、新しいバグが生まれていたり、テストが不十分な場合があります。ダウンロードしたアーカイブを展開し、plugins フォルダの下にコピーしてください。プラグインの設定項目などはありません。
寄せられたコメント (全 2 件中、最新 5 件まで表示しています)
について質問をさせてください。
>MovableType 4, MovableType 5 で動作確認済みです
ご存知の範囲で結構ですのでMovableType 6での実装はどうでしょうか。
今回の要望として行いたいことが、ブラウザをリロードするたびに表示内容がランダムで変わることを行いたいのですがその場合は
Randomizeのみでは不可能
その場合は、
1、静的生成+PHPでの実装
または、
2、(記載頂いている)ダイナミック パブリッシング…Randomize プラグインは、MT 標準のダイナミック パブリッシングにも対応しています。静的生成+PHP と同様に、表示される度に異なる項目がランダムに選択され表示されます。
追加されるテンプレート タグMTRandomize ブロックタグ…ブロックタグの内部のコンテンツから lastn で指定された数だけランダムに項目を選択し、それらを表示します。lastn に 0 を指定すると、全てのアイテムがシャッフルされて表示されます。
上記2点の方法のどちらかの実装方法でも可能という認識で良いでしょうか。
2の方が容易な実装と思っています・・・
以上、お手数おかけいたしますがよろしくお願い致します。
Randomizeプラグインについて質問させて頂きます。
サイト構築にあたり、本プラグインを導入させて頂きました。MT5.12にて正常に作動しました。
現在、mt-rebuild.plにて自動再構築を導入したのですが、cronにて下記のエラーが出てきました。
Useless use of unshift with no values at /webpath/plugins/Randomize/Randomize.pl line 49.
cron実行後、ページを確認したところ、正常にページは生成されていますので、問題はないかと思いますが、念のためと思い投稿しました。
唯一気になる点は、本プラグインを使用している部分が、サイトの軽量化を考え、phpの部品化した箇所に使っております。
しかし、本プラグインを使っている部分は、予めtxtで生成し、phpで読み込んでいるので、今回のエラーとはあまり関係がないと想定しています。
できましたら、ご教授頂ければ幸いです。