MTAppjQuery で記事入力欄のパターンを選択出来るようにする

記事の入力欄の並び替えはMTAppFieldSortを使うことで自由に出来ます。

だったら、それをベースにPowerCMS記事のひな形みたいなこともできるよね、ということで試してみました。
MTAppjQueryで色々カスタマイズされている方にとっては当然やってそうな話ですが・・・

MTAppMakeWidget をつかって選択用のウィジェットを追加して、その選択されている値を元にMTAppFieldSortで並び変えるだけという話です。

template1が選ばれてる時はタイトルのみ。
template2が選ばれてる時はタイトル、タグ、キーワード。
template3が選ばれてる時は全部のフィールドが出ています。

適当に書いてみたコードはこんな感じです。

if( mtappVars.screen_id == 'edit-entry'){

var newWidget = $.MTAppMakeWidget({
  label: '記事テンプレート',
  content: '<div><select id="bp_entrytemplateselector" name="bp_entrytemplateselector"><option name="template1" value="template1" selected>template1</option><option name="template2" value="template2">template2</option><option name="template3" value="template3">template3</option></select></div>'
});
$('#entry-status-widget').before(newWidget);
$('div.sort-enabled').removeClass('sort-enabled');

function entryTemplate(sortvalue) {
  $.MTAppFieldSort({
    sort: sortvalue,
    otherFieldHide: true
  });
}

var sortvalue;
var selectedtemplate = $("#keywords").val();
if(selectedtemplate){
  $("#bp_entrytemplateselector").val(selectedtemplate);
}
$("#bp_entrytemplateselector").change(function () {
  $("#bp_entrytemplateselector option:selected").each(function () {
    selectedtemplate = $(this).text();
    if(selectedtemplate == 'template3'){
      sortvalue = 'title,text,tags,excerpt,keywords';
    } else if(selectedtemplate == 'template2'){
      sortvalue = 'title,tags,keywords';
    } else {
      sortvalue = 'title';
    }
    $("#keywords").val($(this).text());
    entryTemplate(sortvalue);
  });
}).change();


}
//
// end EntryTemplate
//

こういうのを書く度にもっとJS頑張らないとと思いますね・・・

選んだテンプレート情報をどうするか?というのがあるのでそれはこの例だとひとまずキーワード欄にいれてありますが、なにかカスタムフィールドを用意しておいてもいいかもしれません。
(カスタムフィールドが1つ増えるのもどうなの?という話もありますが)
変更メモとか使っちゃってもいいのかもしれないですが、取り出しにくかったので少しかんがえものです。
変更メモって結構使われてるんですかね??

MTAppjQuery v1.7.0 から MTAppFieldSort には otherFieldHide というオプションが追加になって、表示オプションの設定を気にせずfieldをいじれる様になったのでだいぶ使いやすくなりましたね。

ユーザーやロールに応じて入力欄をだし分けしてしまってもいいと思いますので要件に応じて正解は色々ありそうな気がしますね。


Comments

comments powered by Disqus