MT4 beta7: ウィジェットの利用を変数で設定してみる

MT4 beta7の標準テンプレートでは page_layout の値でサイドバー用テンプレートの呼び出し方を制御しています。これにウィジェットを利用するかしないかを追加してみました。ここでは初期導入時に設定を追加してしまう方法を記載しますので、導入後にはそれぞれのテンプレートを修正してください。

先ず footer.mtml を修正します。<MTIf name="sidebar"> 以降を次のようにしました。

<MTIf name="sidebar">
<MTIf name="widget_use">
<div id="beta">
<div id="beta-inner">
<$MTWidgetSet name="First Widget Manager"$>
</div>
</div>
<MTElse>
<MTIf name="page_layout" eq="layout-tw">
<$MTInclude module="<__trans phrase="Sidebar - 2 Column Layout">"$>
<MTElse>
<MTIf name="page_layout" eq="layout-wt">
<$MTInclude module="<__trans phrase="Sidebar - 2 Column Layout">"$>
<MTElse>
<MTIf name="page_layout" eq="layout-twt">
<$MTInclude module="<__trans phrase="Sidebar - 3 Column Layout">"$>
<MTElse>
<$MTInclude module="<__trans phrase="Sidebar - 3 Column Layout">"$>
</MTElse>
</MTIf>
</MTElse>
</MTIf>
</MTElse>
</MTIf>
</MTElse>
</MTIf>
</MTIf>

こうする事で変数 widget_use が有効であればウィジェットを利用するという制御ができるわけですね。ですのでたとえばメインインデックスにてウィジェットを利用するのであれば main_index.mtml のMTSetVar群の最後にでも次の一行を加えればOKです。

<MTSetVar name="widget_use" value="1">

実用に耐えるところまで引き上げようとすると各テンプレート毎のウィジェットマネージャ切り替えとかも入りますのでもう少し条件分岐を追加する事にはなりますが、共通のウィジェットマネージャを使う分にはこれでいけそうです。

因みにウィジェットの標準テンプレートは3.3の名残を濃く残していますので4.0風に表示するのであれば書き換えちゃうのもありかも。

MT4 beta7: ウィジェット用のテンプレートは全然更新されていないっぽい

粗方 default_templates 周りの検証は終わったのウィジェットの方に手を出し始めました…が、なんかボロボロだ。新規テンプレートでのクラスが widget-hogehoge で始まっているのに対して /mt/plugins/WidgetManager/default_widgets の記載は3.3の時のまま。新規で追加されているものは別としてそのまま使うとスタイルが崩れるので注意が必要です。

まあ、そうは言っても module-hogehoge から widget-hogehoge への変更のみで hogehoge 部分の記載は変わっていないので一括で文字列変換かけちゃえばOKなんですがね。

当サイトはウィジェットによるサイドバーの構成をしているので最終的にはこちらを触ることが多くなってきます。このあたりも次回ベータ?で修正されているか注目したいところですね。(何か変更加わっているかもしれないし。)

MT4 beta7: インストールしてみた

default_templates のカスタマイズ終わったんでインストールしてみました。via: MT4 beta7: default_templatesを比較 (cefa::blog)

ただレイアウトの変更にちょっと癖がある感じ。例えばインデックステンプレートの表示を右サイドバーの2カラムにしたければ冒頭で次のように変数の設定をしてあげる必要があるっぽいです。

<MTSetVar name=”page_layout” value=”layout-wt”>

同様に両サイドバーの3カラムの場合は次のように記載。

<MTSetVar name=”page_layout” value=”layout-twt”>

他にも footer.mtml に項目追加すれば layout-wtt とかもいけそうですが、そこまでやる気は全くございません。いつもの通りチョット標準のCSSを外部から触って2カラムの750px固定にしてみました…というわけでベータ版のブログはこんな感じになっております。

参考URL
cefa::blog::beta

MT4 beta7: default_templatesを比較

via
Six Apart – Movable Type News: Movable Type 4 ベータ 7を公開

ベータ7の登場です。ベータ6からdefault_templatesの中がガラッと変わってしまった事もあったので今回はテンプレートの比較をしてみました。結果は次の通り。

base_theme.mtml
ウィジェット周りをだいぶ弄った模様。
comment_form.mtml
コメント投稿ボタンのIDが comment-post から comment-submit に変更されている。
comment_response.mtml
フォーム同様 Post から Submit へ変更。
entry_metadata.mtml
Posted by が By へ変更されている。
Posted on のコメントが除外されている。
footer.mtml
サイドバーのカラム設定と連動するような記載が追加されている。
エンジンとCCライセンスの表示が追加されている。
header.mtml
MTIncludeが一行追加。
javascript.mtml
to comment on this post が to comment on this entry に変更されている。
main_index.mtml
MTSetVar での設定名が module_recent_posts から module_recent_entries に変更されている。
sidebar_2col.mtml, sidebar_3_col.mtml
殆ど書き換え?
trackbacks.mtml
post を entry に変更。

