OpenPNE でDBに接続

({php})
include OPENPNE_PATH.'config.php';
$db_array = $GLOBALS[_OPENPNE_DSN_LIST];
$db_array = $db_array[main][dsn];
// echo '<pre>'; var_dump($db_array); echo '</pre>';

//------------------------------------------------------
// MySQLに接続開始
	$db = mysql_connect($db_array[hostspec],$db_array[username],$db_array[password]);
	mysql_query("SET NAMES utf8");
	// DB指定(確認用)
	if(!mysql_select_db($db_array[database], $db)){
		echo "<div style=\"color:red;\">\nメインデータベースに接続できません。</div>\n";
	}elseif(mysql_select_db($db_array[database], $db)){
		// echo "<div style=\"color:green;\">\nDB指定OK!(".DB_NAME.")</div>\n\n\n";
	}
//------------------------------------------------------

// ↓一例です
// 自分のID
$c_member_id = $GLOBALS['AUTH']->uid();
// echo $c_member_id;

// 自分の性別
$sql5 = "SELECT * FROM `c_member_profile` WHERE `c_member_id` = '$c_member_id' AND `c_profile_id` = '1'";
$rs5 = mysql_query($sql5,$db);
$item5 = mysql_fetch_assoc($rs5);
({/php})

WordPressで記事一覧の文字数を変更する

WordPressで抜粋(the_excerpt)の文字数を変更する

で出来るはずと思いきや、2倍と文字はだめらしい。

1)標準装備のWP Multibyte Patchプラグインを有効化する。

2)wp-content/plugins/wp-multibyte-patchの中のwpmp-config-sample.phpをwpmp-config.phpにリネーム。

このファイルを編集すれば表示文字数が変更できる。

bbpressでプロファイルのフォームを並べ替える

「プロフィール編集のフォーム」を変更するには”function bb_profile_data_form”を編集する。

/bb-includes/functions.bb-template.php
L:2400付近

<table id="userinfo">
<?php
	if ( is_array($profile_info_keys) ) :
		$bb_current_id = bb_get_current_user_info( 'id' );
		
		// フォームの配列を置き換える
		echo '<pre>★'; var_dump($profile_info_keys); echo '</pre>'; // ←元の配列を表示してみる
		
		// 元の配列を参考に希望の配列と置き換える
		$profile_info_keys['first_name']['0'] = '';
		$profile_info_keys['first_name']['1'] = 'first_name';
		$profile_info_keys['last_name']['0'] = '';
		$profile_info_keys['last_name']['1'] = 'last_name';
		$profile_info_keys['display_name']['0'] = '';
		$profile_info_keys['display_name']['1'] = 'Display name as';
		$profile_info_keys['from']['0'] = '';
		$profile_info_keys['from']['1'] = 'Location';
		$profile_info_keys['user_email']['0'] = '';
		$profile_info_keys['user_email']['1'] = 'Email';
		$profile_info_keys['user_email']['2'] = 'email';
		$profile_info_keys['user_url']['0'] = '';
		$profile_info_keys['user_url']['1'] = 'Website';
		$profile_info_keys['user_url']['2'] = 'url';
		$profile_info_keys['occ']['0'] = '';
		$profile_info_keys['occ']['1'] = 'Occupation';
		$profile_info_keys['occ']['2'] = 'role';
		$profile_info_keys['interest']['0'] = '';
		$profile_info_keys['interest']['1'] = 'Interests';

memo

$profile_info_keys[‘*’][‘1,2,3’]
1:null
2:表示名
3:データの型

HTMLの整形は2483行目付近

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で画像を背景に敷いているときは、パスのお読み変えも必要です。
その辺のノウハウは、皆さんがんばって挑戦してみて下さい。

wordpress の管理画面でメニューを自由に操るヒント

/wp-admin/admin-header.php の190行目付近
require(ABSPATH . ‘wp-admin/menu-header.php’);

「menu-header.php」と書いてあるが、サイドメニューのことだ!
ファイル構成的にはヘッダーファイルに含まれるということらしいが、紛らわしい。

wordpressでカスタムフィールドを使いすぎると

カスタムフィールドテンプレートなど便利なプラグインもありますが、
項目(フィールド)を沢山設けると動作がおかしくなることがあります。
原因はデータベースに登録するSQL分が長くなり、サーバーが全てをうまく処理できなくなってしまいます。
ほとんどのサーバーでは、SQL文の長さには制限があります。

カスタムフィールドのDBテーブルは柔軟性のある構造になっています。
この柔軟性な構造のため、複雑な長い SQL を発行します。
一つのカスタムフィールドにつき一つの JOIN(結合)が必要です。
5つのフィールドを参照しようとすると、5つの JOIN(結合)が必要になります。
JOIN は著しくパフォーマンスを低下させます。

Codex関数で表示すると、上記のようなことになりますので、
生のPHPでデータベースから直接取り出すことで回避できます。

