バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

 > フロント機能 > Dtb_pagelayoutのfilename内の設定を条件によって変更させたいです。

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
spgo
投稿日時: 2016/12/20 16:27
対応状況: −−−
一人前
登録日: 2011/6/30
居住地:
投稿: 73
Dtb_pagelayoutのfilename内の設定を条件によって変更させたいです。
大変お世話になっております。どうかアドバイスお願い致します。

Dtb_pagelayoutにfilenameというフィールドがありますが、ここの設定、例えば、products/detailを何らかの条件(記述)によって変更させて利用することは可能でしょうか。

具体的にはdtb_productsに新設したidというフィールドが1であれば、dtb_pagelayoutのfilenameをproducts/detail、dtb_productsのidが2であればproducts/detail2を使用するといった設定をphp、あるいはmySQLの記述で実装したいと考えておりますが、可能でしょうか。

もしそうであるならば、以上のようなケースの場合、具体的にどのような設定が最適であると考えられますでしょうか。

PHP: 5.2.9
Apache2.2.3
MySQL 5.0
468
投稿日時: 2016/12/21 12:21
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: Dtb_pagelayoutのfilename内の設定を条件によって変更させたいです。
ざっとECCUBEのソースを確認してみましたが、
dtb_pagelayoutのfilenameカラムは、ユーザーが新規追加したページ、またはユーザーが新規追加したブロックの時にしか利用されていないような気がします。
その為、ご希望の商品詳細ページでのtwig切替をする事は、データベース側では出来ないと思います。

各ページのテンプレートはコントローラー系PHPの中に、以下のように直書きされていますので、
この部分に直接判定を追加する形でカスタマイズするのが、手っ取り早いと思います。

/src/Eccube/Controller/ProductController.php 315行目付近
return $app->render('Product/detail.twig', array(
        'title' => $this->title,
        'subtitle' => $Product->getName(),
        'form' => $form->createView(),
        'Product' => $Product,
        'is_favorite' => $is_favorite,
));

商品IDを判定して、'Product/detail.twig'を書き換えればいいかと思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

spgo
投稿日時: 2016/12/21 15:50
対応状況: −−−
一人前
登録日: 2011/6/30
居住地:
投稿: 73
Re: Dtb_pagelayoutのfilename内の設定を条件によって変更させたいです。
468様、

ご教示、そして大変有用な情報を頂きまして感謝いたします。このようなファイルがあったのですね。

因みに、このProductController.phpにある該当箇所と同じ記述があるファイルは、2系ではどれにあたるかお分かりになりますでしょうか。
468
投稿日時: 2016/12/21 17:22
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: Dtb_pagelayoutのfilename内の設定を条件によって変更させたいです。
2系は、各ページクラスの中でセットしていたり、ページクラスのスーパークラスのLC_Pageのinit()内で、SC_Helper_PageLayout->sfGetPageLayout()を利用したりとバラバラとなっています。

ただ、/data/class/pages/products/LC_Page_Products_Review.php 57行目付近のように変数にテンプレート名を渡している記述がありますので、
$this->tpl_mainpage = 'products/review.tpl';

$this->tpl_mainpageに、任意のテンプレート名をセットすれば切り替えれるかもしれません。
(実際に動作を試していないので、何とも言えませんが・・・)


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

spgo
投稿日時: 2016/12/23 18:00
対応状況: −−−
一人前
登録日: 2011/6/30
居住地:
投稿: 73
Re: Dtb_pagelayoutのfilename内の設定を条件によって変更させたいです。
468様、

頂きました記述で切り替えできるようです。大変感謝いたします。

ただ、条件文設定で頓挫しております。以下の設定(lfGetReviewData商品レビューを参考)ではエラーは出ないものの、それがない状態と変わりなく、恐らく、設定自体がただ単に読まれていないためだと思われますが、どこに問題があるか、あるいは他に適した方法はありますでしょうか。

$this->arrId = $this->lfGetId($product_id);

if ($arrId ['id'] == 2) {
$this->tpl_mainpage = 'products/detail2.tpl';
}
if ($arrId ['id'] == 1) {
$this->tpl_mainpage = 'products/detail1.tpl';
}


