最近の更新

関連


その他いろいろ

MODxでつくる! 最強のCMSサイト カバー
MODxでつくる! 最強のCMSサイト

はやくMODx 2.0でないかなあ

7bitで使っているWordPress MEを2.1.3にアップグレードしました。
MODxに埋め込んでいるWordPress Integratorの兼ね合いで一度動作しなくなりましたが、
wp-settings.phpの=を=&に置換し、スニペットに

global $wp_the_query;
global $wp_locale;

を追加して解決。またグローバル変数が増えたようです。最新(1.0.1)のWordPress Integratorではまだ上記の修正を含んでいないので、動かない場合は書き加えてみてください。

またまた安直な名前でプラグイン/スニペットを作りました。

MODxには基本的に多言語を同一のサイトでさくさく切り替える機能はないのですが、このサイト自体英語圏のお客さんが多い(あるいはスパマー)ということで書いてみました。
Multilingual Listing

ドキュメントを作成する際、document, document-en, document-frとデフォルト言語以外はサフィックスつきのエイリアスを指定するのが前提です。
階層は問いませんが、兄弟ドキュメントにするのが無難でしょう。各サブ言語はメニュー表示しない設定にしないとWayfinderなどでリストが長くて見づらくなります。

今の7bitでいうとWordPress Integratorで使われています。ページの左上に切り替えリンクに注目。
日本語ブラウザを使っていると恩恵は全然ありませんが、一応要求言語をみて振り分けています。
暇な方はFirefoxのツール»オプション»詳細»一般»言語設定 でenを一番上にし、Wordpress Integratorのページ以外(たとえばMODxのページ)からWordpress Integratorにアクセスしてみると、英語版が表示されるのが分かると思います。
なぜWordpress Integratorのページから飛ぶのではダメかというと、複数言語の対応が今ひとつだった場合、ブラウザの要求言語しか見られないのは不便かもしれないから。
そのため、「言語違いの同ドキュメント」がリファラにある場合は振り分け処理をしません。

最後に。英語圏のページにいる間はリンク生成を全部英語ページに、というのも考えましたが、かなり面倒な上コアのハック必須(たぶん)なので今のところ対応予定はありません。

多言語を推すページ自体が多言語化していないのは二日遅れの冗談だとでも思ってください。(英語力が…orz)

MODxにWordPressを埋め込むWordPress Integratorの1.0.1を公開しました。
主な変更は、

  • WordPress2.1対応(WP側に若干の修正が必要)
  • 今までMODx側のプラグインに< ?php ... ?> が含まれていたのを修正

といったところです。
MODx0.9.5+WP2.1で動作確認しています。他の環境で動いたり動かなかったりした場合は教えて貰えると助かります。
(2/15-20はネット環境がないのでサポートできませんが、掲示板にでも書いておいてください)

MODx0.9.5付属のFCKEditorのアップローダ(manager/media/brwoser/mcpuk)でマルチバイト文字列を名前に持つファイルをアップロードすると、色々と面倒なことになります。

削除も出来なくなってしまうことがあるので、アップロード・選択・削除が可能になるパッチを書いてみました。(編集やファイル名変更はできません)
実用上殆ど役には立たないでしょうが、間違えてUPしてしまった物を消すくらいには使えます。
2回rawurlencodeしています。

PHP4,PHP5のフレームワーク、CakePHP日本語リファレンスが出たようですね。(via PHPSPOT開発日誌)

PHPは$this必須のせいで中々クラスをバリバリ書く気にならんのですが、折角なので次何か作るときは使ってみよう。

RoR全盛とはいえ、共用サーバでmod_phpが限界の人には良さそうです。symfonyは重いようですし。

2006 07 22

Authが難しい

認証を楽々使えるPEAR::Authには毎度お世話になっていますが、ユーザ名とパスワードの一致以外のログイン条件をどう書いて良いものか分かりません。
ログインした後の処理と失敗したときの処理は指定できるのに…preLoginFunctionが欲しい。

仕方ないのでログイン成功後にチェック→条件を満たしていなければlogout、としてみました。

function check_alive($auth){
	//alive
	if($auth->getAuth()){
		global $db;
		$q_username = $db->quoteSmart($auth->getUsername());
		$querystr = "SELECT alive FROM ? WHERE username = {$q_username} LIMIT 1;";
		debug($querystr);
		$rs = $db->getOne($querystr);
		if( DB::isError($rs) ){
			echo "エラー";
			return;
		}
		if( $rs==0 ){ //!alive
			$auth->logout();
			derivedAuth::drawLogin($auth->getUsername());
			return false;
		}
	}
	return true;
}

« 前のページ