WordPress 製作に便利なプラグイン

Disable Revisions and Autosave

http://exper.3drecursions.com/2008/07/25/disable-revisions-and-autosave-plugin/
WordPressのリビジョンと自動保存を停止させる。

Delete-Revision

http://wordpress.org/extend/plugins/delete-revision/
既にたまっているリビジョンを削除するプラグインです。

Duplicate Post

http://wordpress.org/extend/plugins/duplicate-post/
記事の複製プラグインです。テスト投稿などに使います。投稿を楽に増やせます。

参考

WordPressで肥大し続けるリビジョンを管理してすっきりさせる方法
 http://whitehatseo.jp/delete-revision-and-disable-revisions/
サーバ圧迫回避!WordPressのリビジョン機能の停止と過去分削除
 http://05step.com/2012/08/06/disable-delete-revision/

運用に便利なプラグイン

all-in-one-seo-pack
db-cache-reloaded-fix
google-sitemap-generator
sniplets
wordpress-importer

syntax-highlighter

バージョン3よりもバージョン2が好みの方も多いです。
なぜかって?
lightbox + syntax-highlighterバージョン3
の場合、lightboxが動きません。
http://wordpress.org/extend/plugins/syntax-highlighter/developers/

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ファイルにしましたので、後からの変更はどなたでも簡単にできます。

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

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

zencart のテンプレートと編集箇所

▽ HTMLの大枠
/includes/templates/template_default/common/tpl_main_page.php

▽ サイド各ボックスのデザイン
/indonesiago.orgs/templates/classic/common/tpl_box_default_left.php

