ECCUBEのブロックでPOSTが使えない件

私はECUBEでページを作成するときに、
固定ページの作成であっても、
空のページを作ってからそこにブロックを使って作成します。
まぁどこかで使う可能性とか考えるとそっちの方がのちのち便利かなと・・・

で、ECCUBEを2.11.1にしてから(実際には2.11からかな?)
ブロックでPOSTができない問題がおきた。
データを送信しすると
「不正なページ移動です」となってしまう。

で、何が問題かというと
トランザクションIDを送信してないのが問題で、
Formタグの中に下を追加すればいいって問題だけじゃ済まなかった。

<input type=”hidden” name=”<!–{$smarty.const.TRANSACTION_ID_NAME}–>” value=”<!–{$transactionid}–>” />

実際には
トランザクションIDが取得できていないので
上の$transactionidはNULLになってしまっている。
この問題はブロックのみに起きている問題で固定ページには問題が起きない。

固定ページとブロックでは継承するクラスが違うため
固定ページの場合はデフォルトでトランザクションIDを取得しているのに対して
ブロックでは取得してない。

そのため、ブロックのロジックファイルに

$this->doValidToken();
$this->setTokenTo();

を追加すればトランザクションIDを取得するので
POSTした際に不正なページでなくなる。

「ECCUBEのブロックでPOSTが使えない件」への2件のフィードバック

  1. 初めまして!

    ユーザーページのPHPにPostしようとして躓いています。
    > ブロックのロジックファイルに
    とありますが、どのファイルでしょうか?教えてください!

  2. 初めまして
    どのブロックにPOSTするかにもよります。
    ECCUBEに最初からあるブロックで、ロジックファイルがあるのであれば、
    data/class/pages/frontparts/bloc
    の中に各ブロックに対応するプログラムが存在するのでそこに追加してください。

    もし、ブロックを新規作成した場合は
    テンプレートファイルしか存在しないためファイルを作成するしかありません。
    その場合にはファイル作成だけでなく、DBにテンプレートとロジックファイルを紐付けるために変更する作業が必要があります。
    紐付け方やファイルの作成については、他のブロックファイル(例えばログイン,カゴの中)のようなロジックが存在するブロックを参考にしてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です