EMLHはXCL2.1でもまったく問題なく動きますが、いろいろな意味でcubeUtilsの方がより使いやすい多言語処理と言えるでしょう。前者は一応Hackで、後者はモジュールだ、というのもあります。
ただ、この手の多言語処理は、ob_filterを利用しているので、メール送信処理などで、言語タグが未処理のまま送られてしまうことはままあります。
そのあたりの経験を積んでいるモジュール作者であれば、メールを送信する前、本文などに言語タグ書き換え処理を入れます。
if( function_exists('easiestml') ) {
$body = easiestml( $body ) ;
}
<?php
function easiestml( $s , $lang = '' )
{
global $cubeUtilMlang ;
if( is_object( @$cubeUtilMlang ) ) {
if( $lang ) {
$orig_lang = $cubeUtilMlang->mLanguage ;
$cubeUtilMlang->mLanguage = $lang ;
$ret = $cubeUtilMlang->obFilter( $s ) ;
$cubeUtilMlang->mLanguage = $orig_lang ;
return $ret ;
} else {
return $cubeUtilMlang->obFilter( $s ) ;
}
} else {
return $s ;
}
}
get_html_translation_table()の罠
最近、unhtmlspecialchars() も実装されたようですが、get_html_translation_table() を利用して、htmlspecialchars() の逆関数を作っていた人も多いでしょう。
function my_unhtmlspecialchars( $text , $quotes = ENT_QUOTES )
{
return strtr( $text , array_flip( get_html_translation_table( HTML_SPECIALCHARS , $quotes ) ) ) ;
}
<?php
var_dump( htmlspecialchars( '"\'<>&' , ENT_QUOTES ) ) ;
var_dump( get_html_translation_table( HTML_SPECIALCHARS , ENT_QUOTES ) ) ;
?>
string(25) "& quot;& #039;& lt;& gt;& amp;"
array(5) {
["""]=>
string(6) "& quot;"
["'"]=>
string(5) "& #39;"
["<"]=>
string(4) "& lt;"
[">"]=>
string(4) "& gt;"
["& "]=>
string(5) "& amp;"
}
XUGJで質問されて気づいたのですが、XCL2.1のEmailログインpreloadって意外と見つからないですよね。
(もしかしたら、デベロッパーズバイブルあたりに書いてあったのかもしれませんが、今手元にないので確認できません)
絶対に誰かが作っているとは思うのですが、パッと見つからないのは不便なので、ささっと作ってみました。
もちろん、cubeUtilsのオートログインとも併用可能です。
(cubeUtilsはSite.CheckLogin.Successにクッキー処理を追加するだけ。このpreloadはSite.CheckLoginに認証方式を追加するだけだから)
こちらからダウンロードしてください。
http://www.peak.ne.jp/support/xoops/XCL_EmailLoginHack.tar.gz
どうしてもd3pipesで取得できないRSS/Atomがあった場合、まずはそのフィードをRSS Validatorにかけてみると良いでしょう。
例えばこんな感じ。
http://feedanalyzer.com/?url=http%3A%2F%2Fwww.ec-cube.net%2Fec-cube.php
基本的なXMLに違反したフィードは意外と多くあります。
問題は、RSS/Atomはあくまで、先方が出力しているので、こちらが文句を言っても修正される保証がない点です。
そういう時に便利なのがtidyです。HTML用に使うことが多いようですが、XMLもちゃんと修正してくれます。
というわけで、d3pipes 0.61では、XML修正用のtidyジョイントも追加しました。
パーサの前に、tidy4xml を挿入してください。
XMLパーサでエラーが出ていたEC-CubeのRSSも、tidyによってちゃんと修正され、d3pipesに取り込むことができるようになります。
前回、resouce.db.php をフックできると操作性・開発性などで大きな改善が出来るよ、などと気を持たせておきながら、2ヶ月以上も放置してしまいました。
まず resource.db.php とは何か一応説明しておきます。これは、Smartyのリソースプラグインと呼ばれるものです。中身には「どこからテンプレートを持ってくるか」「更新状況をどうチェックするか」という処理が記述されています。
XOOPSの場合、特に指定しなければ、"db:"テンプレートが呼ばれるために、"db"リソースプラグインが重要なのです。
次に、標準のresource.db.phpによって実装されているDBテンプレートの問題点・要改善点を下に列挙してみます。
(1) テーマがdefaultだとDBテンプレートのリセット処理が入ってしまう
(2) テーマ下テンプレートによってコンパイルキャッシュが作成されるとテーマを切り替えてもそのまま残ってしまう
(3) テーマ下テンプレートのパス themes/(theme)/templates/(dirname)/(block/)? という階層構造は面倒なだけではないか? しかもDBテンプレートの実態を反映していないので余計な混乱を招く恐れがある
(4) テーマ下テンプレートの置き場所がバラバラ 本家だと themes/(theme)/modules/(dirname)/(block/)? だったりする
(5) テーマ下テンプレートが削除されても認識しない
(6) テーマ下テンプレートが追加されてもコンパイルキャッシュより古いと認識しない
このうち、(1)〜(4)について対応した resource.db.php を作ってみました(下リスト参照)。
もちろん、XoopsTplフックのおかげで、このresource.db.phpの置き場所は、XOOPS_TRUST_PATH/libs/smartyplugins/ で良く、Hackではなくなります。
残った(5)と(6)についても、なんとか対応したいと考えてます。
ホダ塾ディストリビューションでは、jidaikoboさんが、skel_flexテーマに対して積極的にテーマ下テンプレートを導入してくれていますが、このresource.db.phpによって、テーマとテンプレートがうまく連動することがお判りいただけるでしょう。(もちろん従来もテーマ下テンプレートは有効でしたが、連動はしなかった)
最新のNightlyアーカイブで試せるはずです。