バージョン選択

フォーラム

メニュー

オンライン状況

51 人のユーザが現在オンラインです。 (38 人のユーザが フォーラム を参照しています。)
登録ユーザ: 2
ゲスト: 49
red ok9vin もっと...

サイト内検索

質問 > フロント機能 > 変数宣言と画面遷移

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
gabriel
投稿日時: 2011/10/19 22:39
対応状況: −−−
常連
登録日: 2011/8/18
居住地:
投稿: 35
変数宣言と画面遷移
お世話になります。

最近ECCUBEを始めたJava技術者です。(Ver 2.11)
localhostで稼働させています。
Javaとは違った設計で、戸惑っております。
非常に初歩的な質問になりますが、ご教授お願い致します。

まず、ECCUBEでは変数の宣言がどこで行われているのかが
わかりません。通常のファイルの中で
<!--{ $test = "aaa"}-->
と入力しても、対応されません。
どこか一つのファイルで管理しているのか、それとも
その関連のファイルに(CartファイルならCartファイル関連に)
別途宣言されているのでしょうか?
詳しく教えて頂ければと思います。宜しくお願い致します。


次に画面遷移についてです。
こちらも初歩的とは思いますがお願い致します。

かごの中の画面に「更新」というボタンをつくり、其の画面を更新させたいと
思っています。
オプションとして、かごの中の画面に、セレクトボックスをつくり、そのセレクトボックスの
内容で、金額を変更させたいと思っています。
しかし、そもそも
<form action="">
となっており、そのかごの中の画面からどこに遷移しているか分りません。
php→tpl→php→tplという風に表に出る画面と、裏で操作する画面が
交互に遷移していると思うのですが、どうなっているのでしょうか?

もしご教授頂けるのであれば、Javaと置き換えて説明して頂ければ
幸いです。(置き換えなくても答えて貰えるだけで幸いです)

以上、非常に申し訳ありませんが,宜しくお願い致します。


[EC-CUBE] 2.11.1(新規インストール)
[レンタルサーバ] localhost
[OS] Windows
[PHP] 5.11.6
[データベース] MySQL 5.1.34
[WEBサーバ] Apache
[ブラウザ] Firefox6.0.2
ゲスト
投稿日時: 2011/10/20 10:40
対応状況: −−−
Re: 変数宣言と画面遷移
引用:
まず、ECCUBEでは変数の宣言がどこで行われているのかが
わかりません。

変数宣言は、行いません。
右辺の型により左辺の方が動的に決まって行きます。

引用:
通常のファイルの中で
<!--{ $test = "aaa"}-->
と入力しても、対応されません。

詳しくは、Smartyのリファレンスを参照して頂くとして、
上記は、左辺への右辺の代入にはなりません。
Smartyでの代入にはassignを使用します。
が、ここでの疑問は、phpの変数への代入と思いますので、
php側で $this->test = "aaa"; とすることで、
tplで<!--{ $test }-->と記述すると
aaaが表示されます。

引用:
どこか一つのファイルで管理しているのか、それとも
その関連のファイルに(CartファイルならCartファイル関連に)
別途宣言されているのでしょうか?
詳しく教えて頂ければと思います。宜しくお願い致します。


買い物でいうと、以下の様に遷移します。
1.html/cart/index.php
2.data/class_extends/page_extends/cart/LC_Page_Cart_Ex.php
3.data/class/pages/cart/LC_Page_Cart.php
4.data/Smarty/templates/default/cart/index.tpl
画面
→「1.」他。。。

LC_Page_Cart.php
の$this->modeのswitch分岐をみると、
機能追加の方法が分かると思います。

引用:
<form action="">

は<form action="?">と思うのですが、
?はそのページ自身と言うことで、
html/cart/index.php
になります。
gabriel
投稿日時: 2011/10/20 18:30
対応状況: −−−
常連
登録日: 2011/8/18
居住地:
投稿: 35
Re: 変数宣言と画面遷移
素早い対応ありがとうございます。


$this->test = "aaa";
なのですが、どのphpファイルに入力するべきなのでしょうか?

そして<form action="?">でのページ自身というところが
少し理解できません。

その構文で自分自身に再度アクセスして、何らかのもらってきた
値で次の購入確認画面にいくのでしょうか?