▽ サイドボックスの中身
/includes/templates/template_default/sideboxes/*.php

▽ カテゴリ(商品一覧)ページ上部のサブカテゴリ
/indonesiago.orgs/templates/template_default/common/tpl_columnar_display.php

▽ フッターカテゴリ
/includes/templates/template_default/templates/tpl_modules_categories_tabs.php

▽ サイド・インフォメーション
/includes/templates/template_default/sideboxes/tpl_information.php

▽ 新着商品の外枠
/includes/templates/template_default/templates/tpl_modules_whats_new.php

▽ 新着商品の中身
/includes/templates/template_default/common/tpl_columnar_display.php

▽ 新着商品のもっと中身
/includes/modules/new_products.php

▽ 商品一覧の中身
/includes/modules/product_listing.php

▽商品一覧の並びレイアウト
/indonesiago.orgs/templates/template_default/common/tpl_tabular_display.php

▽ 商品一覧(カテゴリ一覧)
/indonesiago.orgs/templates/template_default/templates/tpl_index_product_list.php

▽ (サブカテゴリ一覧)
/indonesiago.orgs/templates/template_default/templates/tpl_index_categories.php

▽ 商品詳細
/includes/templates/template_default/templates/tpl_product_info_display.php

▽ 商品画像
/includes/templates/template_default/templates/tpl_modules_main_product_image.php

▽ submitボタンを画像からデフォルトにする(モバイル対応)
/includes/functions/html_output.php

▽ レフトカラム
/includes/modules/column_left.php

▽管理画面
/admin/*.*
/admin/includes/*.*

▽ TOPページとそれ以外の振り分け
if ( ($_GET[main_page] == “index”) && ($_GET[cPath] == ”) ){

}

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]

zencart で商品の一括登録

サイト製作時に大量の商品データをCSVなどから一括登録するときの注意点です。

products、products_description、products_to_categories にテーブルを生成すれば登録され表示されます。
ここで思わぬ落とし穴がありました。
products_description の language_id = 2 が存在しないと日本語サイトでは表示されません。
当然のことなのですが、はまってしまったので、覚書です。

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

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

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

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

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

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

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

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

wordpressのカテゴリ一覧で記事の画像を表示する

ありがた迷惑なことに、
wordpressのバージョン3.*くらいから、一覧にはサマリー表示されています。
スマートフォン対策なんでしょうかね?

ということで、記事の詳細表示と同じにする方法です。

loop.php

変更前

&lt;?php if ( is_archive() || is_search() ) : // Only display excerpts for archives and search. ?&gt;
&lt;div class=&quot;entry-summary&quot;&gt;
&lt;?php the_excerpt(); ?&gt;
&lt;/div&gt;&lt;!-- .entry-summary --&gt;
&lt;?php else : ?&gt;
&lt;div class=&quot;entry-content&quot;&gt;
&lt;?php the_content( __( &#039;Continue reading &lt;span class=&quot;meta-nav&quot;&gt;&amp;rarr;&lt;/span&gt;&#039;, &#039;twentyten&#039; ) ); ?&gt;
&lt;?php wp_link_pages( array( &#039;before&#039; =&gt; &#039;&lt;div class=&quot;page-link&quot;&gt;&#039; . __( &#039;Pages:&#039;, &#039;twentyten&#039; ), &#039;after&#039; =&gt; &#039;&lt;/div&gt;&#039; ) ); ?&gt;
&lt;/div&gt;&lt;!-- .entry-content --&gt;
&lt;?php endif; ?&gt;

変更後

&lt;div class=&quot;entry-content&quot;&gt;
&lt;?php the_content(); ?&gt;
&lt;?php wp_link_pages( array( &#039;before&#039; =&gt; &#039;&lt;div class=&quot;page-link&quot;&gt;&#039; . __( &#039;Pages:&#039;, &#039;twentyten&#039; ), &#039;after&#039; =&gt; &#039;&lt;/div&gt;&#039; ) ); ?&gt;
&lt;/div&gt;&lt;!-- .entry-content --&gt;

これならば、だれでも簡単にできると思います。

zencart のデータベースに接続する

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

// SQL例
$sql="SELECT * FROM `dtb_products` WHERE `status` = '1'";
$rs = mysql_query($sql,$db);
$item = mysql_fetch_assoc($rs);

↑ これではエラーになる。

config の読み込みは不要。
$db は zencart が使っているのでNG! 「 $dbcon 」 などに変更すると問題ない。

↓ これでOK!

$dbcon = mysql_connect(DB_SERVER,DB_SERVER_USERNAME,DB_SERVER_PASSWORD);
$sql="SELECT * FROM `categories_description` WHERE `language_id` = '2'";
$rs = mysql_query($sql,$dbcon);
while($item = mysql_fetch_assoc($rs)){
echo '
	<li><a href="'.$hoge1.'/index.php?   main_page=index&amp;cPath='.$item&#91;categories_id&#93;.'">'.$item[categories_name].'</a></li>
';
}

zencart で商品一覧をカスタマイズする

/includes/modules/product_listing.php

      switch ($column_list[$col]) {
        case 'PRODUCT_LIST_MODEL':
        $lc_align = '';
        $lc_text = $listing->fields['products_model'];
        break;
        case 'PRODUCT_LIST_NAME':
        $lc_align = '';
        if (isset($_GET['manufacturers_id'])) {
          $lc_text = '<h3 class="itemTitle"><a href="' . zen_href_link(zen_get_info_page($listing->fields['products_id']), 'manufacturers_id=' . $_GET['manufacturers_id'] . '&products_id=' . $listing->fields['products_id']) . '">' . $listing->fields['products_name'] . '</a></h3><div class="listingDescription">' . zen_trunc_string(zen_clean_html(stripslashes(zen_get_products_description($listing->fields['products_id'], $_SESSION['languages_id']))), PRODUCT_LIST_DESCRIPTION) . '</div>' ;
        } else {
          $lc_text = '<h3 class="itemTitle"><a href="' . zen_href_link(zen_get_info_page($listing->fields['products_id']), ($cPath ? 'cPath=' . $cPath . '&' : '') . 'products_id=' . $listing->fields['products_id']) . '">' . $listing->fields['products_name'] . '</a></h3><div class="listingDescription">' . zen_trunc_string(zen_clean_html(stripslashes(zen_get_products_description($listing->fields['products_id'], $_SESSION['languages_id']))), PRODUCT_LIST_DESCRIPTION) . '</div>';
        }
        break;
        case 'PRODUCT_LIST_MANUFACTURER':

zencart で商品の項目を増やす

▽ 商品登録
/admin/includes/modules/product/collect_info.php

▽ プレビュー
/admin/includes/modules/product/preview_info.php

上記に項目を追加したら、お次は登録処理です。
product.php を経由して category.php へ飛んでいるので、

/admin/product.php の冒頭に

if($_GET[action] == 'insert_product'){
	// Insert 処理を書く
	exit;
}elseif($_GET[action] == 'update_product'){
	// Update 処理を書く
	exit;
}

こんなふうに力技で収めてしまいました。

動作試験中なので ”exit” してますが ”brak” にしないとだめでっせ!

zencart の文字コードをUTF-8にする

最近のレンタルサーバーの仕様では、zencartは文字コードの問題にぶつかります。
ファイルの文字コードがUTF-8なのにHTMLではEUC-JPが指定されています。
これは文字コード指定を「デフォルトで指定しない」という設定のサーバーでは色々問題が発生するので、これを回避します。

文字コード変換
文字コード変更ツールなどを使用して、「.php」「.sql」「.txt」のファイルの文字コードを、UTF-8に変更します。
僕は、簡単な変換スクリプトを書いて実施しました。
(参考 ZenCart UTF-8化してイントール、の巻。)

まず、ファイル全てをUTF-8にします。
[lam@centos]# vi cnv2utf8.sh
#!/bin/sh
nkf -w $1 > TEMP
mv -f TEMP $1

[lam@centos]# find zen-cart -name ‘*.php’ -exec ./cnv2utf8.sh \{\} \;
[lam@centos]# find zen-cart -name ‘*.sql’ -exec ./cnv2utf8.sh \{\} \;
[lam@centos]# find zen-cart -name ‘*.txt’ -exec ./cnv2utf8.sh \{\} \;

設定変更
以下のファイルの「EUC-JP」の部分を「UTF-8」に書き換え
[lam@centos]# vi zen-cart/admin/includes/languages/japanese.php
[lam@centos]# vi zen-cart/includes/languages/japanese.php
[lam@centos]# vi zen-cart/zc_install/includes/languages/japanese.php

HTMLAREAの文字コードを変更
zen-cart/htmlarea/lang内の、
ja.js を削除して、(ja-euc.jsと同じものです)
ja-utf8.js をコピーして、ja.jsにリネーム。

phpの内部文字コードを変更
zen-cartのディレクトリに.htaccessを作成して、
php_value mbstring.internal_encoding UTF-8

/includes/classes/db/mysql/query_factory.php の47行目付近に
文字コードを指定します。

      if (@mysql_select_db($zf_database, $this->link)) {
        if (version_compare(mysql_get_server_info(), '4.1.0', '>=')) {mysql_query('SET NAMES "utf8"', $this->link);}
        $this->db_connected = true;
        return true;
      } else {

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

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

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

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

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

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

zeus

wordpressの記事の文字数指定

wordpressの記事の文字数指定は、テンプレートタグ the_excerpt()でできます。

ちなみに、全文表示はthe_content()。

the_excerpt() は日本語の場合うまく動作しません。

wordpress日本語版にはこれを修正するプラグイン WP Multibyte Patchが同梱されているので、

それを有効にすると、OKです。

wordpress にログインしているユーザーの情報を表示する

<?php
global $current_user;
get_currentuserinfo();

echo 'Username: ' . $current_user->user_login . "\n";
echo 'User email: ' . $current_user->user_email . "\n";
echo 'User level: ' . $current_user->user_level . "\n";
echo 'User first name: ' . $current_user->user_firstname . "\n";
echo 'User last name: ' . $current_user->user_lastname . "\n";
echo 'User display name: ' . $current_user->display_name . "\n";
echo 'User ID: ' . $current_user->ID . "\n";
?>

php 変数 に代入する方法(ユーザーIDをPHPに渡す)

global $current_user;
get_currentuserinfo();
$hoge = $current_user-->user_level;
echo '★'.$hoge.'<br>';

WordPress の管理画面がおかしくなる場合の対処法

WordPress の管理画面がcss が反映されない状態になってしまった。
以前にも別のサイトでなった記憶があるので、今回はきちんと対応してみた。

PHP を CGI モードで作動させる記述に問題がありそうだということで、
”AddHandler application/x-httpd-phpcgi .php” と書いていた。
横着せずに、必要な場合のみCGIモードにすることで回避できる。
▽ こんな感じに書く

# ファイルのアップロード
<files async-upload.php>
AddHandler application/x-httpd-phpcgi .php
</files>

# プラグインの新規インストール
<files plugin-install.php>
AddHandler application/x-httpd-phpcgi .php
</files>

# テーマの自動アップグレード
<files update.php>
AddHandler application/x-httpd-phpcgi .php
</files>

# コアアップグレード
<files update-core.php>
AddHandler application/x-httpd-phpcgi .php
</files>

うちの場合 ”CORESERVER” ですが、条件が揃えば他のサーバーでも発生すると思われます。

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の外に書いても有効。

ckeditorの設置

<script type="text/javascript" src="/js/ckeditor/ckeditor.js"></script>
<script type="text/javascript">
//スキンの変更['kama', 'office2003', v2]の3種
CKEDITOR.replace( 'detail',{skin : 'kama' });

CKEDITOR.config.width = '600px'; //横幅
CKEDITOR.config.height = '300px'; //高さ

//ユーザーのサイズ変更を許可するか
CKEDITOR.config.resize_enabled = false; 

//Enterキー押下時のタグ
CKEDITOR.config.enterMode = CKEDITOR.ENTER_P;

//Shift+Enter押下時のタグ
CKEDITOR.config.shiftEnterMode = CKEDITOR.ENTER_BR;
</script>

<textarea class="ckeditor" id="naiyo-ta" name="naiyo_text"><?php echo $blog&#91;'naiyo'&#93;; ?></textarea>

画像サイズを取得して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 から簡単に追加できます。

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

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

活用方法はこちら

ckediterの注意点

ckrditer のような無料の優れものには感謝しなければならない。
しかし、多くのバグを抱えていることも否めない。

ckrditer で編集したものを携帯で表示するのは問題ないが、携帯で編集しようとした場合一つの問題が発生する。
タブ「¥t」が挿入されてしまうので、携帯のテキストエリアでは表示できないらしい。

ckrditer 内での処理で「¥t」を挿入させないと、これまたいろんな問題が発生するようでうす。

そんなこんなで、DBへの登録時に「¥t」を削除することが大切です。

置換方法はこちら

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

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

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

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

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

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

続きはこちらです。

CAPTCHAイメージ認証(securimage) の照合ソースコードを解読してみる

securimage.php を解析してみる。

L:618行目付近 ”function check($code)”

function check($code)
{   
    // 考えながら検証する
    // $code: POSTしたデータ
    // echo $code;   // ←POSTしたデータ
    
    $this->code_entered = $code;
    $this->validate();
    return $this->correct_code;
}

L:1170付近 ”function validate()”

function validate()
{
    // retrieve code from session, if no code exists check sqlite database if supported.
    $code = '';

    if (isset($_SESSION['securimage_code_value']) && trim($_SESSION['securimage_code_value']) != '') {
        if ($this->isCodeExpired($_SESSION['securimage_code_ctime']) == false) { 
            $code = $_SESSION['securimage_code_value'];
        }
    } else if ($this->use_sqlite_db == true && function_exists('sqlite_open')) { // no code in session - may mean user has cookies turned off
        $this->openDatabase();
        $code = $this->getCodeFromDatabase();
    } else { /* session code invalid or non-existant and code not found in sqlite db or sqlite is not available */ }
    
    $code               = trim(strtolower($code));
    $code_entered       = trim(strtolower($this->code_entered));
    $this->correct_code = false;
    
    // echo '----------------'.$code_entered .'------------------';
    //$code_entered: 入力したデータを小文字にしたもの
    // echo $_SESSION['securimage_code_value'];
    // echo '===================';
    // echo $_SESSION['securimage_code_ctime'];
    
    
    if ($code != '') {
                if ($code == $code_entered) {
            $this->correct_code = true;
            $_SESSION['securimage_code_value'] = '';  // ← 照合する元データ
            $_SESSION['securimage_code_ctime'] = '';  // ← 照合する元データの生成時刻
            $this->clearCodeFromDatabase();
            }
    }
}

