Movable Type 7 の記事とコンテンツデータを複製できるメソッドを書いてみた

これは MTAppjQuery Advent Calendar 2018の 7日目の記事です。 今回は、Movable Type 7 の `コンテンツデータ` または `記事` を複製できる独自のメソッドを作ってみました。

この記事は弊社 bit part 合同会社が提供している Movable Type プラグイン「MTAppjQuery」の利用を前提としております。MTAppjQuery って何?という方は弊社の「MTAppjQuery」の製品ページをご覧ください。

これは MTAppjQuery Advent Calendar 2018 の 7日目の記事です。

今回は、Movable Type 7 の コンテンツデータ または 記事 を複製できる独自のメソッドを作ってみました。

実際に動作させてみると下図のような感じになります。

記事の複製

コンテンツデータの複製

mtapp.apiDuplicateContent

今回のコードは下記のようになります。 細かい説明は割愛させていただきますが、MTAppjQuery v2 から同梱されているエムロジック社の DataAPIProxy プラグインのおかげで、このような認証が必要なエンドポイントでも、Movable Type で権限を持っていれば、管理画面の認証を利用して Data API の認証も通すことができます。

なお、ところどころ alertprompt 系の処理には昨日の Movable Type の管理画面に SweetAlert2 を導入してみよう で導入した SweetAlert2 を利用しています。

(function ($) {
 mtapp.apiDuplicateContent = function () {
 mtappVars.DataAPI.getToken(function (token) {
 if (token.error) {
 mtapp.modalMsg({
 title: 'Error',
 content: token.error.message
 });
 return;
 }
 if (mtappVars.type === 'content_data') {
 mtappVars.DataAPI.getContentData(mtappVars.blog_id, mtappVars.content_type_id, mtappVars.content_data.id, function (data) {
 if (data.error) {
 mtapp.modalMsg({
 title: 'Error',
 content: data.error.message
 });
 }
 delete data.id;
 swal({
 type: 'info',
 title: data.label + 'を複製します。'
 }).then(function () {
 data.status = 'Draft';
 mtapp.loadingImage('show');
 const newContentData = Object.toJSON(data);
 mtappVars.DataAPI.createContentData(mtappVars.blog_id, mtappVars.content_type_id, newContentData, function (response) {
 mtapp.loadingImage('hide');
 if (response.id) {
 swal({
 type: 'success',
 title: response.label + 'を作成しました。'
 }).then(function () {
 location.href = mtappVars.adminScript + '?__mode=list&_type=content_data&type=content_data_' + mtappVars.content_type_id + '&blog_id=' + mtappVars.blog_id;
 });
 return;
 }
 swal({
 type: 'error',
 title: data.error.message
 });
 return;
 });
 });
 });
 }
 else if (mtappVars.type === 'entry') {
 mtappVars.DataAPI.getEntry(mtappVars.blog_id, mtappVars.entry.id, function (entry) {
 if (entry.error) {
 mtapp.modalMsg({
 title: 'Error',
 content: entry.error.message
 });
 }
 delete entry.id;
 entry.title = 'COPY_' + entry.title;
 swal({
 title: 'タイトルを入力してください',
 input: 'text',
 inputValue: entry.title
 }).then(function (res) {
 if (res.value) {
 entry.title = res.value;
 }
 entry.status = 'Draft';
 mtapp.loadingImage('show');
 const newEntry = Object.toJSON(entry);
 mtappVars.DataAPI.createEntry(mtappVars.blog_id, newEntry, function (response) {
 mtapp.loadingImage('hide');
 if (response.id) {
 swal({
 type: 'success',
 title: response.title + 'を作成しました。'
 }).then(function () {
 location.href = mtappVars.adminScript + '?__mode=list&_type=entry&blog_id=' + mtappVars.blog_id;
 });
 return;
 }
 swal({
 type: 'error',
 title: entry.error.message
 });
 return;
 });
 });
 });
 }
 });
 };
})(jQuery);

MTAppjQuery について

このように MTAppjQuery では、プラグインが提供しているメソッドの他に、ご自身で独自のメソッドを定義して自由自在に Movable Type の管理画面をカスタマイズすることができます。より使いやすい Movable Type を目指しましょう。

以上です。

Published 2018-12-07
Updated 2019-06-25

「MTAppjQuery」カテゴリの記事一覧