Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@y_hamauchi

MovableTypeのカテゴリ一覧画面をカスタマイズするときに注意すること

More than 3 years have passed since last update.

この記事は Movable Type Advent Calendar 2016 – Adventar の 11日目の記事です。

MovableType経験は浅いのですが、今年はちょいちょいMovableTypeを触る機会がありまして。
その際に経験した、カテゴリ一覧をカスタマイズしたらデータが飛んだお話を書きます。

前提条件

MTAppjQueryを使って管理画面カスタマイズを入れています。
また、実際の経験としてはPowerCMSでのお話なのですが、MovableTypeでも同じだと思っています。

やること

カテゴリ一覧で、条件にマッチしたカテゴリの表示を非表示にします。
今回私がやったのは、記事が0件となっているカテゴリを非表示にするものです。

やったこと

jQueryでカテゴリをループして、件数表示が0件だったらhideするという簡単なものです。
例えば、3階層目は非表示とする場合はこんな感じ。
ついでに、表示/非表示を切り替えるボタンも入れておきます。

user.js
$('.lv-3').hide();
$('#area-action').append('<input type="button" id="btn-toggleCategoryList" value="カテゴリ表示切替" class="button" />');
$('#btn-toggleCategoryList').on('click', function () {
    if (isHide) {
        $('.lv-3').hide();
        isHide = true;
    } else {
        $('.lv-3').show();
        isHide = false;
    }
});

起こったこと

カテゴリの並べ替えなどを行って保存をかけたら、非表示にしていたカテゴリが消えました

解説

movabletype/tmpl/cms/list_category.tmpl
function bulkUpdateCategoriesを見るとわかるのですが、jQuery('.sortable-item:visible')で取得したDOMからupdateのデータを作成してajaxで一気に更新処理をかけているようです。
つまり、hideしてしまうと、削除の扱いと同義なのですね。

そこまで調べてからカスタマイズしろって話だし、inputもないからそんな予感もしてなかったわけではないのですが...。

解決策

tmplを書き換えるのはバージョンアップができなくなってよろしくありませんので、user.jsで対応するのが望ましいと考えました。
で、bulkUpdateCategoriesが走る前に、hideしたカテゴリをshowしてあげれば良いわけです。
ただ、このイベントのフックのようなものがなさそうだったので、イベントを補足して先に実行してあげるようにしました。

user.js
var func;
$.each($('.save').data('events'), function(i, e) {
    func = e[0].handler;
});
$('.save').unbind().on('click', function () {
    $('.lv-3').show();
    func();
});

カスタマイズはよく調べて自己責任で

そもそもデータを消しちゃった点は、仕組みをちゃんと調べないでやってしまったことが問題で、反省点です。
ですが、そもそもこのカスタマイズ自体はデータ更新に絡むところを触っているので、トリッキーな部類だと思います。
あくまで自己責任ということで。

もしかしたらもっと良い方法があるかもしれませんので、ご存知の方は教えてください。

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
y_hamauchi
株式会社インセンブル代表取締役です。 最近コードを書くことは減っていますが、書くとしたらLaravelかkintone関連です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?