ログイン
ユーザ名

パスワード



パスワード紛失

新規登録
参照元情報
参照なし

このフォーラムではゲスト投稿が禁止されています

このフォーラムに新しいトピックを立てることはできません

Action
list-tree ツリー構造順で表示 sort-down 投稿の新しいものから previous 前のトピック next 次のトピック

なし eguideのフォームの追加項目について

こんにちは。いつも便利に利用させて頂いてます。
ありがとうございます。

フォームの追加項目について質問させて下さい。

①登録ユーザの場合などは名前や住所などを既定値として表示しておけませんか?
折角ユーザ登録してあるのに、同じことを入力させてしまうのは不便と感じました。
②登録ユーザとゲストでフォームを分けることはできませんか?


もし既に可能でしたらお許しいただき、方法を説明していただければ助かります。何卒よろしくお願いいたします。

なし Re: eguideのフォームの追加項目について

(1) で「名前」なら設定するようになってはいるのですが、これはちょっと無理やりな方法です。(XOOPS のプロファイルで「本名」が設定されていた場合)

お問合せ窓口の変数指定機能を持ってくれば汎用的にできるかな。

(2) はテンプレートを工夫すればできますね。

なし Re: Re: eguideのフォームの追加項目について

回答ありがとうございます。

(1)名前の項目を[]で括っていると設定されないようです。
>お問合せ窓口の変数指定機能を持ってくれば汎用的にできるかな。
ぜひ実装して欲しい機能ですね。可能であれば今後検討をお願いしたいと思います。

(2)そうですね。でも複雑(実力的に難しい)になりそうですので(1)が実現できれば有難いです。

なし Re: eguideのフォームの追加項目について

それでは、次のような変更を次のリリースに入れます。
--- 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}
--
安冨 伸浩 (マイサイト管理人)

なし Re: eguideのフォームの追加項目について

ありがとうございます。

上記の場合、ログイン時以外は項目に{X_NAME}や{X_USER_FROM}がそのまま表示されてしまうようですが、登録ユーザ以外の場合はスペースや既定値にすることは可能ですか?

よろしくお願いします。

なし Re: eguideのフォームの追加項目について

ゲストのケースを忘れてました。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/>";
こんなところかな。
--
安冨 伸浩 (マイサイト管理人)

なし Re: Re: eguideのフォームの追加項目について

上手く表示できましたが、これを"ラベル,const,{X_NAME}"でした場合には表示は出来ていますが入力値としては扱わていないようです。

参加者一覧で見るとやはり{X_NAME}で表示されてしまいます。

度々のご質問で恐縮ですが、よろしくお願いします。

なし Re: eguideのフォームの追加項目について

うーむ、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':

分量が増えた...
--
安冨 伸浩 (マイサイト管理人)

list-tree ツリー構造順で表示 sort-down 投稿の新しいものから previous 前のトピック next 次のトピック



条件検索へ
© 2008 MySite Web Service