別に post だろうが entry だろうが問題ないと思うんですがね。序に post と submit も。ニュアンスの問題なんだろうけれどクレームついたんだろうな…と。バージョン変わるんだから語句が少しくらい変わっても気持ちも切り替わって良いんじゃないでしょうか。

とりあえずdefault_templatesを自分用に修正してこれからインストールしてみます。

MT4 beta6: default_templatesを弄りつつCSSを調整しつつ

何だかんだ言ったところでベータ6のdefault_templatesがそのまま採用されそうな予感を覚えたので、テンプレートの修正というかカスタマイズを始めました。とりあえず実行に移したのは次の3つ。

  1. /mt/lib/MT/L10N/ja.pm を眺めながら <__trans phrase=”hogehoge”> を追加してみたり
  2. asset-hoge に変更されているクラス名にCSSを対応させてみたり
  3. コメントフォームのformタグにnameが入ったままだったので削除してみたり

テンプレートが巻き戻ったら現在のモノをコメント部分だけ修正すれば良いので、どちらにせよ正式版リリース時には間に合うでしょう。そんなベータ検証用のページは以下に。興味があればご覧ください。

参考URL
cefa::blog::beta

MT4 beta6: 弄ってみた感想

コメントフォームの div と form の構造が修正されていました…で終われば良かったんですが、何か色々と文句を言いたい場所があったりして。インタフェースとかについては色々なサイトで挙げられているような不満とか無いんですけれどテンプレートについては色々とありますよ。

まず急に沸いてきたサイドバーの選択。2カラムと3カラムとを選択するのですが、選択する場所がフッターモジュールってどうなのさと。

次にテンプレート記載のクラスとID名が思いっきり変わっている件について。これまでのスタイルは全部破棄ですか?ベータ5までは着せ替えが自由にできて 3.3 との互換性もあって良いなあとおもっていたのですが、ベータ6になって急に変更って…しかも一緒にパッケージングされている vicksburg-2 とか内容変更されていないから画面崩れるし。

この段階に来てテンプレート系の大掛かりな修正が入ってくると本番リリース時に差し替える為のカスタマイズテンプレートを作っている方たちに大打撃だと思うんですよね。私もその一人ですし。クラス名の変更なんていうのは、仕様を固める段階の作業でこの場にきてやる事では無いと思います。

通るかどうかはわかりませんが、Six apartに投げてみようかと。

続きを読む MT4 beta6: 弄ってみた感想

MT4 beta6: beta5からアップグレードしてみた

via
Six Apart – Movable Type News: Movable Type 4 ベータ 6を公開

ついにベータも6となりましたね。リリースに向けての最終確認版という事でしょうか。本来であれば来週であった出荷を三週間延ばしてのバグ潰しですからSix apartの気合の入り様が見て取れます。

さて今回のベータ6。私の注目はただ一点でした。それは…

“itex2MML.pl動いてください!”

何だか祈りにも近い状態だったわけでして。結論から言いますとOKでした。問題なくフィルタメニューが表示されました。良かったですよ…ホント。後の問題は静的生成と動的生成の選択だけです。

本来であればPerl系のプラグインを利用している場合ダイナミック・パブリッシングは利用できないのですが、Perl版ダイナミック・パブリッシングというプラグインを導入すればいけちゃうんです。既にMT4対応版が公開されているので選択肢としては用意されているんですが…どうしたものかな。

とりあえずはMathMMLを捨てずにすんだので良かった…というお話でした。

参考URL
Six Apart – Six Apart: Movable Type 4 出荷延期のお知らせ
The blog of H.Fujimoto:Perl版ダイナミック・パブリッシング(MT4用)

MT4 beta5: mt.js の改修一通り完了

MT4 beta4: mt.jsを思いっきり改修してみた (cefa::blog) の続きです。

課題だった ただIEだとonclickイベントからの匿名コメントフォームの呼び出しができないみたい の解決策が見つかったという話。

via
IE の getAttribute / setAttribute: Days on the Moon

この (手抜き) 実装が原因で、getAttribute / setAttribute で class 、style 、イベント属性などを操作できないというバグが IE にはあります。具体的には以下のようにしなくてはいけません。

…という事で解決策まで提示されていたので大変助かりました。具体的には onclick の部分を書き換えるのですが、Function() から関数を呼び出そうとすると Firefox 側が臍を曲げてしまったので結局ブラウザを判別(この場合はIEとその他)して処理を分けることにしました。

if (document.documentElement.getAttribute("style") == document.documentElement.style) {
a[2].setAttribute('onclick',new Function('showAnonymousForm();'));
} else {
a[2].setAttribute('onclick','showAnonymousForm();');
}

これで一応は希望の動作をしたというわけで改修完了です。

MT4 beta5: beta4からアップグレードしてみた

via
Six Apart – Movable Type News: Movable Type 4 ベータ 5を公開

