「出力ファイル名」と「公開日」を同時に変更する管理画面のカスタマイズ

basename2_01.gif

今回のカスタマイズは少し前の「Movable Type のブログ記事の出力ファイル名を変更する管理画面のカスタマイズ」の続きです。

前回のカスタマイズでは以下のような機能を持つ「出力ファイル名を設定して保存」ボタンを追加しました。

  • 出力ファイル名のロックを解除する。
  • 出力ファイル名を「日-時分秒」のフォーマットで書き換える。
    (例) 9月22日 6 時50分30 秒の場合:22-065030
  • 書換え後にブログ記事を保存する。
  • ただし、既に出力ファイル名がこのフォーマットになっている場合は、確認メッセージを表示し、書き換えて保存するか、書き換えずにそのまま保存するか分岐する。

今回は、この機能に次の機能を追加してみたいと思います。自分で使っていてかゆかったところに手を届かせた感じです。

  • 出力ファイル名を書き換えるときに、同時に「公開日」も書き換える。
  • 出力ファイル名を既に書き換えているか否かに関わらず、書き換えて保存するか確認する。
  • その確認画面で「公開状態」のステータスを明示する。

前回のカスタマイズから変更するのは、basenameStamp という JavaScript の関数のところです。その他の部分は前回と変更なしです。

完成した JavaScript 部分は次のとおりです。青字の部分が今回の変更箇所です。

<script type="text/javascript">
function basenameStamp () {
    var defaultValue = document.entry_form.basename.value;
    var statusValue = document.entry_form.status.value;
    if (statusValue == 1) {
        statusValue = '保存(未公開:原稿)';
    } else if (statusValue == 2) {
        statusValue = '公開';
} else if (statusValue == 3) {
        statusValue = '保存(未公開:承認待ち)';
    } else if (statusValue == 4) {
        statusValue = '公開(日時指定)';
    }
    var defaultValueCheck = defaultValue.match(/\d{2}-\d{6}/);
    function stamp () {
        toggleFile();
        function digits(num) {
            if(num < 10){num = '0' + num;}
            return num;
        }
        var now = new Date();
        var entryDate = '' + now.getFullYear() + '-' + digits(now.getMonth() + 1) + '-' + digits(now.getDate());
        var entryTime = digits(now.getHours()) + ':' + digits(now.getMinutes()) + ':' + digits(now.getSeconds());
        var entryDateTime = '' + digits(now.getDate()) + '-' + digits(now.getHours()) + digits(now.getMinutes()) + digits(now.getSeconds());
        document.entry_form.authored_on_date.value = entryDate;
        document.entry_form.authored_on_time.value = entryTime;
        document.entry_form.basename.value = entryDateTime;
    }
    if (defaultValueCheck) {
        var warning = confirm ("出力ファイル名は既に設定されている可能性があります。\n\n現在の出力ファイル名 : " + defaultValue + "\n\n変更して " + statusValue + " しますか?");
        if (warning) { stamp (); }
    } else {
        var confirmation = confirm ("現在の出力ファイル名 : " + defaultValue + " \n\n変更して " + statusValue + " しますか?");
        if (confirmation) { stamp (); }
    }
}
</script>

以下で今回の変更点のみ解説します。

公開状態( status )を取得

まずは「公開状態( status )」を取得します。

    var statusValue = document.entry_form.status.value;

ここで取得する値は、公開状態によって以下のような数値になります。

  • 1 : 未公開(原稿)
  • 2 : 公開
  • 3 : 未公開(承認待ち)
  • 4 : 日時指定

この公開状態を、後ほど設定する確認メッセージで使いたいので、次のような文言にして変数 statusValue に代入します。

    if (statusValue == 1) {
        statusValue = '保存(未公開:原稿)';
    } else if (statusValue == 2) {
        statusValue = '公開';
} else if (statusValue == 3) {
        statusValue = '保存(未公開:承認待ち)';
    } else if (statusValue == 4) {
        statusValue = '公開(日時指定)';
    }

公開日の書き換え

次に「公開日」の年月日と時刻を設定します。1 行目の「 = 」直後の「 '' 」は数値を文字列に変更するためです。

        var entryDate = '' + now.getFullYear() + '-' + digits(now.getMonth() + 1) + '-' + digits(now.getDate());
        var entryTime = digits(now.getHours()) + ':' + digits(now.getMinutes()) + ':' + digits(now.getSeconds());

その値でそれぞれのテキストエリアを書き換えます。

        document.entry_form.authored_on_date.value = entryDate;
        document.entry_form.authored_on_time.value = entryTime;

basename2_02.gif

確認メッセージを表示

次に、先ほど設定した変数 statusValue を使って、公開状態と設定されている出力ファイル名によって確認メッセージを表示します。

    if (defaultValueCheck) {
        var warning = confirm ("出力ファイル名は既に設定されている可能性があります。\n\n現在の出力ファイル名 : " + defaultValue + "\n\n変更して " + statusValue + " しますか?");
        if (warning) { stamp (); }
    } else {
        var confirmation = confirm ("現在の出力ファイル名 : " + defaultValue + " \n\n変更して " + statusValue + " しますか?");
        if (confirmation) { stamp (); }
    }
}
</script>

【例 : 既に出力ファイル名が変更されていて、かつ「未公開(原稿)」状態の場合】

basename2_03.png

【例 : 既に出力ファイル名が変更されていて、かつ「公開」にする場合】

basename2_04.png

前回は、正規表現でチェックして既に「出力ファイル名」が書き換えられているときのみ確認メッセージを表示するようにしていましたが、それだけだと何となく不安だったので、どちらにせよ確認メッセージを表示することにしました。

完成したファイルを置いておきます。前回のファイルを使っている方は、変数名をちょこっと変えたところがあるので、こちらのファイルで上書きしてください。

【2008-12-04 追記】

Movable Type 4.23 で edit_entry.tmpl に 1 行変更があります。カスタマイズ後の 910 行目が、以下のように変更されています。

【変更前】
    window.open('<TMPL_VAR NAME=SCRIPT_URL>?__mode=pinged_urls&entry_id=<TMPL_VAR NAME=ID>&blog_id=<TMPL_VAR NAME=BLOG_ID>', 'urls', 'width=400,height=400,resizable=yes,scrollbars=yes');
【変更後】
    window.open('<mt:var name="script_url">?__mode=pinged_urls&entry_id=<mt:var name="id" escape="html">&blog_id=<mt:var name="blog_id" escape="html">', 'urls', 'width=400,height=400,resizable=yes,scrollbars=yes');
【2008-10-22 追記】

Movable Type 4.22 で、edit_entry.tmpl にも変更があるようなので(小粋空間: Movable Type 4.22 リリース)MT 4.22 用も置いておきます。

このカスタマイズを管理画面に反映させる方法等は前回のブログ記事を参照してください。

以上です。

  • このエントリーをはてなブックマークに追加
Just a second...