スタッフブログ

  • カテゴリ TIPS小ネタ の最新配信
  • RSS

XOOPSのSmartyプラグインとjQuery

naoto : XOOPS » TIPS小ネタ 2009/2/3 19:04

Blogger's Avatar

こんにちわ。なおとです。

XOOPSでjQueryを使うとき、XOOPSのSmartyプラグインとの組み合わせで、ちょっとしたノウハウをご紹介します。

jQueryでセレクタを使うときに(もちろん)idを指定することができます。 そのとき、操作対象の要素のid属性の値に使われる文字種には、注意する必要があります。

大雑把に言うと、特にcssセレクタとして使う場合も考慮するなら、できれば英数字と-(ハイフン)だけの組み合わせを使うのが、一番無難です。

(参考:名前付けの注意点 『The Web KANZAKI ごく簡単なHTMLの説明』より)

jQueryの話に戻りますが、idに「[](大括弧)」が含まれていると、idセレクタでその要素を「掴む」ことができません。

しかし、XOOPSのSmartyプラグイン「xoops_input」を使うと、いくつかの条件が重なると、idに[]を含む文字列が入ります。 これはハマりどころで、私もこの現象に気づくまで、かなり悩みました。

その問題の条件は、name属性の値に[]を使っていて、php側では配列で値を受け取れるようにしていることと、自動でidをつける(明示的に指定しなければそうなる)ようにしている時、という条件が重なった場合です。

(参考:xoops_input『SourceForge.net: xoopscube » Legacy_Theme_Smarty;ja』より)

テンプレート
<{xoops_input type=checkbox name="checkbox[]" value="value1" default=$value}>
<{xoops_input type=checkbox name="checkbox[]" value="value2" default=$value}>
<{xoops_input type=checkbox name="checkbox[]" value="value3" default=$value}>
↓
出力
<input name="checkbox[]" id="legacy_xoopsform_checkbox[]_value1" value="value1" type="checkbox">
<input name="checkbox[]" id="legacy_xoopsform_checkbox[]_value2" value="value2" type="checkbox">
<input name="checkbox[]" id="legacy_xoopsform_checkbox[]_value3" value="value3" type="checkbox">

この場合には、明示的にidを指定することによってidの値をある程度コントロールできるので、それで解決できます。

テンプレート
<{xoops_input type=checkbox name="checkbox[]" value="value1" default=$value id="checkboxvalue1"}>
<{xoops_input type=checkbox name="checkbox[]" value="value2" default=$value id="checkboxvalue2"}>
<{xoops_input type=checkbox name="checkbox[]" value="value3" default=$value id="checkboxvalue3"}>
↓
出力
<input name="checkbox[]" id="checkboxvalue1_value1" value="value1" type="checkbox">
<input name="checkbox[]" id="checkboxvalue2_value2" value="value2" type="checkbox">
<input name="checkbox[]" id="checkboxvalue3_value3" value="value3" type="checkbox">

これでうまく要素を掴めるようになります。

トラックバック

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.