そもそもそれぞれのファイルが何の動作をしているのかを
理解する必要があると思いました。

1.html/cart/index.php
2.data/class_extends/page_extends/cart/LC_Page_Cart_Ex.php
3.data/class/pages/cart/LC_Page_Cart.php
4.data/Smarty/templates/default/cart/index.tpl

この四つのファイルはそれぞれどのような役割をしているのでしょうか?

やりたいことといえば、カゴの中の画面で、セレクトボックスをつけて更新ボタンを設置し、そのセレクトボックスの中の内容によって料金の値段を上限させたいと思っています。
なので、更新ボタンを押したら、そのセレクトボックスの内容を読み込んで、再度カゴの中の画面に戻りたいと思っています。(そこで何かしらの値を与えてif文で料金を変更したいと思っています。)

何度も申し訳ありませんが、宜しくお願いします。
ゲスト
投稿日時: 2011/10/20 20:53
対応状況: −−−
Re: 変数宣言と画面遷移
引用:
$this->test = "aaa"; 
なのですが、どのphpファイルに入力するべきなのでしょうか?

取り敢えず、
3.data/class/pages/cart/LC_Page_Cart.php
で、良いです。

引用:
そして<form action="?">でのページ自身というところが
少し理解できません。

例えば、商品数を、増減させると、
1.html/cart/index.php
へ飛んで、LC_Page_Cart.phpの$this->modeのswitch分岐で
商品数が操作され、表示が更新されます。
よって↓が成立しています。
引用:
その構文で自分自身に再度アクセスして、何らかのもらってきた
値で次の購入確認画面にいくのでしょうか?


引用:
この四つのファイルはそれぞれどのような役割をしているのでしょうか?

1.html/cart/index.php
httpdのDocumentRoot配下のhttpアクセスを許可されている部分。

2.data/class_extends/page_extends/cart/LC_Page_Cart_Ex.php
classの拡張。
小生は主にclassのオーバーライドに使用しています。
使用例を署名内のurlで公開してますので、
参考にしてみてください。

3.data/class/pages/cart/LC_Page_Cart.php
classそのものです。

4.data/Smarty/templates/default/cart/index.tpl
Smartyを利用した動的html生成用テンプレートです。

引用:
やりたいことといえば、カゴの中の画面で、セレクトボックスをつけて更新ボタンを設置し、そのセレクトボックスの中の内容によって料金の値段を上限させたいと思っています。
なので、更新ボタンを押したら、そのセレクトボックスの内容を読み込んで、再度カゴの中の画面に戻りたいと思っています。(そこで何かしらの値を与えてif文で料金を変更したいと思っています。)

4.data/Smarty/templates/default/cart/index.tpl
内のjava scriptを呼び出している所を理解して、
ご希望の動作を記述してください。

尚、eclipse-php を利用されると、
コードの把握と、コーディングの効率が、格段に向上します。
gabriel
投稿日時: 2011/10/21 20:44
対応状況: −−−
常連
登録日: 2011/8/18
居住地:
投稿: 35
Re: 変数宣言と画面遷移
>Ringoさん

非常にお世話になっております。
少しずつですが、ECCUBEが理解できてきました。

なんとか画面繊維の内容については理解できました。
いろいろ複雑で倒れてしまいそうです。。。

そこで再度お聞きしたいのですが、画面遷移の
順序は理解できたのですが、値の受け渡しは
どうしたらいいのでしょうか?

もしPHPファイルの中で$test="10";($this->test = "10";)
という記述をして
それをtplで使用する際には{!--{$test}--}とすれば、
10が出力されるのですよね?

それでは、その値にtplで再度値をプラスしたり、マイナスしたり
上書きするためにはどうしたらいいのでしょう?

そして、tplファイルでselecBoxを作っているのですが、それを
phpファイルの中の何かしらの変数に受け取らせるにはどうしたら
いいでしょうか?それかsessionに突っ込んで使用するにはどういう
方法がありますでしょうか?
平たく書きますと、tpl→php→tplという様に値をやりとりしたいと思っているのです。Javaでいえば、session.getAttributeの様にやりとりできるのですが、PHPではやり方がわかりません。。。


そして初歩的すぎるとは思いますが、、
$objCartSess->delProduct($cart_no, $cartKey);
このような変数はどこで最初に宣言されているのでしょうか?


