まずEC-CUBEで作成、利用されているデータベースの詳細一覧は
次のサイトからエクセルファイルでダウンロードできます。

EC-CUBEマニュアルサイト

画面左にあるカスタマイズのデータベース構成という項目ですね。
ここからファイルをダウンロードできるページへいけます。


今回はこの各テーブルに登録されているデータをphpファイルから
どのように取得して、PHPファイル内で利用できるのか?って話ですね。


SQLの文法も絡んでくるのですが、そこの説明は省略しますね。


簡単なデータ取得方法

dtb_baseinfoというテーブルの全項目のデータを取得したいとします。

これは特定商取引法に基づく表記で必要な情報が格納されている
テーブルですね。管理画面から情報を登録できます。

具体的には以下のようなデータが格納されています。

law_company:販売業者
law_manager:運営責任者
law_zip01:郵便番号1
law_zip02:郵便番号2
law_email:メールアドレス

・・・etc

ちなみにデータ数は1つです。


以下はSC_Helper_DBクラスから抜粋です。

/**
* 店舗基本情報を取得する
* @return array 店舗基本情報の配列
*/

function sf_getBasisData(){
$objQuery = new SC_Query
$arrRet = $objQuery->select('*', 'dtb_baseinfo' )

if( isset($arrRe[0]) ) return $arrRet[0];

return array();
}

恐らくこれが条件であるwhere文がない一番シンプルな取得方法ではないかと思います。
※ SQLの文法の説明はここでは省略します。


arrRetにはどのような形でデータが格納されているのか??


$objQuery->select();の返り値は2次元配列です。

たとえばデータベースに登録されている販売業者の情報、law_companyには
以下のようにしてアクセスできます。

$var = $arrRet[0]['law_company'];

これでvarという変数にデータベースに登録されているlaw_companyの情報が
格納されます♪

メールアドレスを取得したい場合は同様に

$var = $arrRet[0]['law_email'];

とすればOKです♪


今回はデータが1つなので、取得したデータは$arrRet[0]に格納されています。
データが複数ある場合は$arrRet[0]~$arrRet[データ数-1]に格納されています。

店舗の情報は1つしかないので$arrRet[0]だけを参照すればよいのですが
仮に店舗が複数あって(データベースに複数登録されていて)、2つ目の店舗の
メールアドレスにアクセスしたいときは次のようになります。

$var = $arrRet[1]['law_email'];

実際は複数店舗登録無理ですがw

商品データは複数あるので、データベースから商品データを取得して
参照する際は上記の知識がベースとなりますね。


長くなってきましたが、もう少しだけ・w・

さっきは一番簡単な方法でしたが、次は一般的なデータ取得方法を。
ちなみにデータを抽出する条件の記述方法が違うだけで、帰ってくる結果の
形式は全く同じです。

例としてdtb_products_classから、1万円以上、2万円以下の商品を取り出し
商品ID、販売価格、在庫数の3つのデータだけを抽出し、価格で並び替えたいとします。

データベーステーブルでは以下のようになっています。

product_ID:商品ID、stock:在庫数、price01:価格


取り出す1例として以下のような記述が可能です。

$objQuery = new SC_Query

$col = "product_ID ";
$col .= " ,stock" ;
$col .= " ,price01";

$table = "dtb_products_class";

$where$ = "? >= price01 AND price01 >= ?"

$where_vals = array(20000,10000);

$objQuery->setOrder('price01');

$arrRet = $objQuery->select($col, $table, $where, $where_vals)

※ $arrRetのデータ形式は上記と同じく2次元配列です。

$where文の、?、は$where_valsの配列の要素に置き換えられます。
そのため?の数と配列の要素数も一致します。

つまり、上記の文は以下のSQL文と同じです。

SELECT product_ID, stock, price01 FROM dtb_product_class WHERE 20000 >= price01 AND price01 >= 10000

この記述の利点は、条件が変数で与えられても使えることです。