フォームメール送信ソースコード(SMTP)のサンプル

<?PHP

//////////////////
// PUT_SMTP.PHP //
//////////////////

	// ここに投げる必須項目
	// $server
	// $to
	// $from
	// $subject
	// $body
$server='';
$put_smtp_flg="1";
$smtp='mail.hogehoge.com';
$subject="TESTmail";
$body="TESTmail";
$from = "hsmt@hogehoge.com";
//$to='has@zibaj.net';
$to='hsmt@zibaj.net';
//echo 'put_smtp_flg=>'.$put_smtp_flg.'<br>';
echo "smtp_server=>".$smtp."<br>";
echo "to=>".$to."<br>";
	
if($put_smtp_flg == "1"){
	
	$server=$smtp;
	
	// エンコード
	$subject = mb_convert_encoding($subject,"JIS");
	$body = mb_convert_encoding($body,"ISO-2022-JP");

	$date = date('D, d M Y H:i:s: O');// 日付(この形式でないとメーラーに送信日時として解釈されない)

	$sock = fsockopen($server,25);		// メールサーバの25番ソケットを開いて
	fputs($sock,"HELO $server\r\n");	// SMTPコマンド発行
		$result = fgets($sock,128);		// サーバからのレスポンスを取得
		echo 'SMTPコマンド発行=>'.$result.'<br>';
	fputs($sock,"MAIL FROM:<$from>\r\n");// FROMアドレス指定
		$result = fgets($sock,128);
		echo 'FROMアドレス指定=>'.$result.'<br>';
	fputs($sock,"RCPT TO:<$to>\r\n");	// 宛先指定
		$result = fgets($sock,128);
		echo '宛先指定=>'.$result.'<br>';
	fputs($sock,"DATA\r\n");			// DATAを送信後、ピリオドオンリーの行を送るまで本文。
		$result = fgets($sock,128);
		echo 'DATAを送信1=>'.$result.'<br>';

	// Header 表示項目
	fputs($sock,"FROM:<$from>\r\n");	// 送信元表示
	fputs($sock,"TO:<$to>\r\n");		// 送信先表示
	fputs($sock,"Date:<$date>\r\n");	// 日付表示

	fputs($sock,"Subject:$subject\r\n");// Subjectヘッダ送信
	fputs($sock,"\r\n$body\r\n");		// 本文送信** 改行の後が本文と見なされる
		$result = fgets($sock,128);
		echo 'DATAを送信2=>'.$result.'<br>';
	fputs($sock,"\r\n.\r\n");			// ピリオドのみの行を送信。
		$result = fgets($sock);
		echo 'DATAを送信END=>'.$result.'<br>';

	// echo $result."<br>\n";// 試験用表示
	
	if(!ereg("^250",$result)){			// 成功すると250 OK~と返してくるので
		echo "送信失敗<br>\n;";			// それが返ってこなかったら失敗。
	}
	
	echo '結果=>'.$result.'<br>';

	fclose($sock); //ソケット閉じる
}