もう少しで光が見えそうです。
何度も申し訳ありませんが、ご教授をどうかお願い致します。



ゲスト
投稿日時: 2011/10/21 22:49
対応状況: −−−
Re: 変数宣言と画面遷移
引用:
もしPHPファイルの中で$test="10";($this->test = "10";
という記述をして
それをtplで使用する際には{!--{$test}--}とすれば、
10が出力されるのですよね?

php内での「$this->変数名」(「$this->」付き)が、
Smartyで参照出来る事に留意してください。
$testではphp内のローカル変数となります。

引用:
それでは、その値にtplで再度値をプラスしたり、マイナスしたり
上書きするためにはどうしたらいいのでしょう?

先にも示しています様に、処理「プラス、マイナス」はphp側で行います。
tpl側は
1.デフォルト値を表示する。
2.formで
 1)処理モード
 2)「値」
 をphp側へ送り込む。
ことを行います。
(Smarty内でphpのインストラクションを記述できますが、eccubeでは非推奨です。)

引用:
そして、tplファイルでselecBoxを作っているのですが、それを
phpファイルの中の何かしらの変数に受け取らせるにはどうしたら
いいでしょうか?それかsessionに突っ込んで使用するにはどういう
方法がありますでしょうか?
平たく書きますと、tpl→php→tplという様に値をやりとりしたいと思っているのです。
Javaでいえば、session.getAttributeの様にやりとりできるのですが、PHPではやり方がわかりません。。。

