PEAK XOOPS - News in englishin japanese

Archive | RSS |
  
Poster : GIJOE on 2008-06-13 16:24:49 (8703 reads)

in englishin japanese
EMLHはXCL2.1でもまったく問題なく動きますが、いろいろな意味でcubeUtilsの方がより使いやすい多言語処理と言えるでしょう。前者は一応Hackで、後者はモジュールだ、というのもあります。

ただ、この手の多言語処理は、ob_filterを利用しているので、メール送信処理などで、言語タグが未処理のまま送られてしまうことはままあります。

そのあたりの経験を積んでいるモジュール作者であれば、メールを送信する前、本文などに言語タグ書き換え処理を入れます。


if( function_exists('easiestml') ) {
	$body = easiestml( $body ) ;
}


実際に私が作ったモジュールにも、このようなコードを沢山使ってます。

ただ、このロジックでは、EMLHを入れている場合は良いのですが、cubeUtilsを入れている場合に効きません。そのため、例えばpicoのフォームメール機能を言語タグを利用して記述した場合、タグが未処理のままメール本文になってしまいます。

というわけで、cubeUtilsを利用していても、EMLHと同じ処理がされるようなpreloadを作ってみました。preloadフォルダに放りこんでください。この場合、ファイル名は何でも良いのですが、MultiLanguagePreLoad.class.php と併存する必要があるので、それっぽく名づけてあります。

MultiLanguageCompatibleEMLH.class.php

<?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 ;
	}
}

え? これだけ?
ええ。これだけです

「なんじゃそりゃ!」と突っ込みを受けそうなコードですが、cubeUtilsの言語切替機能を使っている人にはかなりお勧めです。
------------
(2008/06/22 更新)
EMLH 1.30互換とするために、2番目のパラメータ処理を追加しました


Poster : GIJOE on 2008-05-16 04:55:48 (11642 reads)

get_html_translation_table()の罠in englishin japanese
最近、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 ) ) ) ;
}


ところが、それだとなぜかシングルクオートだけがうまく処理されないことに、今さら気づきました。

おかしいなと調べてみたら、get_html_translation_table( HTML_SPECIALCHARS , ENT_QUOTES ) と htmlspecialchars( $text , ENT_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;"
}

& #39; と & #039; …。
そりゃ逆変換できないのも当然です。

ええ〜、そりゃないんじゃないの! という感じです。以前、PHPのマニュアルにも、逆関数の作り方として、get_html_translation_table()の結果をarray_flip()する、なんてコードが載っていたような記憶もあるのですが…

もしかすると有名な不具合なのかもしれませんが、うちでビルドしたCLI版PHPは、4.3.10から5.2.5までことごとくこういう食い違いを見せていたので、もしかしたら誰も気づいていないのかもと思って書いてみました。


Poster : GIJOE on 2008-04-30 05:36:07 (12631 reads)

in englishin japanese
XUGJで質問されて気づいたのですが、XCL2.1のEmailログインpreloadって意外と見つからないですよね。
(もしかしたら、デベロッパーズバイブルあたりに書いてあったのかもしれませんが、今手元にないので確認できません)

絶対に誰かが作っているとは思うのですが、パッと見つからないのは不便なので、ささっと作ってみました。
もちろん、cubeUtilsのオートログインとも併用可能です。
(cubeUtilsはSite.CheckLogin.Successにクッキー処理を追加するだけ。このpreloadはSite.CheckLoginに認証方式を追加するだけだから)

こちらからダウンロードしてください。
http://www.peak.ne.jp/support/xoops/XCL_EmailLoginHack.tar.gz

0 comments

Poster : GIJOE on 2008-04-29 05:25:45 (9359 reads)

in englishin japanese
どうしても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に取り込むことができるようになります。

0 comments

Poster : GIJOE on 2008-01-10 04:53:50 (16261 reads)

in englishin japanese
前回、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アーカイブで試せるはずです。

Read more... | 2881 bytes more |9 comments

« 1 ... 3 4 5 (6) 7 8 9 ... 55 »
Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!