?>

wordpressの記事内でphpを使う(runPHP)

unPHP というプラグインを利用します。
配布元:http://wordpress.org/extend/plugins/runphp/

1)通常のプラグインのようにアップロードし有効にします。

2)設定 → runPHP で、有効にする権限をチェックします。

3)ユーザー → 各ユーザーのプロフィールで
「I can activate or deactivate runPHP on a post.」にチェックします。
「ビジュアルリッチエディターを使用しない」にチェックします。

4)投稿ページの下のほうにに「run PHP code?」があるのでチェックすれば投稿記事内でPHPが使えます。

FCKeditor 2.6.6

WYSIWYG Text and HTML Editor といえば FCKeditor が定番だ!

ツールバーをカスタマイズするとIEでエラーになる。
「未知のツールバー項目」がどうとか言っている。

一時しのぎとの回避策
ツールバーの設定で「Basic」をいじると叱られるので、
「Default」を利用する。不要なツールは削除しても問題ない。

Javascript はあまり好み出ないのでPHPで書く

// もしもし、FCKeditor さんいますか?
include($_SERVER[DOCUMENT_ROOT]."/manage/fckeditor/fckeditor.php");

// fckeditorのパスの位置を設定。※INPUT_NAMEとしても利用される。
$fck = new FCKeditor("FCKeditor");