function lfGetId ($id) {
$objQuery =& SC_Query_Ex::getSingletonInstance();
$col = 'id';
$from = 'dtb_products';
$where = 'product_id = ?';
$objQuery->setOrder('create_date DESC');
$arrWhereVal = array($id);
$arrId = $objQuery->select($col, $from, $where, $arrWhereVal);
return $arrId;
}
468
投稿日時: 2016/12/23 19:53
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: Dtb_pagelayoutのfilename内の設定を条件によって変更させたいです。
念の為の確認なのですが、このコードを記述されたのは2系ですか?

提示いただいたソースでは何点かエラーが出ると思ったのですが、
ご確認いただけますか?

$col = 'id';

dtb_productsテーブルにカラム「id」はありましたでしょうか?

もし、idカラムがあるとして、DBからの値の取得でエラーが起きなかった場合、
以下の判定で、常にfalseになっていないでしょうか?
if ($arrId ['id'] == 2) {
if ($arrId ['id'] == 1) {

$this->arrId = $this->lfGetId($product_id);
↑の結果ですが、$this->arrId[0] ['id']という形で、
 レコード数分の1次配列があると思います。
取得されるデータは常に1件だと思いますが、[0]が付くと思います。

ご確認のほど、よろしくお願いします。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

spgo
投稿日時: 2016/12/24 13:33
対応状況: −−−
一人前
登録日: 2011/6/30
居住地:
投稿: 73
Re: Dtb_pagelayoutのfilename内の設定を条件によって変更させたいです。
468様、

ご教授大変感謝いたします。

Idは今回の条件文のためにdtb_productsに新設したカラムです。
状況を説明致しますと、エラーは出ません。

また、Phpで$_GET文以外は、数字を使った条件文を利用できないような認識に至っております。(数字自体を認識しない様です。)

今ケースの場合、以下の条件文だけは認識され、例えばdetail1.tplに違うtplを挿入するとその違うtplが表示されます。(ただ、id内に数字があるか、ないかまでは認識していないようですので、意味がありません。)

if ($arrId['id'] == '') {
$this->tpl_mainpage = 'products/detail1.tpl';
}

しかしながら、以下も認識しない様です。
if ($arrId['id'] != '') {
$this->tpl_mainpage = 'products/detail2.tpl';
}

現状として、phpの条件文では数字は利用できない、!= '' も認識されないという状況ですので、何ができるか考えているところです。
468
投稿日時: 2016/12/24 15:24
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: Dtb_pagelayoutのfilename内の設定を条件によって変更させたいです。
返信ありがとうございます。
dtb_productsテーブルにidを追加されている件、理解しました。

あと、if文の判定の件ですが、
追加されたfunctionの結果を認識間違いされているように思います。

$this->lfGetId()の返り値は以下のような値になります。

array(1) { [0]=> array(1) { ["id"]=> string(1) "2" } }

判定で利用する場合は、以下のように記述する必要があると思います。
if ($arrId[0]['id'] == 1) { }
if ($arrId[0]['id'] == 2) { }

$arrId['id']は、存在しないインデックスを指定してるので
常に空と判定されていると思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

spgo
投稿日時: 2016/12/26 19:09
対応状況: −−−
一人前
登録日: 2011/6/30
居住地:
投稿: 73
Re: Dtb_pagelayoutのfilename内の設定を条件によって変更させたいです。
468様、

ご教授感謝いたします。

いろいろと試しておりましたが、以下の数字自体を認識できなようです。

if ($arrId[0]['id'] == 1) { }
if ($arrId[0]['id'] == 2) { }

以下であれば、if文が機能します。ただカラムに何かあるか、ないかだけの判別で、数字による判別はできません。

f ($arrId[0]['id'] != ’’) { }


クエリーでidを抽出する記述自体に問題があるのでしょうか。
468
投稿日時: 2016/12/27 1:01
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: Dtb_pagelayoutのfilename内の設定を条件によって変更させたいです。
$this->arrIdの中身が想定しているものと異なるのでしょうか?

if文の手前でprint_r($this->arrId)か、var_dump($this->arrId)で
$this->arrIdの中に何が入っているか確認されてみては如何でしょうか?
クエリーの結果がきちんと取得できているか確認できるかと思います。

あとif文の変数の書き方は正確には以下の通りでしょうか?

if ($this->arrId[0]['id'] == 1) { }


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,678名です
総投稿数は109,930件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2311
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1569
9
mcontact
1279
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.