概念的には
1.<select>タグで必要な選択肢を<option value="...>しておき
2.<a href="?" onclick="fnFormModeSubmit('form<!--{$key}-->','up','cart_no','<!--{$item.cart_no}-->'); return false"><img src="<!--{$TPL_URLPATH}-->img/button/btn_plus.jpg" width="16" height="16" alt="+" /></a>
を流用して送り込みを記述し
3.php側で
 1)$objFormParam = $this->lfInitParam($_REQUEST);
  で受け取り( 「function lfInitParam($arrRequest) {」に新name値の追加は必要)
 2)switch($this->mode) {
  部分で処理分岐し、selectboxの値に対応した値を「例:$this->arrData["hogehoge"]」に代入し
4.tpl側で「$arrData["hogehoge"]」を表示する
となります。

fnFormModeSubmit()は「html/js/site.js」内で定義されています。

ここの部分は、時間が取れたら、サンプルコードで動作確認をした後、提示させて頂きたく、、、お時間ください。
   
引用:
そして初歩的すぎるとは思いますが、、
$objCartSess->delProduct($cart_no, $cartKey);
このような変数はどこで最初に宣言されているのでしょうか?


2.11.1とのことですので、data/class/pages/cart/LC_Page_Cart.phpの77行目の
    function action() {
        $objCartSess = new SC_CartSession_Ex();

になります。
ゲスト
投稿日時: 2011/10/24 11:18
対応状況: −−−
Re: 変数宣言と画面遷移
サンプルコードです。

1.data/class/pages/cart/LC_Page_Cart.php

&#160; &#160; function init() {
&#160; &#160; &#160; &#160; parent::init();
&#160; &#160; &#160; &#160; $this->tpl_title = "現在のカゴの中";
&#160; &#160; &#160; &#160; $masterData = new SC_DB_MasterData_Ex();
&#160; &#160; &#160; &#160; $this->arrProductType = $masterData->getMasterData("mtb_product_type");
&#160; &#160; &#160; &#160;&#160;
&#160; &#160; &#160; &#160; // & hideki-s
&#160; &#160; &#160; &#160; $this->arrCourse[1] = "松";
&#160; &#160; &#160; &#160; $this->arrCourse[2] = "竹";
&#160; &#160; &#160; &#160; $this->arrCourse[3] = "梅";
&#160; &#160; &#160; &#160; // hideki-s &
&#160; &#160; &#160; &#160;&#160;
&#160; &#160; }


&#160; &#160; function action() {

&#160; &#160; ...

&#160; &#160; &#160; &#160; case 'delete'://カートから削除
&#160; &#160; &#160; &#160; &#160; &#160; $objCartSess->delProduct($cart_no, $cartKey);
&#160; &#160; &#160; &#160; &#160; &#160; SC_Response_Ex::reload(array('category_id' => $objFormParam->getValue('category_id')), true);
&#160; &#160; &#160; &#160; &#160; &#160; exit;
&#160; &#160; &#160; &#160; &#160; &#160; break;
&#160; &#160; &#160; &#160; &#160; &#160;&#160;
&#160; &#160; &#160; &#160; // & hideki-s
&#160; &#160; &#160; &#160; case 'course_select'://コースの選択
&#160; &#160; &#160; &#160; &#160; &#160; if ($objFormParam->getValue('course') == 1) {
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; $this->price_limit = "1,000,0000円";
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; $this->arrForm['course'] = 1;
&#160; &#160; &#160; &#160; &#160; &#160; }elseif ($objFormParam->getValue('course') == 2) {
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; $this->price_limit = "100,0000円";
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; $this->arrForm['course'] = 2;
&#160; &#160; &#160; &#160; &#160; &#160; }elseif ($objFormParam->getValue('course') == 3) {
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; $this->price_limit = "10,0000円";
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; $this->arrForm['course'] = 3;
&#160; &#160; &#160; &#160; &#160; &#160; }else{
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; $this->price_limit = "未設定";
&#160; &#160; &#160; &#160; &#160; &#160; }
&#160; &#160; &#160; &#160; &#160; &#160; break;
&#160; &#160; &#160; &#160; // hideki-s &

&#160; &#160; &#160; &#160; default:
&#160; &#160; &#160; &#160; &#160; &#160; break;
&#160; &#160; &#160; &#160; }

&#160; &#160; ....
&#160; &#160;&#160;
&#160; &#160; }

 &#160; function lfInitParam($arrRequest) {
&#160; &#160; &#160; &#160; $objFormParam = new SC_FormParam_Ex();
&#160; &#160; &#160; &#160; $objFormParam->addParam("カートキー", 'cartKey', INT_LEN, 'n', array('NUM_CHECK',"MAX_LENGTH_CHECK"));
&#160; &#160; &#160; &#160; $objFormParam->addParam("カートナンバー", "cart_no", INT_LEN, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK"));
&#160; &#160; &#160; &#160; // PC版での値引き継ぎ用
&#160; &#160; &#160; &#160; $objFormParam->addParam("カテゴリID", "category_id", INT_LEN, 'n', array("NUM_CHECK", "MAX_LENGTH_CHECK"));
&#160; &#160; &#160; &#160;&#160;
&#160; &#160; &#160; &#160; // hideki-s&#160;
&#160; &#160; &#160; &#160; $objFormParam->addParam("コース", "course", INT_LEN, 'n', array("EXIST_CHECK", "MAX_LENGTH_CHECK"));
&#160; &#160; &#160; &#160;&#160;
&#160; &#160; &#160; &#160; // 値の取得
&#160; &#160; &#160; &#160; $objFormParam->setParam($arrRequest);
&#160; &#160; &#160; &#160; // 入力値の変換
&#160; &#160; &#160; &#160; $objFormParam->convParam();
&#160; &#160; &#160; &#160; return $objFormParam;
&#160; &#160; }

2.data/Smarty/templates/default/cart/index.tpl

&#160; &#160; ....

&#160; &#160; &#160; &#160; &#160; &#160; <!--{* & hideki-s *}-->
&#160; &#160; &#160; &#160; &#160; &#160; <select name="course" style="<!--{$arrErr.course|sfGetErrorColor}-->">
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <option value="" selected="selected">選択してください</option>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <!--{html_options options=$arrCourse selected=$arrForm.course}-->
&#160; &#160; &#160; &#160; &#160; &#160; </select>
&#160; &#160; &#160; &#160; &#160; &#160; <a href="?" onclick="fnFormModeSubmit('form<!--{$key}-->','course_select','cart_no','<!--{$item.cart_no}-->'); return false">更新</a>
&#160; &#160; &#160; &#160; &#160; &#160; 料金の上限は <!--{$price_limit|h}--> です。
&#160; &#160; &#160; &#160; &#160; &#160; <!--{* hideki-s & *}-->

&#160; &#160; &#160; &#160; &#160; &#160; <table summary="商品情報">
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <colgroup width="10%"></colgroup>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <colgroup width="15%"></colgroup>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <colgroup width="30%"></colgroup>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <colgroup width="15%"></colgroup>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <colgroup width="15%"></colgroup>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <colgroup width="15%"></colgroup>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <tr>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <th class="alignC">削除</th>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <th class="alignC">商品写真</th>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <th class="alignC">商品名</th>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <th class="alignC">単価</th>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <th class="alignC">数量</th>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <th class="alignC">小計</th>
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; </tr>


&#160; &#160; ....
gabriel
投稿日時: 2011/10/24 14:30
対応状況: −−−
常連
登録日: 2011/8/18
居住地:
投稿: 35
Re: 変数宣言と画面遷移
>Ringo様

お世話になっております。
毎回サポートしていただきありがとうございます。
少しずつ前に進めており非常に感謝しています。

今回のコードについて、難しい内容ながらも
いろいろと流用出来てとてもありがたいです。

しかし、私の言葉が不適切で要らぬ手間をかけさせて
しまっております。

私が申し上げたかったのは、カートの中の商品ひとつひとつに
セレクトボックスを設置し、その内容で、現在の単価+αと
いう値段を設定したいという内容でした。

確かに上限と書いてしまっており、私の不徳の次第でございます。

もしよろしければ、再度サポートをお願いできませんでしょうか?
ゲスト
投稿日時: 2011/10/24 19:24
対応状況: −−−
Re: 変数宣言と画面遷移
引用:
[私が申し上げたかったのは、カートの中の商品ひとつひとつに
セレクトボックスを設置し、その内容で、現在の単価+αと
いう値段を設定したいという内容でした。

ということで、
引用:
$objCartSess->delProduct($cart_no, $cartKey);
このような変数はどこで最初に宣言されているのでしょうか?

だったのでしょうか?

data/class/SC_CartSession.php

に、各種 function が定義されています。

それで、目的の処理は
1.tpl側にて先の様にselectboxを設け
2.php側にて
        case 'up'://1個追加
            $objCartSess->upQuantity($cart_no, $cartKey);
            SC_Response_Ex::reload(array('category_id' => $objFormParam->getValue('category_id')), true);
            exit;
            break;

を流用して、SC_CartSession.phpに新設する「例:$objCartSess->addPrice(...)」を実行させ、
3.「2度目」の「data/class/pages/cart/LC_Page_Cart.php 」(SC_Response_Ex::reload(...))にて「// カート集計処理」以下を行わせる。

になるかと思います。

ところで「規格」機能を使用せず「かごの中」での本処理を希望されるのには、なにがしかの思惑が有るとの理解でよろしいでしょうか?
gabriel
投稿日時: 2011/10/25 8:45
対応状況: −−−
常連
登録日: 2011/8/18
居住地:
投稿: 35
Re: 変数宣言と画面遷移
>Ringo様
お世話になります。迅速な対応に感謝しております。

>ところで「規格」機能を使用せず「かごの中」での本処理を希望されるのには、なにがしかの思惑が有るとの理解でよろしいでしょうか?

実は、作成中のものは、トレーディングカード販売のECサイトでして、基本的に料金は一律400円、そして購入される枚数が11枚を超えると一律200円の料金に変更するというものです。(10枚で通常4000円なのですが、11枚になると2200円になる様なシステムです)そして、ラミネートしたものや、ケース付きというオプションをつけることにより、値段を+100円などに変更するという使用になります。
以前運営していたサイトでは、規格という形で運営していたのですが(他の方に作成していただいたサイト)その際に、お客様からいちいち商品を購入するごとに選ぶのが面倒なので、購入するときにいっぺんに変更できるようにしてほしいという要望が非常に多く、それが面倒でこのサイトでは買わないとおっしゃる方もいらっしゃったので、今回はこのような仕様にしようと考えました。

引用:

「例:$objCartSess->addPrice(...)」を実行させ、
3.「2度目」の「data/class/pages/cart/LC_Page_Cart.php 」(SC_Response_Ex::reload(...))にて「// カート集計処理」以下を行わせる。

申し訳ないのですが、こちらの部分をもう少し詳しく書いていただけませんか?
あと、商品単価がtplの方では、「$item.productsClass.price02」という記載になっているのですが、これはphp側ではなんという名前になっているのでしょうか?

度々ご迷惑をおかけしますが、宜しくお願いいたします。
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,943名です
総投稿数は110,017件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.