MODxで携帯コンテンツ その2


昨日の日記で書いてた文字コード変換のプラグインをもう少し効率よくしてみた。

[プラグイン名]UTF-8 to Shift_JIS
[イベント]OnWebPageInitのみにチェック
[備考]プラグイン名を変えると動きません
[機能説明]$parentIdに設定したドキュメントIDより下の階層にあるドキュメントはUTF-8からShift_JISにエンコードさせて出力される。
//------------------------------------------------------------------------ // // UTF-8 to Shift_JIS for MODx // // Author : soushi // Version : 1.10 // Date : 2007/12/26 // //------------------------------------------------------------------------ // parent id of target document $parentId = 10; switch ($modx->Event->name){ case "OnWebPageInit": $id = $modx->documentIdentifier; $parentIds =array_flip($modx->getParentIds($id, 100, array($id))); if( isset($parentIds[$parentId]) ){ $modx->config['modx_charset'] = 'Shift_JIS'; //$modx->addEventListener('OnWebPagePrerender', 'UTF-8 to Shift_JIS'); //MODx 0.9.6ではaddEventListenerが機能しない //仕方ないので専用処理 $el= &$modx->pluginEvent['OnWebPagePrerender']; if (empty ($el)){ $modx->pluginEvent['OnWebPagePrerender']= array (); $el= &$modx->pluginEvent['OnWebPagePrerender']; } array_push($el, 'UTF-8 to Shift_JIS'); } break; case "OnWebPagePrerender": $modx->documentOutput = mb_convert_encoding($modx->documentOutput,'SJIS','UTF-8'); break; }

前回書いたものはイベントをフックするたびに親ドキュメントを探してたのですが、今回は最初のイベントのフックで文字コード変換対象のドキュメントが確定したら、そこから自動的に後のイベントを作成しています。
多分、ちょっとだけ効率はよくなってる…はず。

ちなみにMODx APIでイベントを追加できそうな関数addEventListenerがあったけど動かなかった_| ̄|○
仕方ないのでこの関数を使わないようにした。

あと一緒にテンプレートの切り替え機能とかも実装してみたけど微妙に使いづらいのでまだ非公開。
時間ができたら正式にリリースしようかな。。。と思う今日この頃。
誰か時間をくださいー。

作成日:2007/12/27 01:50:39
トラックバック  ※トラックバックは承認後に表示されます。
TrackbackURL:このページのトラックバックの受付は終了しています。

トラックバックはありません。
コメント
1
文字変換に感謝thr 13Feb2008 08:35PM
はじめまして、thrと申します。

上記の記事のプラグイン個人的に利用させていただけないでしょうか?

ちょうど携帯サイトをmodxで作りたいとかんがえていました。

コメントで書き込み失礼かとおもいましたが、記入させていただきました。
2
そうし 14Feb2008 01:59AM
> THRさん
はじめまして!
プラグインは自由に使っていただいても問題ないですよ。
特に使用に制限はかけてないです。
(たいしたソースでもないですし…)

本当はもう少し使いやすくしてから正式に公開しようと思ってたのですが、今のところその時間がとれずに公開できずじまいです(^-^;)
3
複数指定しぇん 31May2009 11:30AM
はじめまして。
文字コードで困っていまして、とても役に立ちました。

一つ質問ですが、
$parentIdでドキュメントIDの複数指定はできませんか?

サブドキュメント以下に入れればいいと思いますが、できれば親ドキュメントの複数していができればと思いました。
4
そうし 2Jun2009 02:50AM
> しぇんさん
始めまして!

複数のParentIdの指定ですかぁ。
ちょっと色々機能が追加されてますが、MobileConverterなんてどうでしょう?
MobileConverterはこの日記に書いてるコードの機能拡張版で複数のParentIdの指定も可能になっています。

以下のURLからダウンロードできます。

http://ayd.jp/p_pc/modx/MobileConverter.html

なるべく汎用性を持たせるように設計した関係上、慣れるまで少し設定がややこしいかもしれないです。
5
複数指定できました^^しぇん 2Jun2009 11:09PM
そうし様 アドバイス有り難うございます。

MobileConverterを使用させていただき、複数設定可能になりました。

色々拡張できそうで、利用させていただきます。
それにしてもMODxはシンプルだけど奥が深いですね。
6
そうし 3Jun2009 01:45AM
> しぇんさん

無事に設定できましたか~おめでとうございますっ。
modxは慣れてしまえばかゆい所に手が届くCMSだと思います。
ちょっと情報が少ないのが玉にきずですが(^^;

ちなみにこのサイトもmodxで作ってます。
あまり向いていないと言われるブログ風な使い方ですが、それなりに使えています(笑)
7
キャッシュ機能しぇん 3Jun2009 02:49PM
そうしさま

たびたびすみません。MobileConverterで指定したドキュメントIDのキャッシュ機能は強制手的にOFFとのことですが、UTF-8 to Shift_JISプラグインもParentIdで指定したドキュメントのキャッシュ機能の方もOFFになりますか?

気になったので質問させていただきました (汗)
8
そうし 5Jun2009 03:18AM
> しぇんさん

このページに書いているUTF-8 to Shift_JISプラグインに関してはキャッシュ機能はOFFにならないです。
MobileConverterはテンプレートの切り替えまで機能に含めてしまったので、キャッシュ機能がOFFになるように設計しています。
でも、テンプレート切り替えを使わない方はキャッシュ機能をOFFにしたくないって場合もあるかもしれませんね。

ちょっと課題として考えてみます…(が、時間がないです(涙))
9
XML宣言は?nakahii 2Mar2010 10:08PM
突然で申し訳ございませんが、お尋ねさせて下さい。
携帯のテンプレートのXML宣言は<?xml version="1.0" encoding="Shift_JIS" ?>にして、テンプレートを作成するのでしょうか?
それとも<?xml version="1.0" encoding="UTF-8" ?>で作成しておくと自動的にXML宣言の部分も書き換えて切り替わるのでしょうか?
テンプレートの部分で悩んでおります。お暇なときで結構ですので宜しくご教授お願い申し上げます。
10
No9解決しましたnakahii 4Mar2010 02:01PM
お騒がせ致しました。
MobileConverter2をダウンロードして読みました。それで解決いたしました。
有難うございます。
11
そうし 4Mar2010 08:54PM
> NAKAHIIさん
返事がなくてすいません(^^;
すでに解決していると思いますが、テンプレートのXML宣言部分の書き換えは行いません。
書き換えるのはHTTPヘッダのcharsetの部分だけになります。
テンプレート中に書かれた文字コードも変換したほうがいいかなと思ったことはあったのですが、書き方が色々あるのと、そのフォローのせいで処理が重くなるのはいやだなぁと思って結局実装しませんでした。
ただそこで困ったという話を聞かないので今のところ実装は考えてないです。
名前:

タイトル:

コメント: