狠狠撸

狠狠撸Share a Scribd company logo
Movable Typeの実践的な
管理画面カスタマイズ
検索カスタマイズ
bit part 奥脇知宏(蔼迟颈苍测产别补苍蝉)
アジェンダ
?MTAppjQueryを使った管理画面のカスタマイズ
?FlexibleSearch.jsを使った高速検索
自己紹介
?奥脇知宏
おくわきともひろ
?bit part
mersy & tinybeans
?かたつむりくんのWWW
自己紹介
?PowerCMS Partner
SOHO
?ProNet SOHO
?Movable Type 5.1
プロの現場の仕事術
(毎日コミュニケーションズ)
Movable Typeの
管理画面のカスタマイズ
?alt-tmplディレクトリにカスタマイズしたテンプレート
を入れると、そのテンプレートが優先的に適用される
MTの管理画面のテンプレート構造の理解が必要
MTの管理画面のカスタマイズ方法(1)
?プラグインでカスタマイズ
?3つのコールバック用フックポイント
?template_source(ソースを書換え)
?template_param(DOMのような操作)
?template_output(出力されたHTMLの書換え)
MTの管理画面のカスタマイズ方法(2)
管理画面のカスタマイズに関する情報
? 『Movable Type 5 プロフェッショナルガイド』
荒木勇次郎(小粋空間)
? MTの管理画面カスタマイズの基本
- The blog of H.Fujimoto
http://www.h-fj.com/blog/archives/2009/11/09-103804.php
? Movable Type管理画面の「壊れにくい」カスタマ
イズのために。 - Junnama Online
http://junnama.alfasado.net/online/2008/06/mt_6.html
しかし、いずれもちょっと
敷居が高い…
そこで
MTAppjQuery
MTAppjQueryとは
?読み方(えむてぃーあっぷじぇぃくえりー)
?Movable Type 5 の管理画面を jQuery でカスタマ
イズするためのプラグイン
?Perl、YAML が不要、alt-tmpl より手軽
?日頃 MT のテンプレートやフロントエンドをやって
いるWebデザイナー?コーダーのためのプラグイン
インストール
tinybeans/mt-plugin-MTAppjQuery · GitHub
https://github.com/tinybeans/mt-plugin-MTAppjQuery
インストール
サーバーにアップロード
mt-static/plugins の中の「_MTAppjQuery」は、
頭のアンダースコアを削除して「MTAppjQuery」にする
プラグインをアップデートする場合は編集したサーバ
ー上のファイルを上書きしないようにしましょう!
注意
使い方
?サーバーにアップロードした
mt-static/plugins/MTAppjQuery/user-?les
の中のファイルを編集してカスタマイズ
使い方(1)
v1.0.0 から mt-static/plugins/MTAppjQuery 内の
ディレクトリ構造が変更になりました m(_ _)m
↓
編集予定の user.js 等を user-?les ディレクトリ
にまとめた
↓
プラグインのバージョンアップが心なしか
楽になるはず…
注意
?インデックステンプレートで user.js、user.css を
作成してカスタマイズ [v1.0.0 new]
使い方(2)
DEMO 1
user.js と user.css のインストール
?プラグインの設定で user.js の URL を指定する
[v1.0.0 new]
使い方(3)
?任意のウェブサイトやブログを自由にグルーピングし
て共通のカスタマイズを適用できる
?その他プラグインの設定で管理画面の色々な場所に
コードを埋め込める [v1.0.0 new]
?埋め込まれる場所はソースコードで確認できる
?もちろん JS や CSS に限らず HTML とかも可能
?DEMO 2:ページの最上部にブックマーク(リンク
集)的なものを入れる
使い方(4)
机能ダイジェスト
の前に大事なこと
?mtappVars
管理画面のカスタマイズに必要な情報が入った変数
?$.MTAppDebug()
mtappVars の値をソースコードを見ずに確認できる
?開発中は $.MTAppDebug() を適用しておくと便利
mtappVars と $.MTAppDebug()
DEMO 3
mtappVars と $.MTAppDebug()
机能ダイジェスト
$.MTAppCustomize()
?ブログ記事?ウェブページ編集画面をカスタマイズ
?フィールドのラベルの変更
?ポップアップヒントの設定
?えんぴつアイコンのクリックでフィールドを表示?
非表示
?「表示オプション」に依存しない強制表示
$.MTAppCustomize()
旧「概要」
旧「キーワード」
$.MTAppMultiCheckbox()
?テキスト入力フォームを複数選択チェックボックスに
?ちょっとデザインを変えてみたり
$.MTAppFieldSort()
?フィールドを並べ替える(カスタムフィールド対応)
DEMO 4
$.MTAppCustomize()
$.MTAppMultiCheckbox()
$.MTAppFieldSort()
この3つをまとめて実行してみます。
$.MTAppDialogMsg()
?ダイアログ?メッセージを表示する
$(foo).MTAppInlineEdit()
?保存された値があると「編集」ボタンが表示される
$(foo).MTAppTooltip()
?フィールド全体ではなくピンポイントでヒントを表示させる
$.MTAppNoScrollRightSidebar()
?右サイドバーウィジェットをスクロールに追随させる
$.MTAppInCats()
?カテゴリによって画面を変えることができる。
DEMO 5
ここまでカスタマイズを商品カテゴリ(ID:2)
にだけ適用したい。
あまりドキュメント化され
てない機能
と
v1.0.0 に追加された機能
ダイジェスト
$.MTAppBatchEditCategory()
?ブログ記事?ウェブページ一括編集画面で、カテゴ
リを一括編集する
$.MTAppSortableBatchEdit()
?ブログ記事?ウェブページ一括編集画面で、ドラッ
グアンドドロップで並び替えて日付を自動変更する
?日付を使ってブログ記事を並べ替える疑似的ソート
機能
?DEMO 6に行く前に
特定のページだけにカスタマイズを
適用させる方法
?$.MTAppBatchEditCategory() や
$.MTAppSortableBatchEdit()はブログ記事の一括
編集画面だけで使えればいい
?今までのバージョンは
if (mtappVars.screen_id == 'batch-edit-entry'
&& mtappVars.scope_type == 'blog' &&
mtappVars.type == 'entry') { ... }
こんな条件分岐を mtappVars を頼りに書いてた…
「user.js を編集(追記)」メニュー
[v1.0.0]
?user.js の <mt:UserFileAppendText> 部分にその
ページを限定するための if 文が挿入される
DEMO 6
ブログ記事の一括編集画面で
「user.js を編集(追記)」を押してみる
DEMO 7
$.MTAppSortableBatchEdit() で
トップページの並び順を変える
$.MTApp1clickRebuild()
?テンプレート一覧での再構築を効率よく
?$.MTAppDebug() と同様に開発中は有効にしておくと良い
DEMO 8
$.MTApp1clickRebuild()
$(foo).MTAppRemoveVal()
?入力した値を簡単に消す
$(foo).MTAppDateAssist()
?今日、明日、明後日の年月日を一発入力
$(foo).MTAppSuggest()
?タグ入力補完のような入力支援
$(foo).MTAppDynamicSelect()
?値を増やせるドロップダウンリスト
DEMO 9
$(foo).MTAppRemoveVal()
$(foo).MTAppDateAssist()
$(foo).MTAppSuggest()
$(foo).MTAppDynamicSelect()
$(foo).MTAppFieldSplit()
?1つのフィールドで複数の値をカンマ区切りで入力
$(foo).MTAppNbspGUI()
?「1項目ごとに改行してください」をGUIで
$.MTAppTabs()
?複数のフィールドをタブでまとめる
DEMO 10
$(foo).MTAppFieldSplit()
$(foo).MTAppNbspGUI()
$.MTAppTabs()
$(foo).MTAppFancyListing()
?iframeで指定したファイルを読み込む
?jQueryプラグインの Fancybox が必要
http://fancybox.net/
?またあらかじめ読み込む一覧をインデックステンプ
レートで作成しておく必要がある
$(foo).MTAppFancyListing()
DEMO 11
$(foo).MTAppFancyListing()
で関連記事のIDをテキスト入力フォームに入れる
$.MTAppGetLabel()
$.MTAppSetLabel()
?ラベルを変更するためだけに $.MTAppCustomize()
を使うのはちょっと面倒
?ラベル名の変更は1箇所で書きたい
$.MTAppGetLabel()
$.MTAppSetLabel()
?$.MTAppSetLabel([
["セレクタ", "旧テキスト", "新テキスト"],
["セレクタ", "旧テキスト", "新テキスト"]
]);
?え?余計面倒じゃん…
$.MTAppGetLabel()
$.MTAppSetLabel()
ブラウザのJavaScirptコンソールに
jQuery.MTAppGetLabel( label );
と入力して実行すればOK!
DEMO 12
$.MTAppGetLabel()
$.MTAppSetLabel()
その他紹介しきれない
机能ダイジェスト
jquery_ready.js
?jquery.js の直後に読み込まれる
?例えば、sort-enable クラスを除去したりする
など、デフォルトのライブラリを適用させない
ようにするのに便利
その他の機能
?$.MTAppTabSpace()
- テキストエリアでタブキーを押してもフィー
ルドは移動せずに、半角スペースが入力され
る。
?$(foo).MTAppNumChecker()
- 全角数字を半角に変換、半角数字以外の文
字を削除、最小値?最大値の設定など
その他の機能
?$(foo).MTAppTaxAssist()
- 税込み、税抜きを簡単に入力
?$.MTAppKeyboardShortcut()
- ブログ記事一覧画面でGmailのようなキーボ
ードショートカットで前後に移動
その他の機能
?$.MTAppMsg()
- MTオリジナルの「保存しました」のような
メッセージを表示
?$(foo).MTAppshowHint()
- 要素にピンポイントでポップアップヒントを
表示
その他の機能
?$(foo).notClasses()
- 複数のclassがない場合はtrue
?$(foo).hasClasses()
- 複数のclassがない場合はtrue
?$(foo).insertAtCaret()
- テキストエリアのカーソルの位置に文字列を
入力
その他の機能
?$(foo).insertListingColum()
- 一覧画面の項目を増やす
?$(foo).noScroll()
- 要素をスクロールさせない
?$.toInt()
- 整数にする
その他の機能
?$.zeroPad()
- ゼロで埋める
?$.digit(num, space)
- 1桁数字を 01 にしたり 半角スペース1 にし
たりする
その他の機能
?$.fn.MTAppCheckCategoryCount()
- 指定した数のカテゴリが選択されているか
チェックする
?$.MTAppDuplicate()
- ブログ記事を複製する
MTAppjQuery v1.0.0
?まもなくリリース
?mersy と一緒にせっせとドキュメントを書いてます…
MTAppjQuery
はここまで
高速JavaScript検索
?exibleSearch.js
?exibleSearch.js とは
?あらかじめ作成しておいた JSON ファイルを
検索することにより、柔軟で高速な Ajax 検索
を実現する jQuery プラグイン
?ページ送りや検索項目の絞り込みなどにも対応
?ブラウザの「戻る」「進む」の動作にも対応
? http://www.tinybeans.net/blog/2010/12/22-230131.html
ダウンロード
?tinybeans/jq-plugin-?exibleSearch ·
GitHub
https://github.com/tinybeans/jq-plugin-?exibleSearch
ファイルの読み込み
<link rel="stylesheet" href="/?exibleSearch/?exibleSearch.css"
type="text/css" />
<script type="text/javascript" src=/slideshow/mtcafe-tokyo-2013springokuwaki/19471953/"http:/ajax.googleapis.com/
ajax/libs/jquery/1.8/jquery.min.js"></script>
<script type="text/javascript" src="/?exibleSearch/
hashchange.js"></script>
<script type="text/javascript" src="/?exibleSearch/
?exibleSearch.min.js"></script>
検索用 JSON を作る
??exibleSearch.js で読み込む JSON を
Movable Type で出力する
http://www.tinybeans.net/blog/2010/12/22-230131.html
検索用 JSON を作る
{"item":[
<mt:entries lastn="0">
<mt:setvarBlock name="item"><mt:entryTitle></mt:setvarBlock>
<mt:setvarBlock name="item{url}"><mt:entryPermalink></mt:setvarBlock>
<mt:setvarBlock name="item{tag}">,<mt:entryTags glue=","><mt:tagName></mt:entryTags>,</
mt:setvarBlock>
<mt:setvarBlock name="item{keyword}">,<mt:entryKeywords>,</mt:setvarBlock>
<mt:setvarBlock name="item{body}"><mt:entryBody remove_html="1" regex_replace="/n?t/g",""></
mt:setvarBlock>
<mt:setvarBlock name="item{more}"><mt:entryMore remove_html="1" regex_replace="/n?t/g",""></
mt:setvarBlock>
<mt:var name="item" to_json="1"><mt:unless __last__>,</mt:unless __last__>
</mt:entries>
]}
検索ボックスの設置
?divだけ用意すれば ?exibleSearch で検索ボッ
クスと検索ボタンを書き出してくれる
?すでにある検索ボックスを使ってもOK
?今回は
<div id= ?exibleSearch-container ></div>
?exibleSearch.js を実行
<div id= ?exibleSearch-container ></div>
<script type="text/javascript">
(function($){
$("#?exibleSearch-container").?exibleSearch({
resultTargetId: "index-main",
loadingImgPath: "/blog02/?exibleSearch/loading.gif",
searchDataPath: "/blog02/search_data.js"
});
})(jQuery);
</script>
selectFields オプション
re?neFields オプション
? selectFields : 検索するフィールドを限定する
? re?neFields : 複数のAND条件を組み合わせる
? re?neFields : {
"key1":"key1の表示名",
"key2":"key2の表示名",
"key3":"key3の表示名"
}
=> <option value= key1 > key1の表示名 </option>
ご静聴ありがとう
ございました。
Update me, everyday!!

More Related Content

Mtcafe tokyo 2013_spring_okuwaki