Edited at

Movable Typeで関連記事を表示するプラグイン「SimilarEntries」をランダム表示にする

More than 1 year has passed since last update.

「SimilarEntries」は、カテゴリー・カスタムフィールド・タグなどが一致している記事を自動表示するMovable Type用プラグインです。

https://github.com/bit-part/mt-plugin-SimilarEntries

こちらの投稿で解説したとおり、関連記事の表示結果は固定順となります。

https://qiita.com/webbingstudio@github/items/588632a5f0bab9cee9b9

しかし、関連記事を導入する背景(サイト内の回遊率を増やす)を考えると、ランダム表示のほうが望ましいです。

この記事では、強制的にランダム表示に変更する方法について説明します。


注意点

かなり暫定的な方法です。このため以下のリスクがあり、公開後に関与できないサイトでは導入をおすすめできないことを、あらかじめご了承ください。


  • すべての表示結果がランダム表示となります。

  • 表示結果の件数がlimitで指定した数値より少ないとランダムになりません(要検証)。

  • プラグインのコアファイルを差し替えるため、バージョンアップ時に、該当ファイルの修正が都度必要となります。


修正方法

以下のディレクトリにある、SimilarEntries.jsをエディタで開いてください。

Movable Typeをインストールしたディレクトリ/mt-static/plugins/SimilarEntries/js/SimilarEntries.js

30行目から60行目に「array.sort」を行っている箇所があるので、コメントアウトで無効化してください。


SimilarEntries_sort.js

array.sort(function(obj1, obj2){

for (var i = 0, l = sortCondition.length; i < l; i++) {
var key = sortCondition[i]['key'];
・・・
return 0;
}
});

その箇所に、以下のコードを挿入して上書き保存してください。

関連データが入っている配列を昇順ソートではなく、シャッフルするようになります。


SimilarEntries_shuffle.js

var shuffle = function(arr) {    

var n = arr.length;
var temp, i;

while (n) {
i = Math.floor(Math.random() * n--);
temp = arr[n];
arr[n] = arr[i];
arr[i] = temp;
}
return arr;
};
array = shuffle(array);



参考

配列をシャッフルするロジック

http://javascript.step-learn.com/contents/J061-array-shuffle.html