Strict Standards エラーを非表示にできない EC-CUBE2.4系

configファイルで ’error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);’と書いても効果なしでした。

/data/class/SC_Initial.php
102行目付近

function setErrorReporting() {
	error_reporting(E_ALL & ~E_NOTICE);
}

ここを書き換えたら Strict Standards エラー が非表示になった。

function setErrorReporting() {
	error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
}

error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);

error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);

2018年以降のサーバーで、EC-CUBE2系を動かすには?

2016〜2018年頃、レンタルサーバーでPHPやSQLのバージョンアップにより
いろんなオープンソースが対応できなくなるケースが多発しています。

EC-CUBE2系の場合、症状は様々ですが
・サイトが表示されない
・インストールが完了できない
・その他

原因の一つとして
SET SESSION storage_engine = InnoDB の実行時に以下のエラーで実行できないケースがあります。

/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php の 末尾付近を編集します。

    function initObjQuery(SC_Query &$objQuery) {
        // $objQuery->exec('SET SESSION storage_engine = InnoDB');
	$objQuery->exec('SET SESSION default_storage_engine = InnoDB');
        $objQuery->exec("SET SESSION sql_mode = 'ANSI'");
    }

EC-CUBE3で設置URLから”/html/”をなくす

EC-CUBE3で設置URLから”/html/”をなくす以外にも、設置URLを変更する場合の方法です。

これで「html/」にアクセスするとデフォルトテンプレートでサイトが展開されているわけですが、やはり気になってしまうのはURLにどうしても「html」が入ってしまうことだと思います。

ファイルの移動

./html/ 配下のファイルを全て、一つ上の階層に移動します。
※ フォルダは移動しない。

「index.php」と「.htaccess」は上書きしてOKです。

ファイルの修正

index.php
Before require __DIR__.’/../autoload.php’;
After  require __DIR__.’/autoload.php’;

index_dev.php
require_once __DIR__.’/../vendor/autoload.php’;
$config_dev_file = __DIR__.’/../app/config/eccube/config_dev.yml’;
‘profiler.cache_dir’ => __DIR__.’/../app/cache/profiler’,
この3箇所を同じように「/../」→「/」としておきます。

app/config/eccube/path.yml
root_urlpath の「html」を消す。

以上で完了です。

カテゴリの表示順を逆にする(EC-CUBE)

デフォルトでは、後から登録したカテゴリが上になってしまう。

通常、登録するときは、上から入力していくと、全てが逆順に表示され、順番の入れ替えがとても面倒になる。

対策として、SQLのソート順を逆にする。

(フロント表示、管理画面の左のカテゴリディレクトリ表示)
/data/class/helper/SC_Helper_Category.php [line:544]

// $where = "del_flg = 0 AND $pid_name = ? ORDER BY rank DESC";
   $where = "del_flg = 0 AND $pid_name = ? ORDER BY rank ASC";

(カテゴリの追加変更ツリー)
/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php
上記に習い、カテゴリのソート順を変更する
ORDER BY rank DESC ⇒ ORDER BY rank ASC

とても簡単なカスタマイズだが、少しづつ使いやすくするには、EC-CUBEのバカ機能を沢山直さなければならない。

EC-CUBEで管理画面にログインできない時

data/class/pages/admin/LC_Page_Admin_Index.php


//                 if (SC_Utils_Ex::isBlank($this->arrErr)) {
//                     $this->lfDoLogin($objFormParam->getValue('login_id'));
// 
//                     SC_Response_Ex::sendRedirect(ADMIN_HOME_URLPATH);
//                 } else {
//                     // ブルートフォースアタック対策
//                     // ログイン失敗時に遅延させる
//                     sleep(LOGIN_RETRY_INTERVAL);
// 
//                     SC_Utils_Ex::sfDispError(LOGIN_ERROR);
//                 }
           if (true) {

                $this->lfDoLogin($objFormParam->getValue('login_id'));
                SC_Response_Ex::sendRedirect(ADMIN_HOME_URLPATH);
            }else{
                SC_Utils_Ex::sfDispError(LOGIN_ERROR);
            }

CORESERVER に EC-CUBEを設置する 2.*系

1..htaccess ファイル
AddHandler application/x-httpd-phpcgi .php
———-
2..user.ini ファイルを作成し、以下の一行を記述
magic_quotes_gpc = on
———-
3..user.ini ファイルを .htaccess と同階層にアップロード

EC-CUBEをログイン状態にする

EC-CUBEをログイン状態にする(2.11系)

他のシステムでログイン中のユーザーが
連動したEC-CUBEにログイン状態を維持する場合などに利用。

data/class/CS_Customer.php
186行目付近

function isLoginSuccess($dont_check_email_mobile = false) {
// ログイン時のメールアドレスとDBのメールアドレスが一致している場合
if (isset($_SESSION['customer']['customer_id'])
	&& SC_Utils_Ex::sfIsInt($_SESSION['customer']['customer_id'])
) {
	$objQuery =& SC_Query_Ex::getSingletonInstance();
	$email = $objQuery->get('email', 'dtb_customer', 'customer_id = ?', array($_SESSION['customer']['customer_id']));
	if ($email == $_SESSION['customer']['email']) {
	// モバイルサイトの場合は携帯のメールアドレスが登録されていることもチェックする。
	// ただし $dont_check_email_mobile が true の場合はチェックしない。
	if (SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE && !$dont_check_email_mobile) {
		$email_mobile = $objQuery->get('email_mobile', 'dtb_customer', 'customer_id = ?', array($_SESSION['customer']['customer_id']));
		return isset($email_mobile);
	}
	return true;
	}
}
return false;
}

上をコメントアウトして、下のように希望のコードに変える。
この処理でログイン状態にはなるが、擬似ログインとも言える。
決済に必要な情報がセッションにあるかどうかは、確認し適宜補填すること。

下の例は、他のシステムにログインしていると「$_SESSION[‘member_id’]」がNULLでない。
その場合、EC-CUBEでもログイン状態と認めるケース。

function isLoginSuccess() {
	if($_SESSION['member_id'] != ''){
		return true;
	}else{
		return false;
	}
}

EC-CUBE のカートをカスタマイズするときの悩み

「SC_CartSession.php」内で処理するのだが

var_dump($_POST)

が採れる場所と空になる場所がある

よく読めばいいことなのだが割愛して$_POSTを取得できる場所

247行目付近の

if (!$find) { の中では「$_POST」を取得できる。

そこ(247行目付近)で一旦セッションなどに保存すれば他の場所でも利用できる。

 

他の場所でPOSTを採取しようとしてもできないので、とにかくここでSESSIONに仮保存する。

EC-CUBE の制作で「status」って何?

ず〜っとひっかかっていたことがあるので、書きます。
EC-CUBE の制作で「status」って何?

「status」というのは「地位、権力」といった意味があります。
カタカナで書くと「スターテス」もしくは「ステイタス」です。

EC-CUEBは時々、間違った外来カタカタを使うことでも有名です。
「state」は「状態,ありさま,ようす,様相;事態,事情,形勢」という意味です。

なぜ、「state」とすべき箇所を「status」とするのか

答えは。。。。。簡単。。。。関係者が低知能なのです。

以前のバージョンでは
「footer」を「fotter」と書いてありました。
小学生レベルのローマ字読みですね。

「status」はどんなところで使われているのか?

商品の状態、公開か非公開か、まさに状態「state」と表現すべき箇所で「status」です。
同じように、受注の対応状況、「発送済み、入金待ち」など、まさに状態「state」と表現すべき箇所で「status」です。

まだまだ続きます

何でも複数形にしようとしたがる

例えば商品一覧

↓EC-CUBEでは puroducts_list なんです。
puroducts_list = 商品たち一覧

↓product_list でいいと思うのですが。
product_list = 商品_一覧

「たくさんあります。沢山リスト。」みたいに二回書くのが好きみたいです。

中学生レベルの複数形の表現くらいはマスターしてからプログラミング業務に従事してほしいものです。

これが日本のweb業界の平均以上というかTOPクラスの人たちの知能レベルです。

同じ日本人として恥ずかしい限りです。

画像を ”vertical-align: middle;” する

画像の縦位置というか上下位置というか、中央に表示する。

.listphoto {
	width: 150px;
	height: 150px;
	border: 1px solid silver;
	display: table;
}
.listphoto .vertical_middle {
	width: 100%;
	height: 100%;
	display: table-cell; 
	vertical-align: middle;
}
.listphoto  .vertical_middle  img {
	padding: 2px;
	max-height: 146px;
	max-width: 146px;
	border: none;
	vertical-align: middle;
}

AUTO_INCREMENTの値を更新する

AUTO_INCREMENTの値として代入する数値は「’」コロンで囲まない。

$sql = "ALTER TABLE `dtb_products_class_product_class_id_seq` AUTO_INCREMENT = 777";

ついでに
EC-CUBE のあるバージョンで発生した事例。

CSVによる商品登録のさい
dtb_products_class_product_class_id_seq や dtb_products_product_id_seq において
・AUTO_INCREMENT を更新する
・sequence を更新する
両方更新しないと管理画面からの商品登録でエラーになる。

さくらのレンタルサーバでEC-CUBEを動かす

レンタルサーバー|さくらインターネット に EC-CUBEを設置するには少々コツがいります。

ファイルパーミッション(アクセス権)は
ディレクトリ(フォルダ): 0705
*.php: 0705
*.tpl: 0705
その他のファイル: 0604

EC-CUBEのルートディレクトリにある.htaccess は削除します。
かわりにサーバーの管理画面からphp.iniが設定できるので、 magic_quotes_gpc = off にします。

エラーメッセージ、問題ないが多くの警告が表示されますので、これもOFFにします。

EC-CUBEでブロックを一括変更する

dtb_blocposition を操作することで対応できる。

device_type_id PC=10、携帯電話=1、スマートフォン=2
page_id トップページ=1、一覧ページ=2、詳細ページ=3、マイページ=4、その他カスタムで作成したページへID付与。(dtb_pagelayout参照)
target_id 0=Unused、1=LeftNavi、2=MainHead、3=RightNavi、4=MainFoot、5=TopNavi、6=BottomNavi、7=HeadNavi、8=HeaderTopNavi、9=FooterBottomNavi、10=HeaderInternalNavi (mtb_target参照)
bloc_id カテゴリー=1、利用ガイド=2、かごの中=3等。(dtb_bloc参照)
bloc_row カラム内でのブロックの表示優先順位。0は非表示で、target_idに5(未使用ブロック)が選択されている場合に設定可能。
filename カテゴリー=1、利用ガイド=2、かごの中=3等。(dtb_bloc参照)bloc_idと対応している。

ブロックIDを調べるには dtb_bloc を見る。

参考処理コード

<html dir="ltr" lang="ja">
<head>
<meta charset="UTF-8" />
</head>
<body>
<?php
include './data/config/config.php';

$db = mysql_connect(DB_SERVER.":".DB_PORT,DB_USER,DB_PASSWORD);
mysql_query("SET NAMES utf8");
mysql_select_db(DB_NAME, $db);
$sql1 = "SELECT * FROM `dtb_category` WHERE `category_id` = '1'";
$rs1 = mysql_query($sql1,$db);
$item1 = mysql_fetch_assoc($rs1);
var_dump($item1);

// ページIDのMAX
$page_id_max = '37';
// 表示するカラムID
$target_id = '3';



$sql1 = "SELECT * FROM `dtb_blocposition`";
$rs1 = mysql_query($sql1,$db);

// UPDATE
while($item1 = mysql_fetch_assoc($rs1)){
	
	
	if( ( ($item1[bloc_id] == 6) || ($item1[bloc_id] == 3) || ($item1[bloc_id] == 8) || ($item1[bloc_id] == 2) || ($item1[bloc_id] == 10) ) && ($item1[device_type_id] == 10) ){
		
		
		// 表示順
		if($item1[bloc_id] == 6){
			$bloc_row = 0;
		}elseif($item1[bloc_id] == 3){
			$bloc_row = 1;
		}elseif($item1[bloc_id] == 8){
			$bloc_row = 2;
		}elseif($item1[bloc_id] == 2){
			$bloc_row = 3;
		}elseif($item1[bloc_id] == 10){
			$bloc_row = 4;
		}
		
		// 表示する
		$sql2 = "UPDATE `dtb_blocposition` SET `target_id` = '$target_id', `bloc_row` = '$bloc_row' WHERE `device_type_id`='10' AND `page_id`='$item1[page_id]' AND `bloc_id`='$item1[bloc_id]'";
		
	}else{
		// 表示しない(カラム)
		$sql2 = "UPDATE `dtb_blocposition` SET `target_id` = '0', `bloc_row` = '0' WHERE `device_type_id`='10' AND `page_id`='$item1[page_id]' AND `bloc_id`='$item1[bloc_id]'";
	}
	
	// echo $sql2.'<br>';
	
	$rs2 = mysql_query($sql2,$db);
}


// 該当ページの、該当ブロックの登録がない場合はINSERT


// 表示するブロックIDの配列
$array_block_id = array(6,3,8,2,10);

// 該当ページIDをループ
for($i = 0; $i <= $page_id_max; $i ++){
	$page_id = $i;
	
	for($a = 0; $array_block_id[$a] != ''; $a ++){
		$sql3 = "SELECT * FROM `dtb_blocposition` WHERE `device_type_id`='10' AND `page_id`='$page_id' AND `bloc_id`='$array_block_id[$a]'";
		$rs3 = mysql_query($sql3,$db);
		$item3 = mysql_fetch_assoc($rs3);
		// var_dump($item3);
		// echo '<br>';
		
		if($item3 == ''){
			
			// 表示順
			if($array_block_id[$a] == 6){
				$bloc_row = 0;
			}elseif($array_block_id[$a] == 3){
				$bloc_row = 1;
			}elseif($array_block_id[$a] == 8){
				$bloc_row = 2;
			}elseif($array_block_id[$a] == 2){
				$bloc_row = 3;
			}elseif($array_block_id[$a] == 10){
				$bloc_row = 4;
			}
			
			$sql4 = "INSERT INTO `dtb_blocposition` (
							`device_type_id`, `page_id`, `target_id`, `bloc_id`, `bloc_row`, `anywhere`
						) VALUES (
							'10', '$page_id', '$target_id', '$array_block_id[$a]', '$bloc_row', '0'
						)";
			// echo $sql4.'<br>';
			$rs4 = mysql_query($sql4,$db);
		}
	}
}


