MODX1.0.12JでeFormが動作しない件について

質問全般・改善要望
返信する
jalan2
メンバー
メンバー
記事: 18
登録日時: 2013年11月25日(月) 22:38

MODX1.0.12JでeFormが動作しない件について

投稿記事 by jalan2 »

いつからのバージョンか分かりませんが、以前のeFormでは、 &formidにつては、

コード: 全て選択

【必須】name属性が「formid」のinput要素を作って値を合わせます」
というコメントがありました。私もそれにならい、同一ページに複数フォーム設置しない場合でも、&formidは必ず指定するようにしていました。

MODX1.0.12Jにアップグレードしたサイトで、eFormの動作確認をしたところ、うまく動作しませんでした。
submitしても反応なしです(eformのサンプルコードからも、同属性部分の記述は削除されています)。

リソースから同属性を削除し、チャンクのフォーム本体(以下を削除)を修正することで動作するようにはなりました。

コード: 全て選択

<input name="formid" type="hidden" value="【formidの値】" />
他には、こちらは最新バージョンでの別件でテストした際のことですが(状況により問題発生が起こるか起こらないかは不明です)、ルート直下にないお問い合わせフォームで、&gotoid指定の場合、base_url 以下の階層部分のパスが重複して、404 Not Found になったので、&thankyouにして試してみると回避できたという事象も確認しています。

調査不足で、自明のことかも知れませんが、当件に関する情報はウェブ検索で見当たりませんでしたので、取り急ぎ、ウェブ制作をなりわいにしている方にとっては共有すべき情報と思い、投稿させていただきました。

適切な情報をご提供いただけますと幸いです。
Ralph
メンバー
メンバー
記事: 24
登録日時: 2012年8月09日(木) 11:42

Re: MODX1.0.12JでeFormが動作しない件について

投稿記事 by Ralph »

本件について、私が運用しているサイトでも同様な問題が発生し、一応の解決をしましたので、コメント致します。

「eform.inc.php」のバグであると考えられます。
assets/snippets/eform/eform.inc.php

コード: 全て選択

	//required
	if(empty($tpl)) $tpl = get_default_tpl();
	elseif( $tmp=efLoadTemplate($tpl) ) $tpl = $tmp; else return $_lang['ef_no_doc'] . " '$tpl'";

	# check for valid form key
	if ($formid=='') $formid = 'eform';

	// try to get formid from <form> tag id
	preg_match('/<form[^>]*?id=[\'"]([^\'"]*?)[\'"]/i',$tpl,$matches);
	$formid = isset($matches[1])?$matches[1]:'';
	//check for <input type='hidden name='formid'...>
	if( !preg_match('/<input[^>]*?name=[\'"]formid[\'"]/i',$tpl) ){
		//insert hidden formid field
		$tpl = str_replace('</form>',"<input type=\"hidden\" name=\"formid\" value=\"$formid\" /></form>",$tpl);
	}
上記コードにて、スニペットオプションの「&formid」と、追加する『<input name='formid' ~>』のvalueの値の食い違いが発生する事があるとわかりました。
現状、常軌コードの部分を下記コードで置き換えれば正常動作すると考えられます。

コード: 全て選択

	//required
	if(empty($tpl)){
		$formid = "eform";
		$tpl = get_default_tpl();
	}
	elseif( $tmp=efLoadTemplate($tpl) ) $tpl = $tmp; else return $_lang['ef_no_doc'] . " '$tpl'";

	# check for valid form key
	if ($formid=='') $formid = 'eform';

	// try to get formid from <form> tag id
	preg_match('/<form[^>]*?id=[\'"]([^\'"]*?)[\'"]/i',$tpl,$matches);
	$formid = isset($matches[1])?$matches[1]:$formid;
	//check for <input type='hidden name='formid'...>
	$matches = array();
	if( !preg_match('/<input[^>]*?name=[\'"]formid[\'"]\s*value=[\'"](.*)[\'"]/i',$tpl, $matches) ){
		//insert hidden formid field
		$tpl = str_replace('</form>',"<input type=\"hidden\" name=\"formid\" value=\"$formid\" /></form>",$tpl);
	}
	else{
		$formid = $matches[1];
	}
ファイルを添付いたしますので、上書きアップロードを行なってみてください。
また、まだ十分な検証が行えておりませんので、検証が完了し次第新しいバージョンへ適用いたします。
添付ファイル
eform.inc.zip
(14.62 KiB) ダウンロード数: 1145 回
アバター
tomophy
メンバー
メンバー
記事: 58
登録日時: 2011年4月21日(木) 09:29

