Myページ
ホーム
コミュニティの人々
ソフトウェア
技術紹介
適用分野
Tyzohとは
ご意見お問い合わせ

ワタナベのブログ

YAMLでXOOPSユーザ情報を拡張したい

XOOPSはユーザ管理の仕組みがありますが、 書き込める情報が定型的で、追加の情報を入れたいと思うとデータベースを拡張してモジュールを開発したりと大変です。


やりたいことは、ユーザ情報のページで、blogのURLとその人の紹介文を入れたいというものです。ユーザ情報の管理画面をじっと睨みつけると、ありました。使えそうなフィールドが。
「その他」という自由記述の欄に付加情報を格納しておくことにしましょう。

さて、これをどうやって構造化するかが課題です。

今回注目したのが、YAML
(「やむる」と呼べばいいのか... サイトには camel と韻を踏んでいると書いてあるけど。)

これは YAML Ain't Markup Language の略で、いわゆるマークアップ言語ではないと宣言しています。
XMLなどの立派なマークアップでは処理も記述も大変だという問題意識から、構造化データをいかにコンパクトに柔軟に、かつ人間にも読みやすい、書やすい記述ができるかを目指して仕様化が進んでいるフォーマットです。

YAMLは、

・値の名前と値を : (コロン)で区切って関連付ける
・一行が一対の値定義
・階層関係は空白文字によるインデントで行う

というのが基本コンセプトです。
改行が含まれる値の扱いなども、特別な書き方が用意されています。

イメージとしては次のとおりです。

contact:
  zipcode: 186-1234
  addr: 東京都江東区
  tel: 03-1234-5678
  - mail: primary@example.com
  - mail: secondary@example.com
blog: http://www.tyzoh.jp/

ハイフンで始まっているのはシーケンスをあらわします。
これを YAML パーサーにかけると、多くの処理系では連想配列として取得できます。

たとえば、PHPのYAMLパーサーである Spyc を使うと以下のように
連想配列が返されます。

require('spyc.php');

$yaml = << contact:
zipcode: 186-1234
addr: 東京都江東区
tel: 03-1234-5678
- mail: primary@example.com
- mail: secondary@example.com
blog: http://www.tyzoh.jp/
EOD;
$array = Spyc::YAMLLoad($yaml);

XOOPSのレンダリングエンジンはSmartyなので、
連想配列になってしまえば画面表示はお手の物。

$xoopsTpl->assign('user_attr', $array);

とすれば、テンプレート内では {$user_attr.contact.zipcode} などと参照することができます。


これであとは、データの投入だけだと思っていた矢先、
データベースのカラムが tinytext ということが発覚。255バイト。
仕組みはできても絶対容量が足りまへん...

討ち取られました。今日はおしまいです。

カテゴリ:サーバ管理

タグ:

ワタナベ (2006-02-28 23:17) | コメント(0)| トラックバック(0)

トラックバック(0)

トラックバックURL:

コメント

コメントを投稿

名前

電子メール

URL

ログイン情報を記憶

コメント (スタイル用のHTMLタグを使うことができます)

プロフィール

ワタナベ

サーバ管理が趣味の渡邉充隆です。

仮想化やネットワーク構成に興味があります。
あとは、ウェブ系の技術(プログラミングからインフラまで)も好きで、特にデータの見せ方などを工夫することで情報の流通や再活用を促進する技術を研究しています。

dev.tyzoh.jp では ssdb の(コアではなく)周辺のコードをいじっています。

tumblr / del.icio.us

RSSフィード

コミュニティの人々 | ソフトウェア | 技術紹介 | 適用分野 | Tyzohとは | ご意見お問い合わせ

Copyright (C) 2004-2008 Nihon Unisys, Ltd. All Rights Reserved.
Powered by Movable Type Open Source