// FCKeditor さんの住所
$fck->BasePath = "/manage/fckeditor/";

// 表示サイズを設定
// $fck->Width = "640"; デフォルトは100%
$fck->Height = "280"; // デフォルトは200

// ツールバーはDefaultとBasicから選択。
// 機能の制御はfckeditor/fckconfig.jsをカスタマイズ
$fck->ToolbarSet = "Default";

// textareaの値を設定。
$fck->Value = "";

$fck->Create();

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

『”』の前に『\』がついてエラーになる事や、
『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本体に変更をかけてみよう!

親カテゴリのIDを取得する

親カテゴリのIDを取得する

&lt;?php 
    /* 現在のカテゴリ-の取得 */
    $cat_now = get_the_category();
    $cat_now = $cat_now[0];
    // echo '&lt;pre'&gt;';var_dump($cat_now);echo ''&lt;/pre'&gt;'; // 子カテゴリに関するいろんなデータの配列

    /*親カテゴリーのID取得*/
    $parent_id = $cat_now-&gt;category_parent;
    echo $parent_id;
?&gt;

現在のカテゴリを抽出する

/* 現在のカテゴリ-の取得 */
$cat_now = get_the_category();
$cat_now = $cat_now[0];
echo '&lt;pre&gt;';var_dump($cat_now);echo '&lt;/pre&gt;';
$cat_now = $cat_now->term_id;
echo '★'.$cat_now.'★';

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

&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}-->

worepress でlightbox が動かないのはなぜ!

久々にライトボックスのプラグインを設定する。
チョロイチョロイ となめてかかったら、思わぬ落とし穴があった。
アホくさいけど、これを知らないと動きません v(^^)

lightbox

皆さんも小難しく考えて、「rel=”lightbox”」を手で書いてみたりしていませんか?
最近のバージョンは「rel=”…」はいらないようです。
生サイズ画像へのリンクをライトボックス化してくれると覚えましょう。
リンクを生成してくれる機能は持ち合わせていないようです。

ヘッダーのtitleを整形する

デフォルトでは「 サイト名 ≫ ページ名 」のようになっている。
SEO対策としては少々足りない気がする。
「 ページ名 ≫ サイト名 」 としたいが単に順番を変えると「≫」が先頭にきてしまう。
phpで置換するのもよいが、その前に公式マニュアルを調べると、書いてありました。
http://wpdocs.sourceforge.jp/テンプレートタグ/wp_titleの中断くらいに「ブログ名とタイトルを反転して区切る」という項目があります。

&lt;title&gt;
&lt;?php wp_title('--', true, 'right'); ?&gt;
&lt;?php bloginfo('name'); ?&gt;
&lt;/title&gt;

区切り文字(記号)を右付にできるんですね。

MT の変数を PHP で扱う

MTに用意されていない機能を実装する場合、
現在の記事ID(エントリーID、EntryID)を取得すれば、あとはBDに接続し思いのままに操れる。

ではどうやって記事IDを頂くか? とても簡単だ!

$hoge = "&lt;$MTEntryID$&gt;";
echo $hoge;

MT変数をダブルクォーテーションで括るとだめなとき、シングルクォーテーションでいける場合もある。

<?php
    $hoge = '<$mt:EntryBody$>';
    echo $hoge;
?>

会員登録のカスタマイズ