ベータ5では、Movable Type 4 Beta以前のバージョンのMovable Typeからのアップグレードがうまくできません。ベータ5.1をリリースする予定です。それまで、アップグレードはお控えください。 修正しました(2007-07-04)。

…という事で公開時のファイル名に注意です。 MT-4.0-beta5-20070703.zip が手元にある場合にはアップグレード時に問題が出るようですので注意しましょう。現在は MT-4.0-beta5-20070704.zip が公開されています。

beta4 からのアップグレードは基本的にファイルの上書きのみの様です。全ファイルを上書きした後ダッシュボードを呼び出してフツウに再構築しました。テンプレートも特に変更なし。やはりコメント部分は自分で直さねばならんのか orz

MT4 beta4: mt.jsを思いっきり改修してみた

MIMEタイプをapplication/xhtml+xmlに変更したらコメントフォームが表示されなくなったという問題。問題の大部分はdocument.writeの使用が原因なのでそこをターゲットとして修正。

writeCommenterGreeting()は殆ど書き換えてしまいました。

function writeCommenterGreeting(commenter_name, entry_id, blog_id, commenter_id, commenter_url) {
<MTIfRegistrationAllowed>
var a = new Array(3);
var text = new Array(5);
if (document.getElementById && document.createElement) {
var cfea = document.getElementById('comment-form-external-auth');
a[0] = document.createElement('a');
a[0].setAttribute('href','<$MTCGIPath$><$MTCommentScript$>?__mode=login&entry_id=' + entry_id + '&blog_id=' + blog_id + '&static=1');
text[0] = document.createTextNode('サインイン');
a[1] = document.createElement('a');
a[1].setAttribute('href','<$MTRemoteSignOutLink static="1"$>&entry_id=' + entry_id);
text[1] = document.createTextNode('サインアウト');
text[2] = document.createTextNode(commenter_name);
if ( commenter_name &&
( !commenter_id
|| commenter_blog_ids.indexOf("'" + blog_id + "'") > -1))
{
var url;
if (commenter_id) {
url = '<$MTCGIPath$><$MTCommentScript$>?__mode=edit_profile&commenter=' + commenter_id + '&blog_id=' + blog_id;
if (entry_id) {
url += '&entry_id=' + entry_id;
} else {
url += '&static=1';
}
} else if (commenter_url) {
url = commenter_url;
} else {
url = null;
}
if (url) {
a[2] = document.createElement('a');
a[2].setAttribute('href',url);
cfea.appendChild(a[2]).appendChild(text[2]);
} else {
cfea.appendChild(text[2]);
}
text[3] = document.createTextNode('さん、コメントをどうぞ。');
cfea.appendChild(text[3]);
cfea.appendChild(a[1]).appendChild(text[1]);
} else if (commenter_name) {
text[3] = document.createTextNode('このブログにはコメントする権限を持っていません。');
cfea.appendChild(text[3]);
cfea.appendChild(a[1]).appendChild(text[1]);
} else {
<MTIfRegistrationRequired>
text[3] = document.createTextNode('してからコメントしてください。');
cfea.appendChild(a[0]).appendChild(text[0]);
cfea.appendChild(text[3]);
<MTElse>
a[2] = document.createElement('a');
a[2].setAttribute('href','javascript:void(0);');
a[2].setAttribute('onclick','showAnonymousForm();');
text[3] = document.createTextNode('してからコメントするか、');
text[4] = document.createTextNode('匿名でコメントしてください。');
cfea.appendChild(a[0]).appendChild(text[0]);
cfea.appendChild(text[3]);
cfea.appendChild(a[2]).appendChild(text[4]);
</MTIfRegistrationRequired>
}
}
</MTIfRegistrationAllowed>
}

あと一番最後の MTIfRegistrationAllowed で囲われた部分。

<MTIfRegistrationAllowed>
if ('<$MTCGIHost exclude_port="1"$>' != '<$MTBlogHost exclude_port="1"$>') {
var script = document.createElement('script');
script.setAttribute('src','<$MTCGIPath$><$MTCommentScript$>?__mode=cmtr_name_js');
cfea.appendChild(script);
} else {
commenter_name = getCookie('commenter_name');
ids = getCookie('commenter_id').split(':');
commenter_id = ids[0];
commenter_blog_ids = ids[1];
commenter_url = getCookie('commenter_url');
}
</MTIfRegistrationAllowed>

この改修によりどこかのidを掴んでタグを記載するような動きに変わるのでコメント入力フォームテンプレートも改修。

<MTIfRegistrationAllowe>
<div id="comment-form-external-auth"></div>
<script type="text/javascript">
<MTIf name="comment_preview_template">is_preview = true;</MTIf>
writeCommenterGreeting(commenter_name, <$MTEntryID$>, <MTEntryBlogID$>, {hogehoge}
</script>
<MTIfRegistrationAllowed>

これでFirefoxでは確認とれました。ただIEだとonclickイベントからの匿名コメントフォームの呼び出しができないみたい。次はここの確認か…。

先は長そう。