$where_vals[0] = $max_price;
$where_vals[1] = $min_price;

とすることもできますから♪


phpファイルからデータベースに登録されているデータを取得する基本的な方法は以上です♪


ではでは、今回はこのあたりで~(/・ω・)/

ブログトップへ
こんにちは(/・ω・)/

ページの描画はTPLファイルで行われるのですが、
特定の領域は動的データを扱い処理が複雑になること
ありますね。

そういう時は描画に必要なデータを揃える処理をphpで行い、
その処理結果を使ってTPLファイルで描画したいもんです。

というわけで、ページを描画するTPLファイル内(主にsite_main.tpl)から
phpファイルを読み込み、実行を行い、ページの一部分だけ、
描画を任せる方法のメモです。


もっと別のスマートな記述があると思うのですが、私は以下のようにやってます。

まずは確認です。

site_main.tplファイル内のLeftNaviItem.php_path変数を確認したいので
if文の中に次のコードを埋め込んで結果を確認。

<!--{$LeftNaviItem.php_path}-->

私はXserverを使ってるのですが(近々共用SSLの都合で移転するかも・・・)、次のような
結果が出力されました。

/home/xxxx/ドメイン/public_html/インストールフォルダ名/frontparts/bloc/category.php
/home/xxxx/ドメイン/public_html/インストールフォルダ名/frontparts/bloc/search_products.php
/home/xxxx/ドメイン/public_html/インストールフォルダ名/frontparts/bloc/cart.php

「xxxx」、「ドメイン」、「インストールフォルダ名」はレンタルサーバ、取得ドメイン、
EC-CUBEをインストールしたフォルダによって変わってきます。

つまり、トップページの左カラムのブロック領域を描画するのに、site_main.tplファイルから
↑の3つのファイルを呼び出して描画していることになります。


何が言いたいかというと、仮にトップページの一部分を描画させるため、
frontparts/block/yyyy.phpというファイルを作ったとします。yyyy.phpファイルから
呼び出されるzzz.tplファイルもセットで作ったとします。

このファイルを呼び出して描画するには次のようなコードをsite_main.tplに
埋め込めばOKということです。

<!--{include_php file='/home/xxxx/ドメイン/public_html/インストールフォルダ名/frontparts/bloc/yyyy.php' }-->

これでyyyy.phpが実行された後、そこからzzz.tplが実行、描画されます♪


これはページの複雑な箇所を処理するのに重宝してます:*:・( ̄∀ ̄)・:*:


ではでは、今回はこの辺りで~(/・ω・)/

ブログトップへ
こんにちは(/・ω・)/

EC-CUBEのphpやtplファイルを解読していると、変数の中身が気になることは多々ありますね。

そこで変数の出力方法のメモです。


PHPファイルの変数の出力

phpファイルの変数の出力。varという変数の中身を確認したいとき
以下のように書けば実行時に画面に出力されます♪


SC_Utils::sfPrintR( $var );


ただし、管理画面のパラメータ設定でDEBUG_MODE=trueとしておく必要があります。
店をオープンするまでずっとtrueでいいかと思います。


TPLファイルの変数出力

tphファイル内でsmartyで宣言されている変数の中身を確認したいことがありますね。
仮にsite_main.tplファイル内の

$LeftNaviItem.php_path

という変数の中身を確認したいとします。以下のようにすればOKです。


<!--{$LeftNaviItem.php_path}-->


※ smartyの$LeftNaviItem.php_pathという変数はphpファイル内では
   LeftNaviItem['php_path'](連想配列)という変数に相当します。

次にphpで定義されているパラメータ、SSL_URL、の中身を確認したいと
します。次のように記述すればOKです。

<!--{$smarty.const.SSL_URL}-->


変数の確認はソースファイル解読の大きな手助けになるので重宝しますね♪


今回はこの辺りで~(/・ω・)/

ブログトップへ