Movable Type 技術情報
ぴろり上西
2009年11月02日
Movable Type 4 から、config.yaml に記述を設定することで、今まで Perl のスクリプトファイルで作成していたプラグインのほとんどを代替することができるようになりました。例えば、イベントコールバックを定義する場合、従来のPerlスクリプトファイルとconfig.yamlでそれぞれ書くと、以下のようになります。
MT::Foo->add_callback("pre_save", <priority>, <plugin object>, \&callback_function);
callbacks:
MT::Foo::pre_save: $MT::Foo::callback_function
ところが、config.yamlではpriorityの項目が見当たりません。これは以下のようにすることで設定できることが判りました。
callbacks:
MT::Foo::pre_save:
code: $MT::Foo::callback_function
priority: 5
config.yamlで記述されたプラグインが複数あり、それらが同じコールバックを使う場合でも、これで確実にハンドラの実行順序を指定できるようになりました。
小林
2009年10月28日
MT5.0では、ウェブサイトとブログの結びつきという新しい概念になりましたが、ウェブサイトのタイトルやID、テンプレートをブログに引き継ぐことができません。厳密に言うと可能なのですが、ちょっとタグが複雑になります。
たとえば<$MTWebsiteName$>とブログに書いても、ウェブサイト名は出力できません。ブログでウェブサイト名を出力するには<MTBlogParentWebsite><$MTWebsiteName$></MTBlogParentWebsite>という長いタグを書かなければなりません。これではテンプレートの視認性が悪くなってしまいますね…
そこで、ウェブサイトの情報をブログに簡単に引き継げるようにするために、こんなアイデアはいかがでしょうか?ウェブサイトとブログの連携性を保てば、メンテナンス性が向上するんじゃないかと思います。
※MT5.0ではこのやり方が楽だとおもいますが、もっと簡単なやり方があれば教えてください!
ウェブサイトにテンプレートを作る
ウェブサイトに「共通設定」などの名前でテンプレートモジュールを作成します。
モジュール内で変数に値をセットする
テンプレートモジュールの中に、以下の宣言を書きます。お好みでいろいろ追加したい場合は、MTSetVarsタグの使い方をご覧ください。
<MTSetVars>
website_id=<$MTWebsiteID$>
website_url=<$MTWebsiteURL$>
website_title=<$MTWebsiteName encode_html="1"$>
website_description=<$MTWebsiteDescription encode_html="1" strip_linefeeds="1"$>
common_filepath =<$MTWebsiteURL$>common/
</MTSetVars>
ブログのテンプレートから共通設定テンプレートを呼び出す
先日公開したParentalIncludeプラグインでウェブサイトの共通設定テンプレートを呼び出します。呼び出すときにcache="1"を指定すると、このテンプレートはキャッシュされるので、たくさんのテンプレートからインクルードしたとしてもキャッシュのおかげで再構築が遅くなることはありません。
そして共通設定テンプレートをインクルードした後はMTGetVarで各値を呼び出します。いかに例を示します。
共通設定テンプレートをインクルードする
<$MTParentarInclude module="共通設定" cache="1" ttl="60"$>
タイトルタグにブログ名とウェブサイト名を出す
<title><$MTBlogName$> | <$MTGetVar name="website_title"$></title>
ウェブサイトと同じ概要を使う
<meta name="description" content="<$MTGetVar name="website_description"$>" />
ウェブサイトと同じスタイルシートを読み込ませる
<link rel="stylesheet" href="<$MTGetVar name="common_filepath"$>styles.css" type="text/css" media="screen" />
ウェブサイトのID
<$MTGetVar name="website_id"$>
ウェブサイトのURLへリンクする
<a href="<$MTGetVar name="website_url"$>"><$MTGetVar name="website_title"$></a>
みたいな使い方です。
たとえばウェブサイトのカスタムフィールドで「キーワード」とか作って、全サイトのmeta keywordsを共通化したり、共通化したい値があるのであれば用途はいろいろ使えるのではないでしょうか?
ちょっとやり方として強引感は否めませんが、いまのところこれがベストなやりかたかなぁと思っています。
いたはし
2009年10月16日
こんにちは、いたはしです。
プラグインを量産するエンジニアーずのおかげで変態的なタグ組み合わせが少なくなってまいりまして、若干淋しさを感じる今日この頃です。
さて、今日はちょっとしたワンポイント、陥りやすい罠についてご紹介です。
MultiBlogプラグイン、みなさん使ってらっしゃいます? 複数ブログの管理では必須ですよね。
特に、ポータルページを有するようなウェブサイトであれば、コンテンツブログの記事をアップした際にポータルブログの最新一覧にすぐ反映されてほしい...なんてこと、当然のようにあると思います。
そこで利用するのが、MultiBlogの「再構築トリガー」。再構築してほしいブログのプラグイン設定画面から設定できるのですが、ここでちょっと注意を。
通常の記事保存(即時公開)であれば、「各ブログの"記事を保存"したタイミングで、インデックステンプレートを再構築する」...で問題ありません。
しかし、指定日公開の場合、記事を保存したタイミングでは記事は公開されていません。そして、公開はcron側のお話。「保存」というアクションは発生しないのです。そのため、上記のように設定した再構築トリガーは、指定日公開時では動作しません。
......ということで。
指定日公開を行う場合は、「記事の公開時」にもインデックステンプレートが再構築されるよう、設定をお忘れなく!
小林
2009年10月15日
最近はMT5b3を検証しているのですが、まだMT4からのバージョンアップを体験していなかったので試してみました。
※この情報はベータ版での検証ですので、製品版では問題ないかもしれません。あしからずご了承ください。
検証に使ったのはこのskyarc.co.jpで運用しているMT4.3。実際にウェブサイトとして運用しているものなので、実際のバージョンアップの問題もわかりやすいと思ってここで試しました。
まずこのMTの情報は以下です。
- バージョン:MT4.32
- ブログ数:16
- ブログ記事数:1225
- ウェブページ数:209
うちのウェブサイト、以外にページ数多いですね・・・5年運用するとここまで増えるものなのだ・・・で、ブログの中にはスカイアークのサービスサイト、コーポレートサイト、MTエンジニアブログなどが含まれます。
バージョンアップの作業は以下です。
- データベースをバックアップする
- MT5をサーバーにアップロードする
- cgiの権限を変更する
- プラグインをMT4から移行する
- mt-staticのsupportをMT4から移行する
- mt-config.cgiのデータベース情報を書き換える
- mt.cgiにアクセスするとアップデートが走るのでアップデートする
以上です。さて、ログインしてみると・・・
- New WebSite co.jp (blog_id 26)
- New WebSite careerblog.jp (blog_id 27)
という2つのウェブサイトが出来ました。アップデート時にドメインを見て、ウェブサイトを作成するようです。で、co.jpウェブサイトの設定情報をよく見てみると、なんとサイトURLがco.jpになってました。ん?なんだこれは?
co.jpブログの下にはMTエンジニアブログ(http://www.skyarc.co.jp/engineerblog/)、広報ブログ(http://www.skyarc.co.jp/pressroom/)など13ヶのブログがぶら下がっていました。
ここでおかしいのが、ブログ数が16ヶだったのですが、14つしかブログが出来ていない。よく見るとhttp://www.skyarc.co.jp/(blog_idは1)がウェブサイトにぶら下がっておらず見えない。
データベースを見てみるとblog_idが1のブログはblog_parent_idがNULLになっているためウェブサイトのブログ一覧からは見れないようです。ここを無理矢理データベースを書き換えて、blog_parent_idを26にしてみたところウェブサイトのブログ一覧に表示されました。これは不具合っぽいですね。
で、skyarc.co.jpはblog_id=1がいわゆるMT5でのウェブサイトとして取り扱いたいブログなのですが、MT5上ではバージョンアップ時は「ブログ」として取り扱われます。ウェブサイトに移行しようにもこのブログにはウェブページだけではなくブログ記事も共存しているので、ウェブサイトとして運用するには「ブログ」を新しく作ってそこにblog_id=1のブログ記事を移行しなければならないんでしょうか?
気になる点が、
- blog_id=1で、かつhttp://www.skyarc.co.jp/のブログのblog_parent_idがNULLになって表示されなかった
- MT4でウェブサイトとして運用していたものをMT5上で「ウェブサイト」としてしようとしても、ウェブサイトにはブログ記事が書けないので新しくブログを作ってそこにブログ記事を移行する必要がある?それができなければせっかくMT5に「ウェブサイト」が出来ても、「ブログ」として運用しなければならない?
というところです。
ちなみに今日は風邪を引いてしまってへこたれてしまいました・・・中途半端な検証で申し訳ありませんが、なにかわかればまた書きたいと思います。
小林
2009年10月01日
こんにちは。小林です。
本日は個人ユーザーさんにはあまり面白い記事ではないかもしれませんが、ひとつ製品版のプラグインをご紹介します。
AuthorRegistrationプラグインは、CSVフォーマットでMTのユーザー情報を一括で登録・出力することができます。Movable Type Enterpriseの機能でもユーザー一括登録機能がありますが、AuthorRegistrationではさらに権限の設定やカスタムフィールドの対応を行っております。
たとえば数百人のユーザーを一括で登録したい!権限を一括で変更したい!などユーザー登録作業を省力化します。
ご興味がある方は「お問い合わせフォーム」よりお問い合わせください。
製品の特徴
-
CSVファイルでMovable Typeのユーザー情報をインポート・エクスポートできます。
-
CSVファイルにすでに登録されているユーザーがあった場合は情報を上書きします。
-
ユーザー登録と同時に権限の設定を行えます。
-
登録・失敗ログが出力されます。
-
カスタムフィールドにも対応します。
-
Movable Type Enterprise版のみ、グループを指定することができます。
プラグインについて
-
本プラグインは無償配布しておりません。製品ページよりご購入ください。
ユーザー情報CSVインポート・エクスポートプラグイン AuthorRegistration