MODX1.0.13JでもeFormが動作しない

投稿記事 by tomophy »

MODX 1.0.13JにアップデートしたらeFormが動作しなくなりました。

上記の修正ファイルをアップロードしたら、ページそのものが表示されなくなりました。eform.inc.phpを戻して、上記の投稿を参考に、リソース、チャンクからformidに関する記述を削除してみましたが、特に何の反応もありませんでした。

問い合わせフォームに使っているので困っています。どなたか解決策をご存じありませんか?
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: MODX1.0.12JでeFormが動作しない件について

投稿記事 by yama »

後ほど確認し、問題を確認できれば修正パッチを作成します。しばらくお待ちいただけますでしょうか。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: MODX1.0.12JでeFormが動作しない件について

投稿記事 by yama »

アップデート前のバージョンは1.0.12J-r1でしょうか?
アバター
tomophy
メンバー
メンバー
記事: 58
登録日時: 2011年4月21日(木) 09:29

Re: MODX1.0.12JでeFormが動作しない件について

投稿記事 by tomophy »

アップデート前のバージョンは、1.0.10J-r3です。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: MODX1.0.12JでeFormが動作しない件について

投稿記事 by yama »

1.0.12J-r1でも問題があったかもしれませんね。少しさかのぼって修正パッチを作成します。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: MODX1.0.12JでeFormが動作しない件について

投稿記事 by yama »

eform.inc.zip
(14.74 KiB) ダウンロード数: 1152 回
添付のファイルを解凍して assets/snippets/eform/ ディレクトリに上書きすると改善されるでしょうか?
アバター
tomophy
メンバー
メンバー
記事: 58
登録日時: 2011年4月21日(木) 09:29

Re: MODX1.0.12JでeFormが動作しない件について

投稿記事 by tomophy »

改善しました。ありがとうございました。

なお、再度、MODX 1.0.10J-r3から1.0.13Jへのアップデートをやり直し、今回の不具合が起きないケースもあることがわかりました。

不具合が起きたケースでは、インストーラのパーミッションのチェックをパスしたにも関わらず、インストーラが正しく終了しませんでした。
画像

cacheディレクトリのパーミッションが書き込み可能ではないという意味のエラーメッセージが出ていますが、cacheディレクトリのパーミッションは707になっています。このようなケースでは、原因はcacheディレクトリ内のCache.idx.phpファイルにあることがわかりました。
画像

Coreserverでは、すべてのCacheファイルのパーミッションが606になっていないと上記のエラーが出るようです。インストーラが正しく終了しなかったときに、すべてのCache.idx.phpファイルのパーミッションを606に変更してから、再度インストーラを実行すると不具合が起きませんでした。

ちなみに、インストーラが正しく終了しなかったにも関わらず強引に管理画面にログインしてからCacheファイルのパーミッションを直してもダメでした。この情報がお役に立てば幸いです。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: MODX1.0.12JでeFormが動作しない件について

投稿記事 by yama »

おそらく関係ないと思いますが、Coreserverはセーフモードで運用してますか?Cache.idx.phpは606に変更する前のパーミッションはどうなっていたでしょうか?
もしそのへんに問題があるとしたら、可能であれば本体側で対応のアプローチを考えてみます。
アバター
tomophy
メンバー
メンバー
記事: 58
登録日時: 2011年4月21日(木) 09:29

Re: MODX1.0.12JでeFormが動作しない件について

投稿記事 by tomophy »

Cacheは無関係でしたか。私の勘違いでしたら、失礼しました。

phpinfo()で見る限り、CoreserverではSafeモードはONでした。

Cache.idx.phpのパーミッションは644でした。なお、インストーラ実行後に管理画面にアクセスすると所有者がApacheに変わってしまい、FTPでパーミッションの設定を変えられなくなります。試しに、Cache.idx.phpを削除してみたものの、元通りパーミッションが644、Apacheが所有者で新たに生成されるため、特に変化はありませんでした。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: MODX1.0.12JでeFormが動作しない件について

投稿記事 by yama »

了解です、次のリリースではインストーラ側で適切なパーミッション(646など)をセットするように改善します。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: MODX1.0.12JでeFormが動作しない件について

投稿記事 by yama »

返信する