echo '処理完了!';


?>
</body>

</html>

郵便番号(住所変換用)の登録を10秒で出来る方法

EC-CUBE では、
基本情報管理 → 郵便番号DB登録
で 郵便番号の住所変換が出来るようになる。

しかし 「郵便番号DB登録」は とても時間がかかる。
サーバーのスペックにもよるが30分くらいかかるケースも少なくない。

下記のようにSQL文を書いて流し込むと
遅いサーバーでも10秒くらいで出来る。

処理の流れとしては、
1) KEN_ALL_utf-8.CSV を一行ずつ読み込む
2)「,」カンマで分割して、SQL文を発行する

$line = file('./data/downloads/KEN_ALL_utf-8.CSV');
for($i = 0; $line[$i] != ''; $i ++){
// for($i = 0; $i <= 10; $i ++){
	
	echo $i.'<br>';
	
    $array = explode(",", $line[$i]);
    
	$sql1 = "INSERT INTO `mtb_zip` (
				`code`, `old_zipcode`, `zipcode`, `state_kana`, `city_kana`, `town_kana`, `state`, `city`, `town`, `flg1`, `flg2`, `flg3`, `flg4`, `flg5`, `flg6`
				) VALUES (
				'$array[0]','$array[1]','$array[2]','$array[3]','$array[4]','$array[5]','$array[6]','$array[7]','$array[8]','$array[9]','$array[10]','$array[11]','$array[12]','$array[13]','$array[14]'
				)";
	$rs1 = mysql_query($sql1,$db);
	// echo $sql1.'<br>';
}

 
私がすごいのではない。
EC-CUBE がダメダメなのだ(--;

EC-CUBEのリストコメントやメモ欄もHTMLタグを許可する

俗に言う「(タグ許可)」です。

confium.php を見てみると
<!–{$arrForm.note|h|nl2br}–>
<!–{$arrForm.main_comment|nl2br_html}–>

|h|nl2br → |nl2br_html
これだけです。

。。。おっと、待った。
まだでした。

LLTEXT_LEN にしてあげたほうがいいですね。

カートに入れるタグ

EC-CUBEで、ブログなどから直接買い物かごに入れる場合などに利用する。

<form name="form1" id="form1" method="post" action="'.ROOT_URLPATH.'products/detail.php?product_id='.$item1&#91;product_id&#93;.'">
<input type="hidden" name="transactionid" value="'.$_SESSION&#91;transactionid&#93;.'" />
<input type="hidden" name="mode" value="cart" />
<input type="hidden" name="product_id" value="'.$item1&#91;product_id&#93;.'" />
<input type="hidden" name="product_class_id" id="product_class_id4" value="'.$item2&#91;product_class_id&#93;.'" />
<input type="hidden" name="quantity" value="1" />
	<input type="image" src="'.ROOT_URLPATH.'user_data/packages/default/img/set-cart.jpg">
</form>

※ 注意点
http://hogehoge.com/car に投げても商品は入りません。
あて先は「 products/detail.php?product_id=123 」
post する mode は cart

EC-CUBEで受注メールが送信されない(ロリポップなど)

リターンパスの問題
MAIL_BACKENDがmailの場合、リターンパスがサーバ名の入った記載になってしまう事があります。
MAIL_BACKENDをsendmailに変更したうえで簡単なカスタムを施してやることで、問題なくリターンパスが設定したメールアドレスが記述されます。
mailのままカスタムしてやる方法もありますが、sendmailにしてすすめる方が簡単なのでおすすめです。

対処方法
パラメータ設定/MAIL_BACKENDをsendmailに変更。
data/class/SC_SendMail.php でPathを調整すると無事送信できた。
詳細はこちら

EC-CUBE 2.11系でPDF帳票(納品書)がエラーになる

Adobe のエラーが表示されたり。印刷が出来ない。表示が途中まで。症状は様々です。

data/module/fpdi/japanese.php

function Footer()
{
    $this->SetY(-15);
    $this->SetFont('Arial','I',8);
    #$this->Cell(0,10,''.$this->PageNo().' / {nb}',0,0,'C');
}

$this->SetFont(‘Arial’,’I’,8);
$this->SetFont(”,’I’,8);
として、フォント名の指定を止めると治る。

EC-CUBEカスタマイズ事例集

ECCUBEカスタマイズの紹介やデモサイトのご案内です。
毎日、EC-CUBEを弄っていますので、ほんの一例のご紹介です。

デモサイトは機能制限が多いです。一部意図的に機能を止めてあるものもあります。(ソースを盗む輩がいるのでご了承くださいませ。)

難易度の高いものをデモとして公開しています。
難易度の低いもの(簡単なカスタマイズ)は「ページ左側のカテゴリ」からご覧ください。ソースコードも一部公開しています。

ショッピングモール

【DEMO】https://mint123.tokyo/technology/demo/craftcrowd/

カスタマイズをいろいろ混ぜてみた

会員ランクで価格変動、口コミ新着、口コミランキング、購入数で価格変動、お友達紹介機能、など
【DEMO】https://mint123.tokyo/technology/demo/eccube-iroiro/

商品規格をCSVで無限に増やす

(規格多数のEC-CUBE、規格はCSVで自由に変更できる、規格数も無限)
動作を軽くするのが夢でした!
【DEMO】https://mint123.tokyo/technology/demo/eccube-options-v1/

さらにカスタマイズして
セット商品販売ができました。
http://keihinland.com/

選択肢により価格が変動します。
【DEMO】https://mint123.tokyo/technology/demo/eccube-options-price/

会員ランクで価格変動

DEMO
【DEMO】https://mint123.tokyo/technology/demo/eccube-2114-customer_rank
導入事例
http://fontanamoco.jp/

沢山買えばマケマッセ (購入個数で価格変動)

【DEMO】(調整中)
https://mint123.tokyo/technology/demo/eccube-kazu
導入事例
http://best-print.jp/

共同購入 (「購入個数で価格変動」の拡張機能)

解説ページ
【DEMO】https://mint123.tokyo/technology/demo/joint_shopping/
管理画面も公開中!

御覧になりたいデモがございましたらリクエストにお答えいたします。
hsmt@mint410.com

カスタマイズ一覧をすべて見る

受注メール送信を、一時的に止める

/data/class/SC_SendMail.php

268行目付近
$result = $this->objMail->send($recip, $header, $this->body);
をコメントアウトする。

/**
	* TXTメール送信を実行する.
	*
	* 設定された情報を利用して, メールを送信する.
	*
	* @return void
	*/
function sendMail($isHtml = false) {
	$header = $isHtml ? $this->getHTMLHeader() : $this->getTEXTHeader();
	$recip = $this->getRecip();
	// メール送信
	$result = $this->objMail->send($recip, $header, $this->body);
		if (PEAR::isError($result)) {
			GC_Utils_Ex::gfPrintLog($result->getMessage());
			GC_Utils_Ex::gfDebugLog($header);
			return false;
		}
	return true;
}

EC-CUBEデータベースに接続の基本コード

php5〜php7

Database に接続

$pdo = new PDO('mysql:host='.DB_SERVER.';dbname='.DB_NAME.';charset=utf8', DB_USER, DB_PASSWORD);

ヒットがユニークの場合

$sql = "SELECT * FROM `tb_hogehoge`";
$statement = $pdo->query($sql);
$item = $statement->fetch(PDO::FETCH_ASSOC);
var_dump($item);

Roop の場合

$sql = "SELECT * FROM `tb_hogehoge`";
foreach($pdo->query($sql) as $item) {
	var_dump($item);
}

↓php7 から使えなくなる。

バージョン2.4系

$db = mysql_connect(DB_SERVER.":".DB_PORT,DB_USER,DB_PASSWORD);
// mysql_query("SET NAMES utf8");
mysql_set_charset('utf8');
mysql_select_db(DB_NAME, $db);
$sql1 = "SELECT * FROM `dtb_category` WHERE `category_id` = '$_GET[category_id]'";
$rs1 = mysql_query($sql1,$db);
$item1 = mysql_fetch_assoc($rs1);

バージョン2.11系

// Config読込み
// バージョン2.4系
// include $_SERVER[DOCUMENT_ROOT]."/data/install.php";
// バージョン2.11系
// include $_SERVER[DOCUMENT_ROOT]."/config/config.php";
// install.php を include しなくてもいいみたい。

//------------------------------------------------------
// MySQLに接続開始
    $db = mysql_connect(DB_SERVER.":".DB_PORT,DB_USER,DB_PASSWORD);
    // mysql_query("SET NAMES utf8");
    mysql_set_charset('utf8');
    // DB指定(確認用)
    if(!mysql_select_db(DB_NAME, $db)){
        // echo "&lt;div style=\"color:red;\"&gt;\nメインデータベースに接続できません。&lt;/div&gt;\n";
    }elseif(mysql_select_db(DB_NAME, $db)){
        // echo "&lt;div style=\"color:green;\"&gt;\nDB指定OK!(".DB_NAME.")&lt;/div&gt;\n\n\n";
    }
//------------------------------------------------------

$sql1 = "SELECT * FROM `dtb_category` WHERE `category_id` = '$_GET[category_id]'";
$rs1 = mysql_query($sql1,$db);
$item1 = mysql_fetch_assoc($rs1);

Firefox で モバイルサイトの動作検証をするには

EC-CUBEの2.3系、2.4系では、/mobile でPCからもモバイルサイトにアクセスできた。

2.11系では、自動判別されているのでアクセスできない。
Firefox の ユーザーエージェント・スイッチャー でも「非対応機種です。」となってしまう。

モバイルの動作確認を実機で行うのは効率が悪い。

どうしよう?

そこで、Firefox の ユーザーエージェント・スイッチャー を生かす方法をご紹介します。

”SC_Helper_Mobile.php” の2箇所をコメントアウトします。

function lfMobileCheckCompatibility() {
    if (!SC_MobileUserAgent_Ex::isSupported()) {
        // header('Location: ' . ROOT_URLPATH . 'unsupported/' . DIR_INDEX_PATH);
        // exit;
    }
}

これで、Firefoxのアドオンを使えば、PCブラウザでモバイルサイトの動作検証ができるようになります。

EC-CUBE 2.11 で商品登録ができない

EC-CUBE 2.11 で商品登録ができない
と思いきや

EC-CUBE 2.11 で商品登録ができない
シーケンスの調整で解決しました。

2.4系では、MySQLの場合 auto increment でしたが、
2.11系では、別テーブルにシーケンスを設定しているようです。
dtb_products_product_id_seq
dtb_products_class_product_class_id_seq

カテゴリ関係のテーブルも同様です。

こちらのサイトを参考にしました。

受注登録(受注管理)、受注メール、の商品名を操作する

規格を増やした場合など、
記録方法がとても複雑になってしまいます。
そのため動作が重くなるなど、デメリットに悩まされます。

そこで、
商品名(規格1、規格2、・・・・規格N)
のようにすることで、沢山の規格を軽快に利用できるようになりました。

カスタマイズの要は、
”SC_Helper_Purchase.php” の
「function registerOrderDetail」内で、product_name をUODATEする。

今のことろ、この手法がベストな感じです。

↓ソースコードは、整理できたら公開します。
こちらです。

eccube 2.11 ページ詳細 編集で システムエラー

設置パスがデフォルトのままならば、この問題は発生しない。

public_html
├html
└data

この構成を崩す場合、defaine.php を変更するのだが、Pathの処理に問題があり、管理画面の一部の機能がシステムエラーになる。
修復方法はとても面倒だ。お客様のご要望でどうしてもバージョン2.11で動かさねばならない。

簡易な回避方法は、
sfChangeCheckBox を使っていないのに書いてあるのがまずいらしい。
コメントアウトしてしまおう。

ソースコード解説はこちらです

EC-CUBE2.11で会員登録の初期値を仮会員にする

パラメータ設定でできるはずだが、動かない
/data/cache/mtb_constants.php のパーミッションを確認する
このファイルが更新されなければ、反映されない。

「管理者の承認が必要」とするには、
メールテンプレートを調整して、ユーザーが認証URLへアクセスできないようにする。

ファイルを編集して実装する場合
対象ファイル:/data/class/helper/SC_Helper_Customer.php

ソースコードはこちら

EC-CUBE から paypal へ「住所・氏名・メルアド」を渡す

ECcubeからペイパルの支払いページに移った時、フォームに自動入力する。

対象ファイル:data/downloads/module/mdl_paypal/paypal_link.tpl
以下を追加

    <!--{assign var=key value="first_name"}-->
    <input type="hidden" name="<!--{$key}-->" value="<!--{$arrForm&#91;$key&#93;.value}-->" />
    <!--{assign var=key value="last_name"}-->
    <input type="hidden" name="<!--{$key}-->" value="<!--{$arrForm&#91;$key&#93;.value}-->" />
    <!--{assign var=key value="state"}-->
    <input type="hidden" name="<!--{$key}-->" value="<!--{$arrForm&#91;$key&#93;.value}-->" />

※ 上記テンプレートの変更に伴い、モジュールファイルも調整が必要です。

これで、ページ遷移時にフォームへ自動入力されました。

paypal へ投げる金額に送料が加算されてしまうのを回避する

ペイパル へ投げる金額に送料が加算されてしまうのを回避する。
「商品価格+送料」をペイパルに投げると、送料にも消費税が加算されてしまう。
これを避けるために、純粋な商品価格のみをペイパルに投げるための処理。

	/**
		* パラメータ情報の初期化
		*/
	function initParam($arrData) {
		$this->objFormParam->addParam("cmd", "cmd", STEXT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK"), PAYPAL_CMD);
		$this->objFormParam->addParam("business", "business", MTEXT_LEN, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK"), $arrData['business']);
		$this->objFormParam->addParam("undefined_quantity", "undefined_quantity", 1, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK"), PAYPAL_UNDEFINED_QUANTITY);
		$this->objFormParam->addParam("item_name", "item_name", 60, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK"), $arrData['item_name']);
		$this->objFormParam->addParam("currency_code", "currency_code", 3, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK"), PAYPAL_CURRENCY_CODE);
		
		// ペイパルのときは送料を引いて商品価格のみにする
		$arrData['payment_total'] = $arrData['payment_total'] - $arrData['deliv_fee'];
		
		$this->objFormParam->addParam("amount", "amount", STEXT_LEN, "n", array("NUM_CHECK", "EXIST_CHECK", "MAX_LENGTH_CHECK"), $arrData['payment_total']);
		$this->objFormParam->addParam("invoice", "invoice", STEXT_LEN, "n", array("EXIST_CHECK", "MAX_LENGTH_CHECK", "NUM_CHECK"), $arrData['order_id']);

EC-CUBE、ステータス変更でメールを自動送信する。

ステータスを「入金済み」にしたときに「ご入金確認メール」を自動送信する場合の例です。

メールテンプレートを追加する

/data/Smarty/templates/default/mail_templates/
order_mail.tpl をコピーして hoge_mail.tpl を新規に作成する。

「 管理画面 → システム設定 」で、
mtb_mail_template に追加
mtb_mail_tpl_pass にも追加

ここからが本題の自動送信処理です。

個別にステータスを変えた場合
/data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php

/* DB登録処理 */
function lfRegistData($order_id) {
	$objQuery = new SC_Query();

	$objQuery->begin();

	// 入力データを渡す。
	$arrRet =  $this->objFormParam->getHashArray();
	foreach($arrRet as $key => $val) {
		// 配列は登録しない
		if(!is_array($val)) {
			$sqlval[$key] = $val;
		}
	}
	$sqlval['update_date'] = 'Now()';

	if (strlen($sqlval['deliv_date_year']) >= 0) {
		$sqlval['deliv_date'] = $sqlval['deliv_date_year'] . '-' . $sqlval['deliv_date_month'] . '-' . $sqlval['deliv_date_day'];
	}
	unset($sqlval['deliv_date_year']);
	unset($sqlval['deliv_date_month']);
	unset($sqlval['deliv_date_day']);

	unset($sqlval['total_point']);
	unset($sqlval['point']);
	unset($sqlval['commit_date']);

	$where = "order_id = ?";
	
	
	// ここから追加 ------------------------------
	// ここにメール送信処理を書きます。
	// ここまで追加 ------------------------------

	/*
		* XXX 本来なら配列だが, update 関数を string として
		*     チェックしているため...
		*/
	if (!isset($addcol)) $addcol = "";

	// 受注テーブルの更新
	$objQuery->update("dtb_order", $sqlval, $where, array($order_id), $addcol);

一括してステータスを変えた場合の対象ファイル
/data/class/pages/admin/order/LC_Page_Admin_Order_Status.php
ソースコード

EC-CUBE 2.11 で 会員登録の項目を増やす

フォーム
/data/Smarty/templates/default/frontparts/form_personal_input.tpl

確認画面
/data/Smarty/templates/default/entry/confirm.tpl

登録処理、Myページでの変更画面、入力チェック
/data/class/helper/SC_Helper_Customer.php
function sfCustomerEntryParam の後半で UPDATA で追加フィールドを登録する。

	function sfCustomerEntryParam (&$objFormParam, $isAdmin = false) {
		SC_Helper_Customer_Ex::sfCustomerCommonParam($objFormParam);
		SC_Helper_Customer_Ex::sfCustomerRegisterParam($objFormParam, $isAdmin);
		if($isAdmin) {
			$objFormParam->addParam("顧客ID", "customer_id", INT_LEN, 'n', array("NUM_CHECK"));
			$objFormParam->addParam('携帯メールアドレス', "email_mobile", MTEXT_LEN, 'a', array("NO_SPTAB", "EMAIL_CHECK", "SPTAB_CHECK" ,"EMAIL_CHAR_CHECK", "MAX_LENGTH_CHECK", "MOBILE_EMAIL_CHECK"));
			$objFormParam->addParam("会員状態", 'status', INT_LEN, 'n', array("EXIST_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
			$objFormParam->addParam("SHOP用メモ", 'note', LTEXT_LEN, 'KVa', array("MAX_LENGTH_CHECK"));
			$objFormParam->addParam("所持ポイント", 'point', INT_LEN, 'n', array("NUM_CHECK"));
			
			
			// 項目追加
			// office_or 	office_name_kana 	office_name 	office_url 	office_gyousyu 	office_post0 	office_post1 	office_post2
			// mobile01 	mobile02 	mobile03	questionnaire0 	questionnaire1
			$objFormParam->addParam("会社名", 'office_or', INT_LEN, 'n', array());
			$objFormParam->addParam("会社名", 'office_name', LTEXT_LEN, 'n', array());
			$objFormParam->addParam("会社名カナ", 'office_name_kana', LTEXT_LEN, 'n', array());
			$objFormParam->addParam("会社URL", 'office_url', LTEXT_LEN, 'n', array());
			$objFormParam->addParam("業種", 'office_gyousyu', LTEXT_LEN, 'n', array());
			$objFormParam->addParam("役職", 'office_post0', LTEXT_LEN, 'n', array());
			$objFormParam->addParam("部署1", 'office_post1', LTEXT_LEN, 'n', array());
			$objFormParam->addParam("部署2", 'office_post2', LTEXT_LEN, 'n', array());
			$objFormParam->addParam("携帯メール1", 'mobile01', LTEXT_LEN, 'n', array());
			$objFormParam->addParam("携帯メール2", 'mobile02', LTEXT_LEN, 'n', array());
			$objFormParam->addParam("携帯メール3", 'mobile03', LTEXT_LEN, 'n', array());
			$objFormParam->addParam("質問1", 'questionnaire0', LTEXT_LEN, 'n', array());
			$objFormParam->addParam("質問2", 'questionnaire1', LTEXT_LEN, 'n', array());
			
		}
	}

表示に反映されない時は「SC_CustomerList.php」への追記を忘れているかも?

WordPress のデザインを EC-CUBE と同じにする

WordPress のヘッダー、サイドバー、フッターをEC-CUBEと同じように作っても良いが、変更があると、倍の作業になってしまう。
そこで、EC-CUBEのHTMLソースを自動で抽出して、Wordpress の該当部分に表示すると、合理的になる。

ソースの一例なので、任意に調整して利用する。

<body <?php body_class(); ?>>
<div id="wrapper" class="hfeed">

		<?php
			$data = 'http://'.$_SERVER&#91;SERVER_NAME&#93;.'/';
			$line = file($data);
			$i  =  0;
			while($line&#91;$i&#93;!=""){
				if(preg_match("/▼HEADER/", $line&#91;$i&#93;)) $print = 'on';
				if(preg_match("/▲HEADER/", $line&#91;$i&#93;)) $print = '';
				
				if($print == 'on') echo $line&#91;$i&#93;;
				$i ++;
			}
		?>


	<div id="main">

※ 注意
EC-CUBEのCSSを読み込んだり、それぞれのCSSの衝突を回避したりという作業も必須です。
CSSで画像を背景に敷いているときは、パスのお読み変えも必要です。
その辺のノウハウは、皆さんがんばって挑戦してみて下さい。

EC-CUBE 2.11.0 データベースの文字化け対策

2.11では、ファイル構成やデザインなど大幅な変更が行われたようです。
しかしデータベースの文字化けに関しては、
「多くのレンタルサーバーで採用されている仕様」では、
残念ながら文字化けしてしまいます。

自己責任でインストールして使うには問題はありませんが、
カスタマイズなどを施す場合には必須になります。

/data/class/SC_Query.php の79行目付近

//$this->conn->setCharset(CHAR_CODE);
$this->conn->setCharset('utf8');

/data/module\MDB2/Driver/mysql.php の539行目付近

//if (!empty($this->dsn['charset'])) {
//$result = $this->setCharset($this->dsn['charset'], $connection);
$result = $this->setCharset('utf8', $connection);
if (PEAR::isError($result)) {
&nbsp;&nbsp;&nbsp;&nbsp;$this->disconnect(false);
&nbsp;&nbsp;&nbsp;&nbsp;return $result;
}
//}

このように簡単なことですが、注意点があります。

※ 注意
インストールの特定のタイミングで行うこと。(タイミングが違うと、別な問題が発生します)

EC-CUBEで規格を増やす。動作が重くならない方法。

保守・サポートのご依頼が増えてきましたので、価格を設定いたしました。

web製作会社さま向けサポートはじめました。

 ・web製作会社さま
 ・ディレクション専門会社さま
 ・広告代理店さま
 ・web転がし屋さま
 ・webピン跳ね業者さま
 ・個人業者さま(僕も個人事業です)
 お仕事を下さる方は、歓迎いたします。
いつでも電話でお答えできる「技術サポート」月額5万円!
客先で、即答できれば、受注率がアップします。
もちろん制作費も激安です。

年払いは4割引(年間36万円)で、安心受注が可能になります。

※ 【注意】クライアントへのプレゼン資料作成は、含まれません。

ご希望の方は、has@mint410.com まで。

EC-CUBEで規格を3つに増やすと、当然ながら、「動作が重い」という問題が発生します。
これは「規格違いが商品数」として扱われる設計だから起きることです。
規格1の数 × 規格2の数 × 規格3の数 = 商品数
例) 規格1の数(10) × 規格2の数(2) × 規格3の数(5) = 商品数(100)

商品一覧ページには10個の商品が表示されるように見えますが、
千個の商品データを読み込んでいるので、重くなって当然です。

商品数は1つのまま、規格を増やすことってできるのでしょうか?
やってみると、簡単でした。

このカスタマイズのお値段は、3万円です。
ご希望により更なるカスタマイズもできます。

カスタマイズは一項目あたり3万円ポッキリ!(例外もございます)
それでも厳しいお客様はご相談ください。EC-CUBE製作は難しいカスタマイズのご希望も多く受注を敬遠しがちです。しっかりした技術者と手を組めば、決して怖いものではありません。※代理店様もご遠慮なくどうぞ!

【特徴】
項目の指定は、CSVファイルにしましたので、後からの変更はどなたでも簡単にできます。

【問題点】
規格ごとに商品コードを活用する場合は非対応です。
ご希望があれば製作いたします。
作るのは簡単ですが、使わない機能はないほうが操作しやすいです。

「簡単で高機能」を日ごろから心がけております。

EC-CUBEで静的URL

httpd.conf の確認
・LoadModule rewrite_module modules/mod_rewrite.so
・AllowOverride All
AllowOverride がAllになっていないことが多い
この2箇所に注意

”.htaccess”のサンプル

#mode_rewriteの設定
RewriteEngine on
RewriteBase /demo/hogehoge.jp/   // EC-CUBEのルートディレクトリ
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^products/detail/([0-9]+)? products/detail.php?product_id=$1 [L]
RewriteRule ^products/list/([0-9]+)? products/list.php?category_id=$1 [L]
RewriteRule ^mobile/products/detail/([0-9]+)_([0-9]+)? mobile/products/detail.php?product_id=$1&page=$2 [L]
RewriteRule ^mobile/products/list/([0-9]+)? mobile/products/list.php?category_id=$1 [L]

例(2)examle.com

#mode_rewriteの設定
RewriteEngine on
RewriteBase /demo/examle.com/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^products/detail/([0-9]+)? products/detail.php?product_id=$1 [L]
RewriteRule ^products/list/([0-9]+)? products/list.php?category_id=$1 [L]
RewriteRule ^mobile/products/detail/([0-9]+).html? mobile/products/detail.php?product_id=$1 [L]
RewriteRule ^mobile/products/list/([0-9]+).html? mobile/products/list.php?category_id=$1 [L]

EC-CUBEのPDF帳票右上ロゴ画像変更の注意点

EC-CUBEはPDF帳票周りはしょっちゅう変わっている。

ヴァージョン2.4.4 の例です。

PDF帳票に利用されるロゴ画像の場所は user_data 配下に変わったようです。

画像フォーマットが合わないとエラーになります。(これはPDFの仕様)

前回と同じ方法は次は通用しない。

そうおもっていて間違いはなさそうです。

毎回初心で望めば問題ないと思います。

ec-cubeでログインしていないとカード決済をスルーしてしまう。

ec-cubeでログインしていないとカード決済をスルーしてしまう。
カード決済モジュールはエラーになっていない。
お客様からこのような相談を受けました。

調べてみると、
ログインしていてもスルーするんじゃないか?という状態でした。

カード決済なのに、
銀行振り込み、代引き、とおなじように、決済モジュールではなかったのです。
決済名称に「クレジット」と書いてありました。

スルーして同然なので、直すのも簡単でした。

同じことをしでかしたweb製作会社さんはこれで18件目です。

zeus

EC-CUBEでゼロ円商品を扱う

商品価格が「0」の場合、エラーになり次へ進めません。
でもゼロ円商品を設けたいという場合も多々あると思います。

対象ファイル: data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
556行目付近

フォームからの入力チェックが書かれているので、そこを調整すればOKです。

// 入力エラーチェック
function lfErrorCheck($array) {

    $objErr = new SC_CheckError($array);
    $objErr->doFunc(array("商品名", "name", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
    $objErr->doFunc(array("一覧-メインコメント", "main_list_comment", MTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
    $objErr->doFunc(array("詳細-メインコメント", "main_comment", LLTEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
    $objErr->doFunc(array("詳細-メインコメント", "main_comment", $this->arrAllowedTag), array("HTML_TAG_CHECK"));
    $objErr->doFunc(array("ポイント付与率", "point_rate", PERCENTAGE_LEN), array("EXIST_CHECK", "NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
    $objErr->doFunc(array("商品送料", "deliv_fee", PRICE_LEN), array("NUM_CHECK", "SPTAB_CHECK", "MAX_LENGTH_CHECK"));
    $objErr->doFunc(array("備考欄(SHOP専用)", "note", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
    $objErr->doFunc(array("検索ワード", "comment3", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
    $objErr->doFunc(array("メーカーURL", "comment1", URL_LEN), array("SPTAB_CHECK", "URL_CHECK", "MAX_LENGTH_CHECK"));
    $objErr->doFunc(array("発送日目安", "deliv_date_id", INT_LEN), array("NUM_CHECK"));

    if($this->tpl_nonclass) {
        $objErr->doFunc(array("商品コード", "product_code", STEXT_LEN), array("EXIST_CHECK", "SPTAB_CHECK","MAX_LENGTH_CHECK"));
        $objErr->doFunc(array("通常価格", "price01", PRICE_LEN), array("MAX_LENGTH_CHECK"));
        $objErr->doFunc(array("商品価格", "price02", PRICE_LEN), array("MAX_LENGTH_CHECK"));

        if(!isset($array['stock_unlinited']) && $array['stock_unlimited'] != "1") {
            $objErr->doFunc(array("在庫数", "stock", AMOUNT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
        }
    }

    if(!isset($array['sale_unlimited']) && $array['sale_unlimited'] != "1") {
        $objErr->doFunc(array("購入制限", "sale_limit", AMOUNT_LEN), array("EXIST_CHECK", "SPTAB_CHECK", "ZERO_CHECK", "NUM_CHECK", "MAX_LENGTH_CHECK"));
    }

    for ($cnt = 1; $cnt <= PRODUCTSUB_MAX; $cnt++) {
        $objErr->doFunc(array("詳細-サブタイトル$cnt", "sub_title$cnt", STEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
        $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", LLTEXT_LEN), array("SPTAB_CHECK", "MAX_LENGTH_CHECK"));
        $objErr->doFunc(array("詳細-サブコメント$cnt", "sub_comment$cnt", $this->arrAllowedTag),  array("HTML_TAG_CHECK"));
    }

規格分けする場合のゼロ円商品対応
“price01” “price02″ はソート検索で、該当箇所は対応済みだが、商品規格の価格ではゼロ円がエラーになってしまう。

該当ファイル: data/class/pages/admin/products/LC_Page_Admin_Products_ProductClass.php
しかし、このファイルでは、”price01” “price02” という文字が出てこない、目視で探して対応できました。

EC-CUBEでMyPageにステータスを表示する

対象ファイル: data/Smarty/templates/default/mypage/index.tpl

<!--▼CONTENTS-->
<div id="mypagecolumn">
	<div id="mycontentsarea">
	<h3><img src="<!--{$TPL_DIR}-->img/mypage/subtitle05.gif" width="580" height="40" alt="購入履歴詳細" /></h3>
	<p class="myconditionarea">
	<strong>申込日時:&nbsp;</strong><!--{$arrDisp.create_date|sfDispDBDate}--><br />
	<strong>注文番号:&nbsp;</strong><!--{$arrDisp.order_id}--><br />
	<strong>お支払い方法:&nbsp;</strong><!--{$arrPayment&#91;$arrDisp.payment_id&#93;|escape}-->
	<!--{if $arrDisp.deliv_time_id != ""}--><br />
	<strong>お届け時間:&nbsp;</strong><!--{$arrDelivTime&#91;$arrDisp.deliv_time_id&#93;|escape}-->
	<!--{/if}-->
	<!--{if $arrDisp.deliv_date != ""}--><br />
	<strong>お届け日:&nbsp;</strong><!--{$arrDisp.deliv_date|escape}-->
	<!--{/if}-->
	</p>

	<table summary="購入商品詳細">
		<tr>
		<th>サービスコード</th>
		<th>サービス名</th>
		<th>単価</th>
		<th>冊数</th>
		<th>小計</th>
		</tr>
		<!--{section name=cnt loop=$arrDisp.quantity}-->
		<tr>
		<td><!--{$arrDisp.product_code&#91;cnt&#93;|escape}--></td>
		<td><a href="<!--{$smarty.const.URL_DIR}-->products/detail.php?product_id=<!--{$arrDisp.product_id&#91;cnt&#93;}-->"><!--{$arrDisp.product_name&#91;cnt&#93;|escape}--></a></td>
		<!--{assign var=price value=`$arrDisp.price&#91;cnt&#93;`}-->
		<!--{assign var=quantity value=`$arrDisp.quantity&#91;cnt&#93;`}-->
		<td class="pricetd"><!--{$price|escape|number_format}-->円</td>
		<td><!--{$quantity|escape}--></td>
		<td class="pricetd"><!--{$price|sfPreTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|sfMultiply:$quantity|number_format}-->円</td>
		</tr>
		<!--{/section}-->
		<tr>
		<th colspan="4" class="resulttd">小計</th>
		<td class="pricetd"><!--{$arrDisp.subtotal|number_format}-->円</td>
		</tr>
		<!--{assign var=point_discount value="`$arrDisp.use_point*$smarty.const.POINT_VALUE`"}-->
		<!--{if $point_discount > 0}-->
		<tr>
		<th colspan="4" class="resulttd">ポイント値引き</th>
		<td class="pricetd"><!--{$point_discount|number_format}-->円</td>
		</tr>
		<!--{/if}-->
		<!--{assign var=key value="discount"}-->
		<!--{if $arrDisp&#91;$key&#93; != "" && $arrDisp&#91;$key&#93; > 0}-->
		<tr>
		<th colspan="4" class="resulttd">値引き</th>
		<td class="pricetd"><!--{$arrDisp&#91;$key&#93;|number_format}-->円</td>
		</tr>
		<!--{/if}-->
		<tr>
		<th colspan="4" class="resulttd">送料</th>
		<td class="pricetd"><!--{assign var=key value="deliv_fee"}--><!--{$arrDisp&#91;$key&#93;|escape|number_format}-->円</td>
		</tr>
		<tr>
		<th colspan="4" class="resulttd">手数料</th>
		<!--{assign var=key value="charge"}-->
		<td class="pricetd"><!--{$arrDisp&#91;$key&#93;|escape|number_format}-->円</td>
		</tr>
		<tr>
		<th colspan="4" class="resulttd">合計</th>
		<td class="pricetd"><em><!--{$arrDisp.payment_total|number_format}-->円</em></td>
		</tr>
	</table>

	<!-- 使用ポイントここから -->
	<!--{if $smarty.const.USE_POINT === true}-->
		<table summary="使用ポイント">
		<tr>
			<th>ご使用ポイント</th>
			<td class="pricetd"><!--{assign var=key value="use_point"}--><!--{$arrDisp&#91;$key&#93;|number_format|default:0}--> pt</td>
		</tr>
		<tr>
			<th>今回加算されるポイント</th>
			<td class="pricetd"><!--{$arrDisp.add_point|number_format|default:0}--> pt</td>
		</tr>
		</table>
	<!--{/if}-->
	<!-- 使用ポイントここまで -->

		<table summary="ステータス">
		<tr>
			<th>ステータス</th>
			<td class="pricetd">
<!--{php}-->
	$hoge = $this->get_template_vars();
	$hoge = $hoge[arrDisp];
	$ext_order_id = $hoge[order_id];

	// Config読込み
	include $_SERVER[DOCUMENT_ROOT]."/../eccube2_data/system/install.php";
	//------------------------------------------------------
	// MySQLに接続開始
		$db = mysql_connect(DB_SERVER,DB_USER,DB_
PASSWORD);
		// mysql_query("SET NAMES utf8");
		// DB指定(確認用)
		if(!mysql_select_
db(DB_NAME, $db)){
			// echo "<div style=\"color:red;\">\nメインデータベースに接続できません。</div>\n";
		}elseif(mysql_select_db(DB_NAME, $db)){
			// echo "<div style=\"color:green;\">\nDB指定OK!(".DB_NAME.")</div>\n\n\n";
		}
	//------------------------------------------------------
	$sql="SELECT * FROM `dtb_order` WHERE `order_id` = '$ext_order_id'";
	$rs = mysql_query($sql,$db);
	$arr_product_id = array();
	$item = mysql_fetch_assoc($rs);
	if($item[status] == '1'){
		echo '新規受付';
	}elseif($item[status] == '2'){
		echo '入金待ち';
	}elseif($item[status] == '3'){
		echo '入金済み';
	}elseif($item[status] == '4'){
		echo 'キャンセル';
	}elseif($item[status] == '5'){
		echo 'スキャン中';
	}elseif($item[status] == '6'){
		echo '発送済み';
	}elseif($item[status] == '7'){
		echo '裁断';
	}elseif($item[status] == '8'){
		echo '書籍到着';
	}
<!--{/php}-->
			</td>
		</tr>
		</table>

	<table summary="お届け先" class="delivname">
		<thead>
		<tr>
			<th colspan="5">▼お届け先</th>
		</tr>
		</thead>
		<tbody>
		<tr>
			<th>お名前</th>
			<!--{assign var=key1 value="deliv_name01"}-->
			<!--{assign var=key2 value="deliv_name02"}-->
			<td><!--{$arrDisp&#91;$key1&#93;|escape}-->&nbsp;<!--{$arrDisp&#91;$key2&#93;|escape}--></td>
		</tr>
		<tr>
			<th>お名前(フリガナ)</th>
			<!--{assign var=key1 value="deliv_kana01"}-->
			<!--{assign var=key2 value="deliv_kana02"}-->
			<td><!--{$arrDisp&#91;$key1&#93;|escape}-->&nbsp;<!--{$arrDisp&#91;$key2&#93;|escape}--></td>
		</tr>
		<tr>
			<th>郵便番号</th>
			<!--{assign var=key1 value="deliv_zip01"}-->
			<!--{assign var=key2 value="deliv_zip02"}-->
			<td>〒<!--{$arrDisp&#91;$key1&#93;}-->-<!--{$arrDisp&#91;$key2&#93;}--></td>
		</tr>
		<tr>
			<th>住所</th>
			<!--{assign var=pref value=`$arrDisp.deliv_pref`}-->
			<!--{assign var=key value="deliv_addr01"}-->
			<td><!--{$arrPref&#91;$pref&#93;}--><!--{$arrDisp&#91;$key&#93;|escape}--><!--{assign var=key value="deliv_addr02"}--><!--{$arrDisp&#91;$key&#93;|escape}--></td>
		</tr>
		<tr>
			<th>電話番号</th>
			<!--{assign var=key1 value="deliv_tel01"}-->
			<!--{assign var=key2 value="deliv_tel02"}-->
			<!--{assign var=key3 value="deliv_tel03"}-->
			<td><!--{$arrDisp&#91;$key1&#93;}-->-<!--{$arrDisp&#91;$key2&#93;}-->-<!--{$arrDisp&#91;$key3&#93;}--></td>
		</tr>
		</tbody>
	</table>

	<div class="tblareabtn">
		<a href="./index.php" onmouseover="chgImg('<!--{$TPL_DIR}-->img/common/b_back_on.gif','change');" onmouseout="chgImg('<!--{$TPL_DIR}-->img/common/b_back.gif','change');"><img src="<!--{$TPL_DIR}-->img/common/b_back.gif" width="150" height="30" alt="戻る" name="change" id="change" /></a>
	</div>
	</div>
</div>
<!--▲CONTENTS-->

EC-CUBEでサブ画像を増やすには?

データベースに該当フィールドを追加します。
50とか100まで増やすと手作業での登録は大変なので、プログラムでSQL文を自動生成して処理しますので、
いくらでも増やせます。あまり増やすと処理時間がかかりますのでご注意下さい。

管理画面→システム設定→パラメータ設定
PRODUCTSUB_MAX の値を変更します。

(旧バージョン)
/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php
の2箇所に該当フィールドを追加します。

(2.11系 2.12系)
/data/class/SC_Product.php
の一箇所に該当フィールドを追加します。

順番が違うとINSERT文はエラーになるので注意して下さい。

カート、決済ページに左サイドカラムを表示する。

対象ファイル: data/class/pages/(cart,shopping)/LC_Page_***.php

カラム数を変更

function init() {
	parent::init();
	$this->tpl_mainpage = 'cart/index.tpl';
	// $this->tpl_column_num = 1;
	$this->tpl_column_num = 2;

function process() の変数宣言の後に追記

// レイアウトデザインを取得(added 日付 this block only)
$layout = new SC_Helper_PageLayout_Ex(); 
$layout->sfGetPageLayout($this, false, DEF_LAYOUT);

EC-CUBEで商品編集ページに直接アクセスする方法

<form name="form1" id="form1" method="post" action="/admin/products/index.php">
<input type="hidden" name="mode" value="search">
<input type="hidden" name="product_id" value="">
<input type="hidden" name="category_id" value="">
<input type="hidden" name="search_product_id" value="">
<input type="hidden" name="search_product_class_name" value="">
<input type="hidden" name="search_product_code" value="">
<input type="hidden" name="search_name" value="">
<input type="hidden" name="search_category_id" value="">
<input type="hidden" name="search_startyear" value="">
<input type="hidden" name="search_startmonth" value="">
<input type="hidden" name="search_startday" value="">
<input type="hidden" name="search_endyear" value="">
<input type="hidden" name="search_endmonth" value="">
<input type="hidden" name="search_endday" value="">
<input type="hidden" name="search_page_max" value="10">
<input type="hidden" name="search_pageno" value="">
<a href="/" onclick="fnChangeAction(\'./product.php\'); fnModeSubmit(\'pre_edit\', \'product_id\', 169); return false;" >編集</a>
<a href="http://f-best.info.localhost/products/detail.php?product_id=169&admin=on" target="_blank">確認</a>
</form>

form はメインカラム内に書くことが必須だが、AタグはFormの外に書いても有効。

画像サイズを取得してW:Hの最大値を調整する

画そうのサイズを取得する。
このとき画像のPathに注意が必要です。
SERVER_ROOT ではなく、DOCUMENT_ROOT で指定しましょう。

list($width, $height, $type, $attr) = getimagesize($_SERVER[DOCUMENT_ROOT]."/upload/save_image/".$item4[main_image].".jpg");
echo 'W:'.$width.' H:'.$height.'<br>';

画像の最大サイズを調整する。

$wid_max = '450';
$hei_max = '450';
if($width >= $height){
	if($width <= $wid_max){
		$html_size = ' width="'.$width.'"';
	}else{
		$html_size = ' width="'.$wid_max.'"';
	}
}else{
	if($height <= $hei_max){
		$html_size = ' height="'.$height.'"';
	}else{
		$html_size = ' height="'.$hti_max.'"';
	}
}

$img_html = '<img src="/upload/save_image/'.$item4&#91;comment6&#93;.'.jpg"'.$html_size.'>';
echo $img_html; 

WindowsサーバーでEC-CUBEでモバイル(携帯)でユーザー登録ができない

WindowsサーバーでEC-CUBEでモバイルでユーザー登録ができない。
TOPページにリダイレクトされてしまいます。

カート機能なども同じくTOPページにリダイレクトされてしまいます。

セッションとかクッキーとかがうまく機能しないのが原因のようです。

解決方法はこちらです。

data/class/session/sessionfactory /SC_SessionFactory_UseRequest.php
182行目付近

    /**
     * セッション初期処理を行う。
     *
     * @return void
     */
    function initSession() {
        // セッションIDの受け渡しにクッキーを使用しない。
        // ini_set('session.use_cookies', '0');
		ini_set('session.use_cookies', '0');
		/* ★ここに1行書き足すとと動作しました★ */

        // パラメーターから有効なセッションIDを取得する。
        $sessionId = $this->getSessionId();

        if (!$sessionId) {
            session_start();
        }

        // セッションIDまたはセッションデータが無効な場合は、セッションIDを再生成
        // し、セッションデータを初期化する。
        if ($sessionId === false || !$this->validateSession()) {

全文をご覧になりたい方はこちらです。

EC-CUBEで管理者の種類を増やす

サイト管理者のみですが、店長権限や発送担当権限などがあると便利です。

権限を増やすには、マスター管理→mtb_authority から簡単に追加できます。

これで管理画面上は店長権限を選択できます。
メンバー一覧にも権限別として表示されます。

しかしこれだけでは検眼の違いがどこにも影響しません。
さてこの権限を同活用するかそこが本題です。

活用方法はこちら

EC-CUBEで携帯でセッションが切れてしまう(1)

・会員登録ができない
・ログインできない
・カートが空になってしまう
などの症状が多いようです。

これらは”PHPSESSIDが変わってしまう”ことにより発生します。

なぜ”PSPSESSID”が変わってしまうのか?
これらは、サーバーの仕様によりセッションが切れてしまうことが原因です

回避策としては、”.htaccess” や ”php.ini” で対処する個方法が一般的ですが、
それでも反映されないサーバーも多いです。

その場合、data/install.php に一行書くだけで、対処できます。

続きはこちらです。

ダブルクォーテーションが勝手にエスケープされてしまう

『”』の前に『\』がついてエラーになる事や、
『Warning: Invalid argument supplied for foreach() ~』で始まるエラーが表示される事があります。
EC-CUBEでは、商品登録のカテゴリが反映しないなんてこともあります。
それの対応策です。

.htaccess に “magic_quotes_gpc 0” で効けばいいのですが、
それでもダメな場合は
php.ini に ”magic_quotes_gpc = off” を書いて
サーバの該当ディレクトリに置く。

ec-cube

SEO試験的な文章です。
意味はありませんので、読まないでください。

EC-CUBEはここが酷い。最近EC-CUBEのプログラム修正を仕事でしているわけだが、EC-CUBEのプログラムソースは余りにも酷すぎる。開発者が初歩的な英単語を理解していない。になっている。EC-CUBE1.xシリーズとEC-CUBE2.xのプログラムソースが混在している。旧世代の遺物が沢山ファイル名や内部パスの隠蔽が不完全。結局はPHPプログラマがいないとまともなサイトは作れないというオチが。費税の計算方法と総額表示EC-CUBE追記消費税計算と総額表示「超致命的」となっているところの計算は開発者の方が正しいが…たしかにEC-CUBEの仕様は正しいですが、端数処理方法が四捨五入や切り上なぜコミッターになって修正しないの?EC-CUBEリリース初期には色々と対応はしていたのですが、現在メインで使っているソースがEC-CUBEが配布しているものに対しコミッターになって修正してあげればいいんじゃないでしょうか。www.ec-cubeオープンソースなんで、コミッターのスキル・テクニックに委ねられると「開発者が料金計算ができない」での計算は間違ってないけど。今仕事でEC-CUBEのカスタマイズをやっているのですが…。ほんとひどすぎですね。いくらフリーとはいEC-CUBEはバグが多いという貴重な情報をありがとうございます。ところでこの記事で言及されているEC-CUBEのバージョンっていくつでaiueo(EC-CUBEコミッター)aiueo(EC-CUBEコミッター)的には非常に的を得た記事だとEC-CUBEフォーラムでも話題に上げてみようかな。EC-CUBEは色々と問題はあるものの、中小規模で見た目さえ良ければOKなサイ人から聞いた話ですが、ロックオンの社長は「EC-CUBEにバグがなかったり、言ってたみたいだし。あえてこの品質じゃないんでしょうか?それよりも、私はLiveCommerています。が公開後、EC-CUBEのシェアガタ落ちにならなけいですがね。EC-CUBEにはプログラム的を運営している私から見るとEC-CUBEのホームページがもうちょっといい加減なデザインだとよいのですが、EC-CUBEが使えるのかどうか調査するだけでも相当大変で時間がかかります。上に出たプラチナパートナーのA社は、EC-CUBE以外のサービスはやっていないので、EC-CUBEという泥舟に乗った会社な案はもちろんありませんしEC-CUBEは、色んな意味で非常に低なので、当に世の中のゴミだと思います。ホームページのデザインした印象は受けませんが、EC-CUBEのように見た目だけあっただけに、逆に好感が持てます!多言語に対応しているられているという印象です。セミナーで色々な方聞くと、実はEC-CUBEの品質が非常にの中では有名みたいですね。ネットマーケティの知識はそれなりに高いレベルにあります。プログラミングも少しですが実務ます。ネットショップの乗り換えた時に、色々なシステムを徹底的にみましたが、その中でもEC-CUBEの品質はに低いと感じました。、多額の費用投資したあげく、EC-CUBEを使うことは念。大きな損ってしまいました。のズサンな管理体制や根本的ミスを考えると、EC-CUBEに未来はな判断しました。ネットで色々と集めてみると、EC-CUBEはそもそもロック社で販売するシステムとして開発されたが、EC-CUBEはあまりにヒドイので、悪い点を出して具それでも、未だにEC-CUBEの一人勝ち。技術者嫌われ、店長さんに好かれる。面白いものですよね。EC-CUBEに限らず、悪い所も全部てんだろ、生かすもすお好きにどうぞ。ってのがオープンソースだよ。面倒臭がらずに、完璧目指して全部自分でフルビすりゃいいじゃん。いくら無料といえ、オーンソースだとは言え、最低限のデバッEC-CUBEの品質仕事でEC-CUBEを使います[EC]消費税の計算方法と総表示気になる術メモデザインを当て込む立場からのEC-CUBEEC-CUBEで調べ物をしていたらEC-CUBEはここが酷い。最近EC-CUBEのプログラム修正を仕事でしているわけだが、EC-CUBEのプログラムソースは余りにも酷すぎる。開発者が初歩的な英単語を理解していない。になっている。EC-CUBE1.xシリーズとEC-CUBE2.xのプログラムソースが混在している。旧世代の遺物が沢山ファイル名や内部パスの隠蔽が不完全。結局はPHPプログラマがいないとまともなサイトは作れないというオチが。費税の計算方法と総額表示EC-CUBE追記消費税計算と総額表示「超致命的」となっているところの計算は開発者の方が正しいが…たしかにEC-CUBEの仕様は正しいですが、端数処理方法が四捨五入や切り上なぜコミッターになって修正しないの?EC-CUBEリリース初期には色々と対応はしていたのですが、現在メインで使っているソースがEC-CUBEが配布しているものに対しコミッターになって修正してあげればいいんじゃないでしょうか。www.ec-cubeオープンソースなんで、コミッターのスキル・テクニックに委ねられると「開発者が料金計算ができない」での計算は間違ってないけど。今仕事でEC-CUBEのカスタマイズをやっているのですが…。ほんとひどすぎですね。いくらフリーとはいEC-CUBEはバグが多いという貴重な情報をありがとうございます。ところでこの記事で言及されているEC-CUBEのバージョンっていくつでaiueo(EC-CUBEコミッター)aiueo(EC-CUBEコミッター)的には非常に的を得た記事だとEC-CUBEフォーラムでも話題に上げてみようかな。EC-CUBEは色々と問題はあるものの、中小規模で見た目さえ良ければOKなサイ人から聞いた話ですが、ロックオンの社長は「EC-CUBEにバグがなかったり、言ってたみたいだし。あえてこの品質じゃないんでしょうか?それよりも、私はLiveCommerています。が公開後、EC-CUBEのシェアガタ落ちにならなけいですがね。EC-CUBEにはプログラム的を運営している私から見るとEC-CUBEのホームページがもうちょっといい加減なデザインだとよいのですが、EC-CUBEが使えるのかどうか調査するだけでも相当大変で時間がかかります。上に出たプラチナパートナーのA社は、EC-CUBE以外のサービスはやっていないので、EC-CUBEという泥舟に乗った会社な案はもちろんありませんしEC-CUBEは、色んな意味で非常に低なので、当に世の中のゴミだと思います。ホームページのデザインした印象は受けませんが、EC-CUBEのように見た目だけあっただけに、逆に好感が持てます!多言語に対応しているられているという印象です。セミナーで色々な方聞くと、実はEC-CUBEの品質が非常にの中では有名みたいですね。ネットマーケティの知識はそれなりに高いレベルにあります。プログラミングも少しですが実務ます。ネットショップの乗り換えた時に、色々なシステムを徹底的にみましたが、その中でもEC-CUBEの品質はに低いと感じました。、多額の費用投資したあげく、EC-CUBEを使うことは念。大きな損ってしまいました。のズサンな管理体制や根本的ミスを考えると、EC-CUBEに未来はな判断しました。ネットで色々と集めてみると、EC-CUBEはそもそもロック社で販売するシステムとして開発されたが、EC-CUBEはあまりにヒドイので、悪い点を出して具それでも、未だにEC-CUBEの一人勝ち。技術者嫌われ、店長さんに好かれる。面白いものですよね。EC-CUBEに限らず、悪い所も全部てんだろ、生かすもすお好きにどうぞ。ってのがオープンソースだよ。面倒臭がらずに、完璧目指して全部自分でフルビすりゃいいじゃん。いくら無料といえ、オーンソースだとは言え、最低限のデバッEC-CUBEの品質仕事でEC-CUBEを使います[EC]消費税の計算方法と総表示気になる術メモデザインを当て込む立場からのEC-CUBEEC-CUBEで調べ物をしていたらEC-CUBEはここが酷い。最近EC-CUBEのプログラム修正を仕事でしているわけだが、EC-CUBEのプログラムソースは余りにも酷すぎる。開発者が初歩的な英単語を理解していない。になっている。EC-CUBE1.xシリーズとEC-CUBE2.xのプログラムソースが混在している。旧世代の遺物が沢山ファイル名や内部パスの隠蔽が不完全。結局はPHPプログラマがいないとまともなサイトは作れないというオチが。費税の計算方法と総額表示EC-CUBE追記消費税計算と総額表示「超致命的」となっているところの計算は開発者の方が正しいが…たしかにEC-CUBEの仕様は正しいですが、端数処理方法が四捨五入や切り上なぜコミッターになって修正しないの?EC-CUBEリリース初期には色々と対応はしていたのですが、現在メインで使っているソースがEC-CUBEが配布しているものに対しコミッターになって修正してあげればいいんじゃないでしょうか。www.ec-cubeオープンソースなんで、コミッターのスキル・テクニックに委ねられると「開発者が料金計算ができない」での計算は間違ってないけど。今仕事でEC-CUBEのカスタマイズをやっているのですが…。ほんとひどすぎですね。いくらフリーとはいEC-CUBEはバグが多いという貴重な情報をありがとうございます。ところでこの記事で言及されているEC-CUBEのバージョンっていくつでaiueo(EC-CUBEコミッター)aiueo(EC-

CUBEコミッター)的には非常に的を得た記事だとEC-CUBEフォーラムでも話題に上げてみようかな。EC-CUBEは色々と問題はあるものの、中小規模で見た目さえ良ければOKなサイ人から聞いた話ですが、ロックオンの社長は「EC-CUBEにバグがなかったり、言ってたみたいだし。あえてこの品質じゃないんでしょうか?それよりも、私はLiveCommerています。が公開後、EC-CUBEのシェアガタ落ちにならなけいですがね。EC-CUBEにはプログラム的を運営している私から見るとEC-CUBEのホームページがもうちょっといい加減なデザインだとよいのですが、EC-CUBEが使えるのかどうか調査するだけでも相当大変で時間がかかります。上に出たプラチナパートナーのA社は、EC-CUBE以外のサービスはやっていないので、EC-CUBEという泥舟に乗った会社な案はもちろんありませんしEC-CUBEは、色んな意味で非常に低なので、当に世の中のゴミだと思います。ホームページのデザインした印象は受けませんが、EC-CUBEのように見た目だけあっただけに、逆に好感が持てます!多言語に対応しているられているという印象です。セミナーで色々な方聞くと、実はEC-CUBEの品質が非常にの中では有名みたいですね。ネットマーケティの知識はそれなりに高いレベルにあります。プログラミングも少しですが実務ます。ネットショップの乗り換えた時に、色々なシステムを徹底的にみましたが、その中でもEC-CUBEの品質はに低いと感じました。、多額の費用投資したあげく、EC-CUBEを使うことは念。大きな損ってしまいました。のズサンな管理体制や根本的ミスを考えると、EC-CUBEに未来はな判断しました。ネットで色々と集めてみると、EC-CUBEはそもそもロック社で販売するシステムとして開発されたが、EC-CUBEはあまりにヒドイので、悪い点を出して具それでも、未だにEC-CUBEの一人勝ち。技術者嫌われ、店長さんに好かれる。面白いものですよね。EC-CUBEに限らず、悪い所も全部てんだろ、生かすもすお好きにどうぞ。ってのがオープンソースだよ。面倒臭がらずに、完璧目指して全部自分でフルビすりゃいいじゃん。いくら無料といえ、オーンソースだとは言え、最低限のデバッEC-CUBEの品質仕事でEC-CUBEを使います[EC]消費税の計算方法と総表示気になる術メモデザインを当て込む立場からのEC-CUBEEC-CUBEで調べ物をしていたらEC-CUBEはここが酷い。最近EC-CUBEのプログラム修正を仕事でしているわけだが、EC-CUBEのプログラムソースは余りにも酷すぎる。開発者が初歩的な英単語を理解していない。になっている。EC-CUBE1.xシリーズとEC-CUBE2.xのプログラムソースが混在している。旧世代の遺物が沢山ファイル名や内部パスの隠蔽が不完全。結局はPHPプログラマがいないとまともなサイトは作れないというオチが。費税の計算方法と総額表示EC-CUBE追記消費税計算と総額表示「超致命的」となっているところの計算は開発者の方が正しいが…たしかにEC-CUBEの仕様は正しいですが、端数処理方法が四捨五入や切り上なぜコミッターになって修正しないの?EC-CUBEリリース初期には色々と対応はしていたのですが、現在メインで使っているソースがEC-CUBEが配布しているものに対しコミッターになって修正してあげればいいんじゃないでしょうか。www.ec-cubeオープンソースなんで、コミッターのスキル・テクニックに委ねられると「開発者が料金計算ができない」での計算は間違ってないけど。今仕事でEC-CUBEのカスタマイズをやっているのですが…。ほんとひどすぎですね。いくらフリーとはいEC-CUBEはバグが多いという貴重な情報をありがとうございます。ところでこの記事で言及されているEC-CUBEのバージョンっていくつでaiueo(EC-CUBEコミッター)aiueo(EC-CUBEコミッター)的には非常に的を得た記事だとEC-CUBEフォーラムでも話題に上げてみようかな。EC-CUBEは色々と問題はあるものの、中小規模で見た目さえ良ければOKなサイ人から聞いた話ですが、ロックオンの社長は「EC-CUBEにバグがなかったり、言ってたみたいだし。あえてこの品質じゃないんでしょうか?それよりも、私はLiveCommerています。が公開後、EC-CUBEのシェアガタ落ちにならなけいですがね。EC-CUBEにはプログラム的を運営している私から見るとEC-CUBEのホームページがもうちょっといい加減なデザインだとよいのですが、EC-CUBEが使えるのかどうか調査するだけでも相当大変で時間がかかります。上に出たプラチナパートナーのA社は、EC-CUBE以外のサービスはやっていないので、EC-CUBEという泥舟に乗った会社な案はもちろんありませんしEC-CUBEは、色んな意味で非常に低なので、当に世の中のゴミだと思います。ホームページのデザインした印象は受けませんが、EC-CUBEのように見た目だけあっただけに、逆に好感が持てます!多言語に対応しているられているという印象です。セミナーで色々な方聞くと、実はEC-CUBEの品質が非常にの中では有名みたいですね。ネットマーケティの知識はそれなりに高いレベルにあります。プログラミングも少しですが実務ます。ネットショップの乗り換えた時に、色々なシステムを徹底的にみましたが、その中でもEC-CUBEの品質はに低いと感じました。、多額の費用投資したあげく、EC-CUBEを使うことは念。大きな損ってしまいました。のズサンな管理体制や根本的ミスを考えると、EC-CUBEに未来はな判断しました。ネットで色々と集めてみると、EC-CUBEはそもそもロック社で販売するシステムとして開発されたが、EC-CUBEはあまりにヒドイので、悪い点を出して具それでも、未だにEC-CUBEの一人勝ち。技術者嫌われ、店長さんに好かれる。面白いものですよね。EC-CUBEに限らず、悪い所も全部てんだろ、生かすもすお好きにどうぞ。ってのがオープンソースだよ。面倒臭がらずに、完璧目指して全部自分でフルビすりゃいいじゃん。いくら無料といえ、オーンソースだとは言え、最低限のデバッEC-CUBEの品質仕事でEC-CUBEを使います[EC]消費税の計算方法と総表示気になる術メモデザインを当て込む立場からのEC-CUBEEC-CUBEで調べ物をしていたらEC-CUBEはここが酷い。最近EC-CUBEのプログラム修正を仕事でしているわけだが、EC-CUBEのプログラムソースは余りにも酷すぎる。開発者が初歩的な英単語を理解していない。になっている。EC-CUBE1.xシリーズとEC-CUBE2.xのプログラムソースが混在している。旧世代の遺物が沢山ファイル名や内部パスの隠蔽が不完全。結局はPHPプログラマがいないとまともなサイトは作れないというオチが。費税の計算方法と総額表示EC-CUBE追記消費税計算と総額表示「超致命的」となっているところの計算は開発者の方が正しいが…たしかにEC-CUBEの仕様は正しいですが、端数処理方法が四捨五入や切り上なぜコミッターになって修正しないの?EC-CUBEリリース初期には色々と対応はしていたのですが、現在メインで使っているソースがEC-CUBEが配布しているものに対しコミッターになって修正してあげればいいんじゃないでしょうか。www.ec-cubeオープンソースなんで、コミッターのスキル・テクニックに委ねられると「開発者が料金計算ができない」での計算は間違ってないけど。今仕事でEC-CUBEのカスタマイズをやっているのですが…。ほんとひどすぎですね。いくらフリーとはいEC-CUBEはバグが多いという貴重な情報をありがとうございます。ところでこの記事で言及されているEC-CUBEのバージョンっていくつでaiueo(EC-CUBEコミッター)aiueo(EC-CUBEコミッター)的には非常に的を得た記事だとEC-CUBEフォーラムでも話題に上げてみようかな。EC-CUBEは色々と問題はあるものの、中小規模で見た目さえ良ければOKなサイ人から聞いた話ですが、ロックオンの社長は「EC-CUBEにバグがなかったり、言ってたみたいだし。あえてこの品質じゃないんでしょうか?それよりも、私はLiveCommerています。が公開後、EC-CUBEのシェアガタ落ちにならなけいですがね。EC-CUBEにはプログラム的を運営している私から見るとEC-CUBEのホームページがもうちょっといい加減なデザインだとよいのですが、EC-CUBEが使えるのかどうか調査するだけでも相当大変で時間がかかります。上に出たプラチナパートナーのA社は、EC-CUBE以外のサービスはやっていないので、EC-CUBEという泥舟に乗った会社な案はもちろんありませんしEC-CUBEは、色んな意味で非常に低なので、当に世の中のゴミだと思います。ホームページのデザインした印象は受けませんが、EC-CUBEのように見た目だけあっただけに、逆に好感が持てます!多言語に対応しているられているという印象です。セミナーで色々な方聞くと、実はEC-CUBEの品質が非常にの中では有名みたいですね。ネットマーケティの知識はそれなりに高いレベルにあります。プログラミングも少しですが実務ます。ネットショップの乗り換えた時に、色々なシステムを徹底的にみましたが、その中でもEC-CUBEの品質はに低いと感じました。、多額の費用投資したあげく、EC-CUBEを使うことは念。大きな損ってしまいました。のズサンな管理体制や根本的ミスを考えると、EC-
nCUBEに未来はな判断しました。ネットで色々と集めてみると、EC-CUBEはそもそもロック社で販売するシステムとして開発されたが、EC-CUBEはあまりにヒドイので、悪い点を出して具それでも、未だにEC-CUBEの一人勝ち。技術者嫌われ、店長さんに好かれる。面白いものですよね。EC-CUBEに限らず、悪い所も全部てんだろ、生かすもすお好きにどうぞ。ってのがオープンソースだよ。面倒臭がらずに、完璧目指して全部自分でフルビすりゃいいじゃん。いくら無料といえ、オーンソースだとは言え、最低限のデバッEC-CUBEの品質仕事でEC-CUBEを使います[EC]消費税の計算方法と総表示気になる術メモデザインを当て込む立場からのEC-CUBEEC-CUBEで調べ物をしていたらEC-CUBEはここが酷い。最近EC-CUBEのプログラム修正を仕事でしているわけだが、EC-CUBEのプログラムソースは余りにも酷すぎる。開発者が初歩的な英単語を理解していない。になっている。EC-CUBE1.xシリーズとEC-CUBE2.xのプログラムソースが混在している。旧世代の遺物が沢山ファイル名や内部パスの隠蔽が不完全。結局はPHPプログラマがいないとまともなサイトは作れないというオチが。費税の計算方法と総額表示EC-CUBE追記消費税計算と総額表示「超致命的」となっているところの計算は開発者の方が正しいが…たしかにEC-CUBEの仕様は正しいですが、端数処理方法が四捨五入や切り上なぜコミッターになって修正しないの?EC-CUBEリリース初期には色々と対応はしていたのですが、現在メインで使っているソースがEC-CUBEが配布しているものに対しコミッターになって修正してあげればいいんじゃないでしょうか。www.ec-cubeオープンソースなんで、コミッターのスキル・テクニックに委ねられると「開発者が料金計算ができない」での計算は間違ってないけど。今仕事でEC-CUBEのカスタマイズをやっているのですが…。ほんとひどすぎですね。いくらフリーとはいEC-CUBEはバグが多いという貴重な情報をありがとうございます。ところでこの記事で言及されているEC-CUBEのバージョンっていくつでaiueo(EC-CUBEコミッター)aiueo(EC-CUBEコミッター)的には非常に的を得た記事だとEC-CUBEフォーラムでも話題に上げてみようかな。EC-CUBEは色々と問題はあるものの、中小規模で見た目さえ良ければOKなサイ人から聞いた話ですが、ロックオンの社長は「EC-CUBEにバグがなかったり、言ってたみたいだし。あえてこの品質じゃないんでしょうか?それよりも、私はLiveCommerています。が公開後、EC-CUBEのシェアガタ落ちにならなけいですがね。EC-CUBEにはプログラム的を運営している私から見るとEC-CUBEのホームページがもうちょっといい加減なデザインだとよいのですが、EC-CUBEが使えるのかどうか調査するだけでも相当大変で時間がかかります。上に出たプラチナパートナーのA社は、EC-CUBE以外のサービスはやっていないので、EC-CUBEという泥舟に乗った会社な案はもちろんありませんしEC-CUBEは、色んな意味で非常に低なので、当に世の中のゴミだと思います。ホームページのデザインした印象は受けませんが、EC-CUBEのように見た目だけあっただけに、逆に好感が持てます!多言語に対応しているられているという印象です。セミナーで色々な方聞くと、実はEC-CUBEの品質が非常にの中では有名みたいですね。ネットマーケティの知識はそれなりに高いレベルにあります。プログラミングも少しですが実務ます。ネットショップの乗り換えた時に、色々なシステムを徹底的にみましたが、その中でもEC-CUBEの品質はに低いと感じました。、多額の費用投資したあげく、EC-CUBEを使うことは念。大きな損ってしまいました。のズサンな管理体制や根本的ミスを考えると、EC-CUBEに未来はな判断しました。ネットで色々と集めてみると、EC-CUBEはそもそもロック社で販売するシステムとして開発されたが、EC-CUBEはあまりにヒドイので、悪い点を出して具それでも、未だにEC-CUBEの一人勝ち。技術者嫌われ、店長さんに好かれる。面白いものですよね。EC-CUBEに限らず、悪い所も全部てんだろ、生かすもすお好きにどうぞ。ってのがオープンソースだよ。面倒臭がらずに、完璧目指して全部自分でフルビすりゃいいじゃん。いくら無料といえ、オーンソースだとは言え、最低限のデバッEC-CUBEの品質仕事でEC-CUBEを使います[EC]消費税の計算方法と総表示気になる術メモデザインを当て込む立場からのEC-CUBEEC-CUBEで調べ物をしていたらEC-CUBEはここが酷い。最近EC-CUBEのプログラム修正を仕事でしているわけだが、EC-CUBEのプログラムソースは余りにも酷すぎる。開発者が初歩的な英単語を理解していない。になっている。EC-CUBE1.xシリーズとEC-CUBE2.xのプログラムソースが混在している。旧世代の遺物が沢山ファイル名や内部パスの隠蔽が不完全。結局はPHPプログラマがいないとまともなサイトは作れないというオチが。費税の計算方法と総額表示EC-CUBE追記消費税計算と総額表示「超致命的」となっているところの計算は開発者の方が正しいが…たしかにEC-CUBEの仕様は正しいですが、端数処理方法が四捨五入や切り上なぜコミッターになって修正しないの?EC-CUBEリリース初期には色々と対応はしていたのですが、現在メインで使っているソースがEC-CUBEが配布しているものに対しコミッターになって修正してあげればいいんじゃないでしょうか。www.ec-cubeオープンソースなんで、コミッターのスキル・テクニックに委ねられると「開発者が料金計算ができない」での計算は間違ってないけど。今仕事でEC-CUBEのカスタマイズをやっているのですが…。ほんとひどすぎですね。いくらフリーとはいEC-CUBEはバグが多いという貴重な情報をありがとうございます。ところでこの記事で言及されているEC-CUBEのバージョンっていくつでaiueo(EC-CUBEコミッター)aiueo(EC-CUBEコミッター)的には非常に的を得た記事だとEC-CUBEフォーラムでも話題に上げてみようかな。EC-CUBEは色々と問題はあるものの、中小規模で見た目さえ良ければOKなサイ人から聞いた話ですが、ロックオンの社長は「EC-CUBEにバグがなかったり、言ってたみたいだし。あえてこの品質じゃないんでしょうか?それよりも、私はLiveCommerています。が公開後、EC-CUBEのシェアガタ落ちにならなけいですがね。EC-CUBEにはプログラム的を運営している私から見るとEC-CUBEのホームページがもうちょっといい加減なデザインだとよいのですが、EC-CUBEが使えるのかどうか調査するだけでも相当大変で時間がかかります。上に出たプラチナパートナーのA社は、EC-CUBE以外のサービスはやっていないので、EC-CUBEという泥舟に乗った会社な案はもちろんありませんしEC-CUBEは、色んな意味で非常に低なので、当に世の中のゴミだと思います。ホームページのデザインした印象は受けませんが、EC-CUBEのように見た目だけあっただけに、逆に好感が持てます!多言語に対応しているられているという印象です。セミナーで色々な方聞くと、実はEC-CUBEの品質が非常にの中では有名みたいですね。ネットマーケティの知識はそれなりに高いレベルにあります。プログラミングも少しですが実務ます。ネットショップの乗り換えた時に、色々なシステムを徹底的にみましたが、その中でもEC-CUBEの品質はに低いと感じました。、多額の費用投資したあげく、EC-CUBEを使うことは念。大きな損ってしまいました。のズサンな管理体制や根本的ミスを考えると、EC-CUBEに未来はな判断しました。ネットで色々と集めてみると、EC-CUBEはそもそもロック社で販売するシステムとして開発されたが、EC-CUBEはあまりにヒドイので、悪い点を出して具それでも、未だにEC-CUBEの一人勝ち。技術者嫌われ、店長さんに好かれる。面白いものですよね。EC-CUBEに限らず、悪い所も全部てんだろ、生かすもすお好きにどうぞ。ってのがオープンソースだよ。面倒臭がらずに、完璧目指して全部自分でフルビすりゃいいじゃん。いくら無料といえ、オーンソースだとは言え、最低限のデバッEC-CUBEの品質仕事でEC-CUBEを使います[EC]消費税の計算方法と総表示気になる術メモデザインを当て込む立場からのEC-CUBEEC-CUBEで調べ物をしていたらEC-CUBEはここが酷い。最近EC-CUBEのプログラム修正を仕事でしているわけだが、EC-CUBEのプログラムソースは余りにも酷すぎる。開発者が初歩的な英単語を理解していない。になっている。EC-CUBE1.xシリーズとEC-CUBE2.xのプログラムソースが混在している。旧世代の遺物が沢山ファイル名や内部パスの隠蔽が不完全。結局はPHPプログラマがいないとまともなサイトは作れないというオチが。費税の計算方法と総額表示EC-CUBE追記消費税計算と総額表示「超致命的」となっているところの計算は開発者の方が正しいが…たしかにEC-CUBEの仕様は正しいですが、端数処理方法が四捨五入や切り上なぜコミッターになって修正しないの?EC-CUBEリリース初期には色々と対応はしていたのですが、現在メインで使っているソースがEC-
nCUBEが配布しているものに対しコミッターになって修正してあげればいいんじゃないでしょうか。www.ec-cubeオープンソースなんで、コミッターのスキル・テクニックに委ねられると「開発者が料金計算ができない」での計算は間違ってないけど。今仕事でEC-CUBEのカスタマイズをやっているのですが…。ほんとひどすぎですね。いくらフリーとはいEC-CUBEはバグが多いという貴重な情報をありがとうございます。ところでこの記事で言及されているEC-CUBEのバージョンっていくつでaiueo(EC-CUBEコミッター)aiueo(EC-CUBEコミッター)的には非常に的を得た記事だとEC-CUBEフォーラムでも話題に上げてみようかな。EC-CUBEは色々と問題はあるものの、中小規模で見た目さえ良ければOKなサイ人から聞いた話ですが、ロックオンの社長は「EC-CUBEにバグがなかったり、言ってたみたいだし。あえてこの品質じゃないんでしょうか?それよりも、私はLiveCommerています。が公開後、EC-CUBEのシェアガタ落ちにならなけいですがね。EC-CUBEにはプログラム的を運営している私から見るとEC-CUBEのホームページがもうちょっといい加減なデザインだとよいのですが、EC-CUBEが使えるのかどうか調査するだけでも相当大変で時間がかかります。上に出たプラチナパートナーのA社は、EC-CUBE以外のサービスはやっていないので、EC-CUBEという泥舟に乗った会社な案はもちろんありませんしEC-CUBEは、色んな意味で非常に低なので、当に世の中のゴミだと思います。ホームページのデザインした印象は受けませんが、EC-CUBEのように見た目だけあっただけに、逆に好感が持てます!多言語に対応しているられているという印象です。セミナーで色々な方聞くと、実はEC-CUBEの品質が非常にの中では有名みたいですね。ネットマーケティの知識はそれなりに高いレベルにあります。プログラミングも少しですが実務ます。ネットショップの乗り換えた時に、色々なシステムを徹底的にみましたが、その中でもEC-CUBEの品質はに低いと感じました。、多額の費用投資したあげく、EC-CUBEを使うことは念。大きな損ってしまいました。のズサンな管理体制や根本的ミスを考えると、EC-CUBEに未来はな判断しました。ネットで色々と集めてみると、EC-CUBEはそもそもロック社で販売するシステムとして開発されたが、EC-CUBEはあまりにヒドイので、悪い点を出して具それでも、未だにEC-CUBEの一人勝ち。技術者嫌われ、店長さんに好かれる。面白いものですよね。EC-CUBEに限らず、悪い所も全部てんだろ、生かすもすお好きにどうぞ。ってのがオープンソースだよ。面倒臭がらずに、完璧目指して全部自分でフルビすりゃいいじゃん。いくら無料といえ、オーンソースだとは言え、最低限のデバッEC-CUBEの品質仕事でEC-CUBEを使います[EC]消費税の計算方法と総表示気になる術メモデザインを当て込む立場からのEC-CUBEEC-CUBEで調べ物をしていたら

会員ランクで価格を変える

価格を数種用意する場合、値引きする場合、書き方は違うが、表示対応、計算対応は同じところを変更すれば良い。

①カートの計算で会員価格と通常価格の識別
/data/class/helper/SC_Helper_DB.php
366行目付近

// 価格の登録
//if ($arrData['price02'] != "") {
//    $objCartSess-&gt;setProductValue($arrCart[$i]['id'], 'price', $arrData['price02']);
//    $objPage-&gt;arrProductsClass[$cnt]['uniq_price'] = $arrData['price02'];
//} else {
//    $objCartSess-&gt;setProductValue($arrCart[$i]['id'], 'price', $arrData['price01']);
//    $objPage-&gt;arrProductsClass[$cnt]['uniq_price'] = $arrData['price01'];
//}
if($_SESSION[customer][status] == "3"){
    $objCartSess-&gt;setProductValue($arrCart[$i]['id'], 'price', $arrData['price02']);
    $objPage-&gt;arrProductsClass[$cnt]['uniq_price'] = $arrData['price02'];
} else {
    $objCartSess-&gt;setProductValue($arrCart[$i]['id'], 'price', $arrData['price01']);
    $objPage-&gt;arrProductsClass[$cnt]['uniq_price'] = $arrData['price01'];
}

②カートページの表示調整
/data/Smarty/templates/default/cart/index.tpl
小計、合計には「SC_Helper_DB.php」の計算結果が反映するが、単価は「confirm.tpl」で調整しなければならない。

③決済最終確認ページ
/data/Smarty/templates/default/shopping/confirm.tpl
小計、合計には「SC_Helper_DB.php」の計算結果が反映するが、単価は「confirm.tpl」で調整しなければならない。

④受注管理で確認して、反映されていれば成功!

新規に作ったページが編集できない

キャッシュファイルのパーミッションの問題のようです。
管理画面から新規ファイルを作ると owner:apache, mode:644 になってしまい、編集ができない。
FTPで操作すれば回避できるが、毎回のことなのでとても面倒だ。
「umask(0);」でCUBE本体に変更をかけてみよう!

子カテゴリを指定して記事を表示する

&lt;?php query_posts($query_string . "<span style="color: #3366ff;">&amp;cat=123</span>=info&amp;showposts=8&amp;order=DESC"); ?&gt;

子カテゴリを指定しても、親カテゴリを抽出してしまう。

&lt;?php query_posts($query_string . "<span style="color: #3366ff;">&amp;category_name=info</span>&amp;showposts=8&amp;order=DESC"); ?&gt;

「category_name」を指定すると子カテゴリで抽出できた。

新着商品(スターテスアイコンと連動)

会員価格ありの場合
このソースは改善の余地があるのですが、そのうち…

&lt;!--▼ 新着商品ここまで--&gt;

&lt;!--{php}--&gt;
    // Config読込み
    include $_SERVER[DOCUMENT_ROOT]."/data/install.php";
    //------------------------------------------------------
    // MySQLに接続開始
        $db = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD);
        // mysql_query("SET NAMES utf8");
        // DB指定(確認用)
        if(!mysql_select_db(DB_NAME, $db)){
            // echo "&lt;div style=\"color:red;\"&gt;\nメインデータベースに接続できません。&lt;/div&gt;\n";
        }elseif(mysql_select_db(DB_NAME, $db)){
            // echo "&lt;div style=\"color:green;\"&gt;\nDB指定OK!(".DB_NAME.")&lt;/div&gt;\n\n\n";
        }
    //------------------------------------------------------
&lt;!--{/php}--&gt;

    &lt;div id="recomendarea"&gt;
        &lt;h2&gt;
        &lt;img src="&lt;!--{$TPL_DIR}--&gt;img/top/osusume.jpg" width="500" height="21" alt="おすすめ情報" /&gt;
        &lt;/h2&gt;
        
        &lt;div class="recomendblock"&gt;
            &lt;!--{php}--&gt;
            
            // Config読込み
            include $_SERVER[DOCUMENT_ROOT]."/data/install.php";
            //------------------------------------------------------
            // MySQLに接続開始
                $db = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD);
                // mysql_query("SET NAMES utf8");
                // DB指定(確認用)
                if(!mysql_select_db(DB_NAME, $db)){
                    // echo "&lt;div style=\"color:red;\"&gt;\nメインデータベースに接続できません。&lt;/div&gt;";
                }elseif(mysql_select_db(DB_NAME, $db)){
                    //    echo "&lt;div style=\"color:green;\"&gt;\nDB指定OK!(".DB_NAME.")&lt;/div&gt;";
                }
            //------------------------------------------------------
            
            // 該当商品の抽出
            $sql="SELECT * FROM `dtb_products` WHERE `status` = '1'";
            $rs = mysql_query($sql,$db);
            $arr_product_id = array();
            while($item = mysql_fetch_assoc($rs)){
                
                $arr_product_flag = (str_split($item[product_flag]));
                
                if($arr_product_flag [0] == 1){
                    // echo $item[name];
                    array_push ($arr_product_id, $item[product_id]);
                }
            }
            // var_dump($arr_product_id);
            
            // 該当商品の表示
            $i = 0;
            while($arr_product_id[$i] != ""){
                
                // dtb_products
                $sql2="SELECT * FROM `dtb_products` WHERE `product_id` = '$arr_product_id[$i]'";
                $rs2 = mysql_query($sql2,$db);
                $item2 = mysql_fetch_assoc($rs2);
                // dtb_products_class
                $sql3="SELECT * FROM `dtb_products_class` WHERE `product_id` = '$arr_product_id[$i]'";
                $rs3 = mysql_query($sql3,$db);
                $item3 = mysql_fetch_assoc($rs3);
                
                $price01 = $item3[price01] * 1.05;
                $price01 = number_format($price01);
                $price02 = $item3[price02] * 1.05;
                $price02 = number_format($price02);
                
                // echo '&lt;pre&gt;'; var_dump($item3); echo '&lt;/pre&gt;';
                
                echo '&lt;div class="single"&gt;
                        &lt;div class="img"&gt;
                            &lt;a href="/products/detail.php?product_id='.$arr_product_id[$i].'"&gt;
                                &lt;img src="/upload/save_image/'.$item2[main_list_image].'" /&gt;
                            &lt;/a&gt;
                        &lt;/div&gt;
                        &lt;h3&gt;
                            &lt;a href="/products/detail.
php?product_id='.$arr_product_id[$i].'"&gt;'.$item2[name]
.'&lt;/a&gt;
                        &lt;/h3&gt;
                        &lt;p class="comments"&gt;'.$item2[main_list_comment].'&lt;/p&gt;
                        &lt;div class="price"&gt;通常価格:&lt;span class="red"&gt;'.$price01.'&lt;/span&gt;円 (税込)
                        &lt;/div&gt;
                        &lt;div class="price"&gt;会員価格:&lt;span class="red"&gt;'.$price02.'&lt;/span&gt;円 (税込)
                        &lt;/div&gt;
                        &lt;/p&gt;
                &lt;/div&gt;&lt;!-- /single --&gt;
                ';
                $i ++;
            }
            
            // 価格
            $sql1="SELECT * FROM `dtb_products_class` WHERE `product_class_id` = '55'";
            $rs1 = mysql_query($sql1,$db);
            $item1 = mysql_fetch_assoc($rs1);
            
            $price01 = $item1[price01];
            $price01 = ($price01 * 1.05);
            $price01 = number_format($price01);
            
            $price02 = $item1[price02];
            $price02 = ($price02 * 1.05);
            $price02 = number_format($price02);
            
            &lt;!--{/php}--&gt;
        &lt;/div&gt;
    &lt;/div&gt;

&lt;!--▲ 新着商品ここまで--&gt;

特定カテゴリを非表示にする。

category.tpl(サイドブロック)
<!--商品カテゴリーここから-->
<h2>
    <img src="<!--{$TPL_DIR}-->/img/side/title_cat.jpg" width="220" height="30" alt="商品カテゴリー" />
</h2>
<div id="categoryarea">
    <ul id="categorytree">
    <!--{assign var=preLev value=1}-->
    <!--{assign var=firstdone value=0}-->
    <!--{section name=cnt loop=$arrTree}-->
    <!--{* 表示フラグがTRUEなら表示 *}-->
    <!--{* if $arrTree&#91;cnt&#93;.display == 1 *}-->
    <span style="color: #3366ff;"><!--{if $arrTree&#91;cnt&#93;.category_id != 18}--></span>
    <!--{assign var=level value=`$arrTree&#91;cnt&#93;.level`}-->
    <!--{assign var=levdiff value=`$level-$preLev`}-->
        <!--{if $levdiff > 0}-->
            <ul>
        <!--{elseif $levdiff == 0 && $firstdone == 1}-->
            </li>
        <!--{elseif $levdiff < 0}-->
        <!--{section name=d loop=`$levdiff*-1`}-->
            </li>
            </ul>
        <!--{/section}-->
        </li>
        <!--{/if}-->
    <li class="level<!--{$level}--><!--{if in_array($arrTree&#91;cnt&#93;.category_id, $tpl_category_id) }--> onmark<!--{/if}-->"><a href="<!--{$smarty.const.URL_DIR}-->products/list.php?category_id=<!--{$arrTree&#91;cnt&#93;.category_id}-->"<!--{if in_array($arrTree&#91;cnt&#93;.category_id, $tpl_category_id) }--> class="onlink"<!--{/if}-->><!--{$arrTree&#91;cnt&#93;.category_name|escape}-->(<!--{$arrTree&#91;cnt&#93;.product_count|default:0}-->)</a>
    <!--{if $firstdone == 0}--><!--{assign var=firstdone value=1}--><!--{/if}-->
    <!--{assign var=preLev value=`$level`}-->
    <!--{* /if *}-->
    <!--{* セクションの最後に閉じタグを追加 *}-->
    <!--{if $smarty.section.cnt.last}-->
        <!--{if $preLev-1 > 0 }-->
        <!--{section name=d loop=`$preLev-1`}-->
            </li>
        </ul>
        <!--{/section}-->
        </li>
        <!--{else}-->
        </li>
        <!--{/if}-->
    <span style="color: #3366ff;"><!--{/if}--></span>
    <!--{/if}-->
    <!--{/section}-->
    </ul>
</div>
<!--商品カテゴリーここまで-->





一覧ページは商品IDで非表示
<!--{section name=cnt loop=$arrProducts}-->
<!--{assign var=id value=$arrProducts&#91;cnt&#93;.product_id}-->
<!--{if $arrProducts&#91;cnt&#93;.product_id != 7}-->
...省略
<!--{/if}-->
<!--{/section}-->

会員登録のカスタマイズ

会員ランク[dtb_customer.status]の初期値を任意に操作する。

/data/class/pages/entry/LC_Page_Entry.php
L: 621

$arrRegist["status"] = "2";				// 本会員

この辺を変更する。

// 条件により会員ランクを分ける
if(条件1){
    $sqlval['status'] = '3';
}elseif(条件2){
   $sqlval['status'] = '4';
}

※ 「status = 1」は仮登録会員用として予約済み!

受注管理ページの変数

Smarty変数(配列)をphpに渡す。

/data/Smarty/templates/default/admin/order/index.tpl

global $objPage;
$hoge = ($objPage->arrResults);
var_dump($hoge);
これで配列が見える

global $objPage;
$hoge = ($objPage->arrResults);
$hoge_customer_id = $hoge[$aa][customer_id];

ループなので、カウントをとって「$aa」に代入
これで欲しい変数が見える!

EC-CUBEでカスタマイズになるのかどうか判らない

EC-CUBEでカスタマイズになるのかどうか判らない
というお問い合わせが多いです。

EC-CUBEの機能一覧
http://www.ec-cube.net/product/function.php

EC-CUBEのデモサイト
http://www.ec-cube.net/product/demo.php#pc

その他の注意点

1)TOPページ
弄りがいがあるページです。ブロック単位でのカスタマイズ希望が多いです。

2)検索機能
しょぼいです。基本設計からおかしいので「検索機能・一覧表示機能」を作り変えなければまともな検索は期待できません。

3)会員登録
項目を変える場合、モジュールファイルやデータベースの変更が必須です。

4)商品一覧
カスタマイズの可能性は極めて少ないです。

5)商品詳細
・画像
・商品名
・商品コード
・価格
・説明文
・カテゴリ
・メーカー
・在庫
で構成されます。
項目を増やす場合は、モジュールファイルやデータベースの変更が必須です。

6)買い物カゴ
カートから決済までのページは弄らないほうが無難です。
最も多いのは
「次へ」ボタンの表記を変えるなどです。他のページと流用が多いので、そのページだけに合うように変更することは避けたほうが無難です。

7)Myページ
変更のご依頼は、極めて少ないです。

カスタマイズを見分けるには?

1)機能を熟知していない
デザインやディレクション担当の方が機能を熟知していないため、カスタマイズかどうか判らないことが多いようです。
「機能一覧」を読んでもなかなか理解できないでしょう。
「デモサイト」を実際に使ってみてください。

2)カスタマイズを見分けるコツ
デザインや打ち合わせのときに「この機能はあるのかな?」と想像してください。
それで判らなければ、あなたにはEC-CUBEを扱うことは不可能です。
それでも、EC-CUBEを必要とするならば、お手伝いいたします。

3)基本機能がわかりません
という質問も多いです。言葉で説明しても、実際に使ってみるのとは感じ方が違います。
使って練習するのがもっとも早道です。
それが面倒な場合はカスタマイズがあっても無くても一律「込み込み料金」で承ります。
割高のようですが、本当は割安です。

4)安くて安心なご依頼方法
「カスタマイズがないから安く製作して欲しい」というご要望が多いです。
本当にカスタマイズがなかった事例は無に等しいです。
何らかのカスタマイズが含まれるならば「込み込み料金」がお勧めです。

カスタマイズと言うのは、細かなものでも一項目あたり数万円です。
2~3つのカスタマイズが含まれれば、カスタマイズ料金だけで10万円を超えます。
「込み込み料金」の場合、30万円相応までのカスタマイズ込みで一律15万円です。
(決済周りの複雑な改変を除く)
カスタマイズがない場合「損をする」とお考えならば、カスタマイズ無しのデザインをしたつもりで、カスタマイズ費用をお支払いください。たぶん15万円は越えてしまうと思います。