|
このフォーラムに新しいトピックを立てることはできません
こんにちは。いつも便利に利用させて頂いてます。 ありがとうございます。
フォームの追加項目について質問させて下さい。
①登録ユーザの場合などは名前や住所などを既定値として表示しておけませんか? 折角ユーザ登録してあるのに、同じことを入力させてしまうのは不便と感じました。 ②登録ユーザとゲストでフォームを分けることはできませんか?
もし既に可能でしたらお許しいただき、方法を説明していただければ助かります。何卒よろしくお願いいたします。
(1) で「名前」なら設定するようになってはいるのですが、これはちょっと無理やりな方法です。(XOOPS のプロファイルで「本名」が設定されていた場合)
お問合せ窓口の変数指定機能を持ってくれば汎用的にできるかな。
(2) はテンプレートを工夫すればできますね。
回答ありがとうございます。
(1)名前の項目を[]で括っていると設定されないようです。 >お問合せ窓口の変数指定機能を持ってくれば汎用的にできるかな。 ぜひ実装して欲しい機能ですね。可能であれば今後検討をお願いしたいと思います。
(2)そうですね。でも複雑(実力的に難しい)になりそうですので(1)が実現できれば有難いです。
それでは、次のような変更を次のリリースに入れます。 --- eguide/functions.php.~1.33.~ 2009-12-24 23:21:37.000000000 +0900
+++ eguide/functions.php 2010-01-10 12:14:32.365365440 +0900
@@ -244,9 +244,16 @@
}
}
}
- if (empty($v) && !isset($_POST[$fname]) &&
- $xoopsUser && preg_match(_MD_NAME, $name)) {
- $v = htmlspecialchars($xoopsUser->getVar('name'));
+ if (!isset($_POST[$fname]) && $xoopsUser) {
+ if (empty($v) && preg_match(_MD_NAME, $name)) { // compat old version
+ $v = $xoopsUser->getVar('name');
+ } elseif (preg_match_all("/{X_([A-Z_]+)}/", $v, $d)) {
+ foreach ($d[1] as $vname) {
+ $rep = $xoopsUser->getVar(strtolower($vname));
+ if (!is_null($rep)) $v = str_replace("{X_$vname}", $rep, $v);
+ }
+ }
+ $v = htmlspecialchars($v);
}
if ($type == "text") {
$opts .= "<input size='$size' name='$fname' value=\"$v\" $prop/>";
次のような定義で、初期値としてユーザ情報が設定されるようになります。 名前*,size=20,{X_NAME}
住所,{X_USER_FROM}
ありがとうございます。
上記の場合、ログイン時以外は項目に{X_NAME}や{X_USER_FROM}がそのまま表示されてしまうようですが、登録ユーザ以外の場合はスペースや既定値にすることは可能ですか?
よろしくお願いします。
ゲストのケースを忘れてました。orz --- functions.php.~1.33.~ 2009-12-24 23:21:37.000000000 +0900
+++ functions.php 2010-01-10 15:58:40.280921880 +0900
@@ -244,9 +244,16 @@
}
}
}
- if (empty($v) && !isset($_POST[$fname]) &&
- $xoopsUser && preg_match(_MD_NAME, $name)) {
- $v = htmlspecialchars($xoopsUser->getVar('name'));
+ if (!isset($_POST[$fname])) {
+ if (empty($v) && $xoopsUser && preg_match(_MD_NAME, $name)) { // compat old version
+ $v = $xoopsUser->getVar('name');
+ } elseif (preg_match_all("/{X_([A-Z_]+)}/", $v, $d)) {
+ foreach ($d[1] as $vname) {
+ $rep = $xoopsUser?$xoopsUser->getVar(strtolower($vname)):'';
+ $v = str_replace("{X_$vname}", $rep, $v);
+ }
+ }
+ $v = htmlspecialchars($v);
}
if ($type == "text") {
$opts .= "<input size='$size' name='$fname' value=\"$v\" $prop/>";
こんなところかな。
上手く表示できましたが、これを"ラベル,const,{X_NAME}"でした場合には表示は出来ていますが入力値としては扱わていないようです。
参加者一覧で見るとやはり{X_NAME}で表示されてしまいます。
度々のご質問で恐縮ですが、よろしくお願いします。
うーむ、const/hidden は、クライアント側で細工できない作りにしてたので別に手を加えないといけなかった。 --- eguide/functions.php.~1.33.~ 2009-12-24 23:21:37.000000000 +0900
+++ eguide/functions.php 2010-01-10 17:26:24.745461717 +0900
@@ -103,6 +103,18 @@
return $data;
}
+function apply_user_vars($text) {
+ global $xoopsUser;
+ if (preg_match_all("/{X_([A-Z_]+)}/", $text, $d)) {
+ $u = is_object($xoopsUser);
+ foreach ($d[1] as $vname) {
+ $rep = $u?$xoopsUser->getVar(strtolower($vname)):'';
+ $text = str_replace("{X_$vname}", $rep, $text);
+ }
+ }
+ return $text;
+}
+
function eventform($data) {
global $xoopsUser, $xoopsModuleConfig;
$myts =& MyTextSanitizer::getInstance();
@@ -244,9 +256,11 @@
}
}
}
- if (empty($v) && !isset($_POST[$fname]) &&
- $xoopsUser && preg_match(_MD_NAME, $name)) {
- $v = htmlspecialchars($xoopsUser->getVar('name'));
+ if (!isset($_POST[$fname])) {
+ if (empty($v) && $xoopsUser && preg_match(_MD_NAME, $name)) { // compat old version
+ $v = $xoopsUser->getVar('name');
+ } else $v = apply_user_vars($v);
+ $v = htmlspecialchars($v);
}
if ($type == "text") {
$opts .= "<input size='$size' name='$fname' value=\"$v\" $prop/>";
--- eguide/reserv_func.php.~1.6.~ 2009-06-01 10:34:46.000000000 +0900
+++ eguide/reserv_func.php 2010-01-10 17:30:11.541074300 +0900
@@ -21,7 +21,7 @@
case 'hidden':
case 'const':
if (!$hidden) { // pseudo POST variable
- $_POST[$iname] = $result[$fname] = join(',', $a);
+ $_POST[$iname] = $result[$fname] = apply_user_vars(join(',', $a));
}
case "checkbox":
case 'textarea':
分量が増えた...
大変ありがとうございました。
-
eguideのフォームの追加項目に...
toshikun, 2010/1/9 15:54
-
Re:...
nobu, 2010/1/9 17:22
-
Re: Re:...
toshikun, 2010/1/9 18:31
-
Re:...
nobu, 2010/1/10 13:06
-
Re:...
toshikun, 2010/1/10 15:09
-
Re:...
nobu, 2010/1/10 16:03
-
Re: Re:...
toshikun, 2010/1/10 16:32
-
Re:...
nobu, 2010/1/10 17:35
-
Re:...
toshikun, 2010/1/10 18:23
|