会員ランク[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万円は越えてしまうと思います。

WordPressでカテゴリを指定して記事を表示する。

// 元

&lt;?php if (have_posts()) : while (have_posts()) : the_post(); ?&gt;

// カテゴリを指定して表示する

&lt;?php if (have_posts()) :  query_posts('&posts_per_page=20&cat=47');  ?&gt;
&lt;?php while (have_posts()) : the_post(); ?&gt;
posts_per_page=20、表示する記事数
cat=47、カテゴリIDなのだが、パーマリンクを変更するとこれが効かない。
category_nama=***、これでできた。

// 複数カテゴリを指定して表示する

&lt;?php query_posts(array('category__in' =&gt; array(25,24,23,10))); ?&gt;
&lt;?php if (have_posts()) : while (have_posts()) : the_post(); ?&gt;

会員のランク分け

ログイン処理
ログイン処理の変更
data/class/SC_Customer.php
// 本登録された会員のみ
// $sql = “SELECT * FROM dtb_customer WHERE (email = ?” . $sql_mobile . “) AND del_flg = 0 AND status = 2”;
$sql = “SELECT * FROM dtb_customer WHERE (email = ?” . $sql_mobile . “) AND del_flg = 0 AND ( status = 2 OR status = 3 )”;

「status = 2」以外も許可する

ログインIDをメールアドレスでなくても可能にする

会員情報管理
会員情報編集画面(青を追記)
ファイルdata\Smarty\templates\default\admin\customer\edit.tpl
<!–<input type=”radio” name=”status”value=1 id=”no_mem” <!–{if $list_data.status == 1}–> checked=”checked” <!–{/if}–> <!–{if $list_data.status == 2}–>disabled<!–{/if}–>><label for=”no_mem”>仮会員</label>–>
<input type=”radio” name=”status”value=2 id=”mem”<!–{if $list_data.status == 2}–> checked=”checked” <!–{/if}–>><label for=”mem”>一般会員</label>
<input type=”radio” name=”status”value=3 id=”mem”<!–{if $list_data.status == 3}–> checked=”checked” <!–{/if}–>><label for=”mem”>HIS会員</label>

確認ページ
I:\home\skyblue\data\Smarty\templates\default\admin\customer\edit_confirm.tpl

SQL文
I:\home\skyblue\data\class\pages\admin\customer\LC_Page_Admin_Customer_Edit.php
80行目くらい
入力チェック 同270行くらい

暗号化(AUTH_MAGIC)
I:\home\skyblue\data\mtb_constants_init.php

ログインチェック(ここで$_SESSION[customer]が殻で無ければログインとする)
I:\home\skyblue\data\class\pages\frontparts\bloc\LC_Page_FrontParts_Bloc_Login.php

会員ランクはCUBEにはじめから実装されている。
仮会員と本会員を識別するためのものだが、そのフラグを利用するのがもっともスマートな方法です。
$_SESSION[customer][status] で取り出すことができます。

ログイン処理(ECCUBEのログイン状態を作る)

バージョンによてファイル名が違う

data/class/pages/frontparts/LC_Page_FrontParts_LoginCheck.php

data/class/pages/frontparts/LC_Page_FrontParts_Bloc_Login.php

今回は「$_SESSION[member_id] 」があればログイン状態にする、というサンプルです。
Wordpressなど他のシステムにログインしていて
EC-CUBEにログイン状態を引き継ぐときなどに活用します。

// ログイン判定
if ($objCustomer->isLoginSuccess()) {
	$this->tpl_login = true;
	$this->tpl_user_point = $objCustomer->getValue('point');
	$this->tpl_name1 = $objCustomer->getValue('name01');
	$this->tpl_name2 = $objCustomer->getValue('name02');
//  ↓ ここから追記
}elseif($_SESSION[member_id] != '') {
	$this->tpl_login = true;
	$this->tpl_user_point = $objCustomer->getValue('point');
	$this->tpl_name1 = $objCustomer->getValue('name01');
	$this->tpl_name2 = $objCustomer->getValue('name02');
//  ↑ ここまで追記
} else {
	// クッキー判定
	$this->tpl_login_email = $objCookie->getCookie('login_email');
	if ($this->tpl_login_email != '') {
	$this->tpl_login_memory = '1';
	}
	// POSTされてきたIDがある場合は優先する。
	if (isset($_POST['login_email']) && $_POST['login_email'] != '') {
	$this->tpl_login_email = $_POST['login_email'];
	}
}

EC-CUBE文字化け(その2)

eccube-2.4.2 では、SC_DbConn.php に下記が追記された。

MySQL文字化け対策(MySQLで文字化けする場合は以下のコメントアウトをはずして動作確認してみてください。)
if (DB_TYPE == 'mysql') {
   $objDbConn->query('SET NAMES utf8');
}

表示の文字化け対策にはなるだろう。
しかし、根本的な対策ではなさそうだ。

DBを直接除いたりしない人には関係無いかもしれないが、カスタマイズにはデータベースの操作が必須です。

CUBEの初期状態でインストールし、UTF-8にして上書きインストールしなければならない。

※ /data/cache を空にしないと反映されないので注意!

EC-CUBEで送料無料

EC-CUBEで送料無料の商品が含まれれば合計送料が無料になる。
「送料込み・送料別」をラジオボタンで選択式にする。

まず、どんな感じで実装するか?
DBは変更しない。dtb_products の deliv_fee を利用する。
このフィールドは将来拡張予定と書かれているが、拡張されても使いにくいのではないかと思うような書き方(ソースにコメントあり)なので、使い勝手の良いものを作ることにした。

1、管理登録・商品編集画面
File[data/Smarty/templates/default/admin/products/product.tpl]
eccube_custom_20091204a

2、確認画面
File[data/Smarty/templates/default/admin/products/confirm.tpl]
File[LC_Page_Admin_Products_Product.php]
eccube_custom_20091204b

3、送料の計算に例外処理を施す
File[data/class/helper/SC_Helper_DB.php]

決済後のメールやオーダー管理にもきちんと反映した。

ソースファイルはこちら ⇒ Dounload

EC-CUBEセキュリティパッチ

本不具合に対する対応方法
——————————————————————-
■不具合が存在するEC-CUBEのバージョン
——————————————————————-
EC-CUBE 正式版  2.4.0 RC1 以降 (2009年3月31日公開)
EC-CUBE コミュニティ版 r18068 以降 (2009年6月10日版以降)

——————————————————————-
■修正方法について
——————————————————————-
/data/class/pages/admin/customer/LC_Page_Admin_Customer_SearchCustomer.php#process
の最初に以下のログイン確認コードを挿入します。

■56行目付近
——————————————————————-
変更前
——————————————————————-
function process()
{
$objView = new SC_AdminView();
——————————————————————-

——————————————————————-
変更後
——————————————————————-
function process()
{
// 認証可否の判定
$objSess = new SC_Session();
SC_Utils_Ex::sfIsSuccess($objSess);

$objView = new SC_AdminView();
——————————————————————-

EC-CUBEのエンコード対策

サーバ移転や、試験環境などの構築で、文字化けが発生することがしばしばある。
データベース接続まわりを除いてみると、大切な記述が欠けている。

オープンソースなので、完璧を求めてはいけない。
ファイル名: /data/class/SC_DbConn.php
65行付近

$this-&gt;conn = $objDbConn;
<span style="color: #3366ff;">$this-&gt;conn-&gt;query(”SET NAMES utf8″);</span>
$this-&gt;error_mail_to = DB_ERROR_MAIL_TO;
$this-&gt;error_mail_title = DB_ERROR_MAIL_SUBJECT;
$this-&gt;err_disp = $err_disp;
$this-&gt;dbFactory = SC_DB_DBFactory_Ex::getInstance();

「$this->conn->query(”SET NAMES utf8″);」を追記すれば解決する。

※ この作業を行うタイミングが重要です。
インストールのどのタイミングで行うか、DB接続直後です。
最近のバージョンはやり方が違う。
一度インストールし、上記エンコード指定をした後、再度インストールする。
このときデータベースが存在するので削除するかと聞いてくるので、削除する。
これでよいのだが、既にデータを登録しているときは消えてしまうので注意が必要だ。
注意
エンコード関連を変更した後は、キャッシュファイルのクリアを忘れるべからず。
(/data/chash)

解説
php.ini のエンコード関係は、あまり指定しないのがサーバー屋の流儀である。
その場合、データベースの読み書きは、サーバーのデフォルト・エンコードで行われる。
サーバーのエンコードは、
最近は、UTF-8が多くなってきたが、以前はEUCが主流だった。
DBのエンコードとPHPファイルのエンコードが同じであっても、文字化けが発生する場合は、サーバーのデフォルトエンコードを疑うのが基本である。

エンコードをきちんと理解しないで安易にまねすると、復旧不可能に陥ります。

ご自身の責任で行ってください。

ビジュアルエディタを使用しない

WordPress の投稿・編集で「ビジュアルリッチエディタ」を使いたくなることもある。
「ビジュアルリッチエディタ」の有効・無効の設定は「設定」にはない。
「ユーザー」にある。
なぜ?と思うかもしれないが、サイトの管理者と運用者、投稿者、などにより管理画面の簡易性を求めるためである。wp_20100102

WordPress のデータベースに接続

<?php
// Config読込み
include $_SERVER[DOCUMENT_ROOT]."/wp-config.php";// MySQLに接続 ------------------
$db = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
//mysql_query("SET NAMES utf8″);
// DB指定(確認用)
if(!mysql_select_db(DB_NAME, $db)){
// echo '<div style="color:red;">メインデータベースに接続できません。</div>';
}elseif(mysql_select_db(DB_NAME, $db)){
echo '<div style="color:green;">DB指定OK!('.DB_NAME.')</div>';
}
// < EOF > MySQLに接続 ------------------

// $sql="SELECT * FROM `dtb_product_categories` WHERE `product_id` = '$_GET[product_id]'";
// $rs = mysql_query($sql,$db);
// $item = mysql_fetch_assoc($rs);
// var_dump($item);
?>