ページ 1 / 1
MODX1.0.12JでeFormが動作しない件について
Posted: 2013年12月04日(水) 13:08
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にして試してみると回避できたという事象も確認しています。
調査不足で、自明のことかも知れませんが、当件に関する情報はウェブ検索で見当たりませんでしたので、取り急ぎ、ウェブ制作をなりわいにしている方にとっては共有すべき情報と思い、投稿させていただきました。
適切な情報をご提供いただけますと幸いです。
Re: MODX1.0.12JでeFormが動作しない件について
Posted: 2014年2月18日(火) 10:27
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];
}
ファイルを添付いたしますので、上書きアップロードを行なってみてください。
また、まだ十分な検証が行えておりませんので、検証が完了し次第新しいバージョンへ適用いたします。
MODX1.0.13JでもeFormが動作しない
Posted: 2014年4月28日(月) 17:58
by tomophy
MODX 1.0.13JにアップデートしたらeFormが動作しなくなりました。
上記の修正ファイルをアップロードしたら、ページそのものが表示されなくなりました。eform.inc.phpを戻して、上記の投稿を参考に、リソース、チャンクからformidに関する記述を削除してみましたが、特に何の反応もありませんでした。
問い合わせフォームに使っているので困っています。どなたか解決策をご存じありませんか?
Re: MODX1.0.12JでeFormが動作しない件について
Posted: 2014年4月29日(火) 11:21
by yama
後ほど確認し、問題を確認できれば修正パッチを作成します。しばらくお待ちいただけますでしょうか。
Re: MODX1.0.12JでeFormが動作しない件について
Posted: 2014年4月29日(火) 14:56
by yama
アップデート前のバージョンは1.0.12J-r1でしょうか?
Re: MODX1.0.12JでeFormが動作しない件について
Posted: 2014年4月30日(水) 17:25
by tomophy
アップデート前のバージョンは、1.0.10J-r3です。
Re: MODX1.0.12JでeFormが動作しない件について
Posted: 2014年4月30日(水) 17:28
by yama
1.0.12J-r1でも問題があったかもしれませんね。少しさかのぼって修正パッチを作成します。
Re: MODX1.0.12JでeFormが動作しない件について
Posted: 2014年4月30日(水) 17:32
by yama
添付のファイルを解凍して assets/snippets/eform/ ディレクトリに上書きすると改善されるでしょうか?
Re: MODX1.0.12JでeFormが動作しない件について
Posted: 2014年5月01日(木) 01:21
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ファイルのパーミッションを直してもダメでした。この情報がお役に立てば幸いです。
Re: MODX1.0.12JでeFormが動作しない件について
Posted: 2014年5月01日(木) 09:58
by yama
おそらく関係ないと思いますが、Coreserverはセーフモードで運用してますか?Cache.idx.phpは606に変更する前のパーミッションはどうなっていたでしょうか?
もしそのへんに問題があるとしたら、可能であれば本体側で対応のアプローチを考えてみます。
Re: MODX1.0.12JでeFormが動作しない件について
Posted: 2014年5月01日(木) 10:14
by tomophy
Cacheは無関係でしたか。私の勘違いでしたら、失礼しました。
phpinfo()で見る限り、CoreserverではSafeモードはONでした。
Cache.idx.phpのパーミッションは644でした。なお、インストーラ実行後に管理画面にアクセスすると所有者がApacheに変わってしまい、FTPでパーミッションの設定を変えられなくなります。試しに、Cache.idx.phpを削除してみたものの、元通りパーミッションが644、Apacheが所有者で新たに生成されるため、特に変化はありませんでした。
Re: MODX1.0.12JでeFormが動作しない件について
Posted: 2014年5月01日(木) 11:27
by yama
了解です、次のリリースではインストーラ側で適切なパーミッション(646など)をセットするように改善します。
Re: MODX1.0.12JでeFormが動作しない件について
Posted: 2014年5月07日(水) 16:19
by yama