Movable Typeの記事編集画面で独自の入力チェックをしたい

公開

日付のカスタムフィールドが2つあり、1つ目のフィールドの日付は2つ目のフィールドの日付よりも前であることをチェックしてほしいと要望がありました。さてどうしたものか。

pre_saveでチェックするか

JavaScriptで頑張るか、Perlで頑張るか、になると思うのですが、Perlでpre_saveコールバックを操って記事を保存せずエラーにするのが良さそうです。というわけで、先人の知恵も借りながら書いてみました。

ブログIDと入力した日付は以下のコードで取得できることが分かりました。意外と簡単。

my $q = $app->param;
my $blog_id = $app->blog->id;
my $d1 = $q->param('d_customfield_cf_entry_event_start_date');
my $d2 = $q->param('d_customfield_cf_entry_event_end_date');

プラグインから記事の編集画面にエラーを出すには以下のようなコードだそうです。

my $plugin = $app->component('fieldvaluechecker');
return $app->error(
  $plugin->translate('The event start date or event end date is incorrect.')
);

最終的にはこのようになりました。

sub pre_save_entry {
  my ($cb, $app) = @_;
  my $plugin = $app->component('fieldvaluechecker');
  my $q = $app->param;
  my $blog_id = $app->blog->id;
  my $d1 = $q->param('d_customfield_cf_entry_event_start_date');
  my $d2 = $q->param('d_customfield_cf_entry_event_last_date');
  if ($blog_id == 4) {
    if ( $d2 le $d1 ) {
      return $app->error(
        $plugin->translate('The event start date or event end date is incorrect.')
      );
    }
  }
}

僕の課題は何とか解決ができそうです。