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

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

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

最近のSEO対策

HTMLタグやMETAタグを適正に活用するのは当然のことですが、最近の流行についてご説明いたします。

サテライトサイト
より幅広いターゲット層のアクセスを獲得する為に、本サイトとは別に立ち上げられたウェブサイトのこと。
自社が提供する商品やサービスに関わる情報提供や、コミュニティサイトなど、自社の見込み客にとって有益なサテライトサイトを複数持つことで、自社サイトだけではとらえきれない見込み客のアクセスを獲得する効果がある。

ブログ
サテライトサイトと類似の活用方法で本サイトへのアクセスを増やすことを目的に運用する。

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]

ASINコードでアマゾンの商品画像を表示する

画像URLは、
http://images-jp.amazon.com/images/P/[ASINコード].[国コード].[画像の種類].jpg

で表記できるとのこと。

これは経験則で、公式なアナウンスではないはずだが、周知の事実のような感じになっている。
私も以前は利用していた。

国コードは、日本は09。
画像の種類は、小さい順に、THUMBZZZ,TZZZZZZZ,MZZZZZZZ,LZZZZZZZ

のだめ21巻は、asin=4063407128でこんな感じ

http://images-jp.amazon.com/images/P/4063407128.09.MZZZZZZZ.jpg

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 {

スマートフォン対応サイト製作のコツ

・HTML5
・CSS3
・Javascript
PCとおんなじです。
画面サイズが小さいだけです。

今までの携帯との違いは、
・画面サイズが少しだけ大きくなった
・Javascript対応

強いて言えば、
携帯の規格が、
・普通画面サイズ
・大画面サイズ
の2種類になったということです。

僕のやり方としては、
いままでは、
PCサイトを携帯向けに最適化する場合、
プログラムで自動的に最適化していました。
スマートフォン向けも自動で最適化です。

僕がつくったwebサイトは、自動でスマートフォン対応サイトができてしまいます。

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

PC用のwebサイトをスマートフォンに最適化

WebページをPCの感覚で製作し、表示すると、上手く表示されない事が多いです。

コレはViewportを設定する事で解決します。

簡単に書くと

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> 

とmeta要素に指定することで、ちゃんと表示されるはずです。

詳しく値を見ていくと

<meta name=”viewport” content=”width=【横幅】, initial-scale=【初期の倍率】, maximum-scale=【拡大可能な最大の倍率】”>
・横幅
画面の横幅をピクセル単位で指定します。ただし、スマートフォンの場合は機種によって画面の横幅がまちまちで、本体の向き(縦方向・横方向)に よっても違いがあるので、通常は「device-width」という特殊な値を設定するとよいでしょう。device-widthを指定すると、端末の横 幅で自動的に調整されます。
・初期の倍率
表示した時の画面の倍率を指定します。たとえば「1」を指定すると1倍、「2」を指定すると2倍になります。
・拡大可能な最大の倍率
スマートフォンは2本指でピンチ(iPhone)したり、拡大ボタンをタップ(Android)したりすることで画面を拡大できます。この時の最大の倍率を指定します。「1」を指定すると拡大できなくなり、横に向けた際、文字の大きさをそのままに行数が増えるという表示なります。

スマートフォンのUA一覧

  ’iPhone’, // Apple iPhone
‘iPod’, // Apple iPod touch
‘Android’, // 1.5+ Android
‘dream’, // Pre 1.5 Android
‘CUPCAKE’, // 1.5+ Android
‘blackberry9500’, // Storm
‘blackberry9530’, // Storm
‘blackberry9520’, // Storm v2
‘blackberry9550’, // Storm v2
‘blackberry9800’, // Torch
‘webOS’, // Palm Pre Experimental
‘incognito’, // Other iPhone browser
‘webmate’ // Other iPhone browser

phpで珍しいエラーメッセージに出会った!

「 Fatal error: Unsupported operand types in 」
こんなエラーははじめて見たぞ!

「 サポートされていない演算子をタイプした 」といっているようですね。

変数に数値を加算しようとして、出たエラーなので、メッセージを見なくても、
式が違っているか、変数の方が違う(配列とか文字列とか)のだろうと予測はつくが、
親切なエラーメッセージに感動した。

最近はタナゴつりにはまっているが絶滅危惧種を釣ったのと同じくらい感動した。

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);

GDでサムネイルを生成する

まだ整理していません。下書きです。

// 画像フォルダ、※ 相対パス か DOCUMENT_ROOT で書く
$img_dir = '../img/upload/';
echo '
$img_dir=&gt;'.$img_dir;

$name = explode('.', $_GET[imgname]);

$tumbnail_name = $name[0].'_thumbnail.'.$name[1];

$img_path = $img_dir.$tumbnail_name;
echo '
$img_path=&gt;'.$img_path;

// 試験の場合は、前回生成の新画像を削除
// unlink($img_path);

if(!file_exists($img_path)){
echo '
Tumbnailが無いので自動生成します。';

// 注意
// 画像Pathは URLではなく Pathで書く。

// 元画像
$srcname = explode('_thumbnail', $img_path);
$srcname  = $srcname[0].$srcname[1];
echo '

$srcname=&gt;'.$srcname;

$image = ImageCreateFromJPEG($srcname);
echo '
$image=&gt;'.$image;
// 元画像のサイズを取得
$width = ImageSX($image);
$height = ImageSY($image);
echo '
$width=&gt;'.$width;
echo '
$height=&gt;'.$height;

// 縮小した画像のサイズを決める。
$new_width = 250;
$rate = $new_width / $width; //圧縮比
$new_height = $rate * $height;
echo '

$new_width=&gt;'.$new_width;
echo '
$new_height=&gt;'.$new_height;

// 空の画像を作成する。
$new_img = ImageCreateTrueColor($new_width, $new_height);

// 画像を普通にリサイズコピーする場合。
// ImageCopyResized($img_path,$image,0,0,0,0,$new_width,$new_height,$width,$height);
ImageCopyResized($new_img,$image,0,0,0,0,$new_width,$new_height,$width,$height);
// サンプリングしなおす場合。
// ImageCopyResampled($new_img,$image,0,0,0,0,$new_width,$new_height,$width,$height);

// ファイルに保存する場合。
ImageJPEG($new_img, $img_path, 100); //3つ目の引数はクオリティー(0~100)
// ImageGIF($image, $file_path);//環境によっては使えない
// ImagePNG($image, $file_path);
}
echo '<hr /><img src="'.$img_path.'" alt="" />';

※ PHP のGD関数はまだまだ途上のようです。随時使用が変わりますので、人の書いたものを信用せずに、公式サイトをご確認ください。

 

PHPで0サプレスする(数字の先頭から0を削除する)

《例》

$str = "000100";
echo $str;
//出力結果:000100

echo abs($str);
//出力結果:100

いろいろというか、もっと原始的なやり方を好むが、今回は便利な関数を使ってみた。
ベーシックな関数は必要だが、このような流行りもの的関数を使ってしまった自分が恥ずかしい。

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

phpのエラー処理関数

// 全てのエラー出力をオフにする
error_reporting(0);

// 単純な実行時エラーを表示する
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// E_NOTICE を表示させるのもおすすめ(初期化されていない
// 変数、変数名のスペルミスなど…)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// E_NOTICE 以外の全てのエラーを表示する
// これは php.ini で設定されているデフォルト値
error_reporting(E_ALL ^ E_NOTICE);

// 全ての PHP エラーを表示する (Changelog を参照ください)
error_reporting(E_ALL);

// 全ての PHP エラーを表示する
error_reporting(-1);

// error_reporting(E_ALL); と同じ
ini_set('error_reporting', E_ALL);

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サーバーでPostgreSQLを動かす

PostgreSQLをインストールしたがPHPと連動しない。
php/ext/php_pgsql.dll が96kbというのはおかしい、壊れているようだ。
少々前のバージョン5,25あたりのバイナリを落としてくる。
php/ext/php_pgsql.dll が165kbあるのでこれを誓わせてもらうことにした。

めでたく動いた!

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 から簡単に追加できます。

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

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

活用方法はこちら

XREA・CORESERVER.JPでPHPをCGIモードで動かす方法

サイト全体に適用する場合

AddHandler application/x-httpd-phpcgi .php

WordPress 2.9.x の場合:

# 画像・ファイルアップロード
<files async-upload.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>

こんな感じで
.htaccess に書きます。

ckediterの注意点

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

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

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

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

置換方法はこちら

mod_rewrite が動かないのは違う原因がある

時々mod_rewrite が動かずに悩まされるときがある。
原因は「mod_rewrite」ばかりではない。
.htaccess が有効になっていないことが多い。
AllowOverride が All になっているか確認する。
mod_rewrite のソースに文法エラーを書いてみて「Internal Server Error」になれば.htaccessは有効になっているはず?

 では AllowOverride none
では AllowOverride All
↑この組み合わせでしか動かなかった。

<Directory />
    Options FollowSymLinks
    AllowOverride none
    Order deny,allow
    Deny from all
</Directory>
<Directory "F:/home">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    Options ExecCGI
</Directory>

自分の作業用サーバーでは、上記だけではどうさせず
.htaccess に[Options +FollowSymLinks]を追記したら動いた。

#mode_rewriteの設定
Options +FollowSymLinks
RewriteEngine on
RewriteBase /demo/hanryu-next.com/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9]+).php? user_data/$1.php [L]

クラスを配列に変える

stdClass などを個別に取り出すには、配列に変えたほうが便利なこともある。

一例です。

var_dump(aaa); の結果が下記のような場合

array(26) {
  [bbb]=>
  object(stdClass)#39 (18) {
    ["topic_id"]=>
    string(2) "74"
    ["topic_title"]=>
    string(5) "Title"
    ["topic_slug"]=>
    string(7) "title-4"
    ["topic_poster"]=>
    string(1) "3"
    ["topic_poster_name"]=>
    string(9) "hashimoto"
    ["topic_last_poster"]=>
    string(1) "3"
    ["topic_last_poster_name"]=>
    string(9) "hashimoto"
    ["topic_start_time"]=>
    string(19) "2011-06-03 10:46:03"
    ["topic_time"]=>

$vvv = (array)$aaa[bbb];

var_dump($vvv); とやると、配列になっている。

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” を書いて
サーバの該当ディレクトリに置く。

.htaccess で phpのエラー表示を操作する

php_flag display_errors On
もしくは、php_flag display_errors Off

On のときは更に表示内容を指定する
php_value error_reporting 6135

error_reporting に設定する値は PHP: error_reporting – Manual を参照するといいでしょう。値 定数
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
6143 E_ALL
2048 E_STRICT
4096 E_RECOVERABLE_ERROR

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で調べ物をしていたら

sslの設定(httpd.conf, httpd-ssl.conf)

Listen subdomain.localhost:443
&lt;VirtualHost localhost:443&gt;
&nbsp;&nbsp;&nbsp;&nbsp;DocumentRoot "I:/home/DIR_NAME"
&nbsp;&nbsp;&nbsp;&nbsp;ServerName localhost:443
&nbsp;&nbsp;&nbsp;&nbsp;ServerAdmin root@localhost
&nbsp;&nbsp;&nbsp;&nbsp;SSLEngine on
&nbsp;&nbsp;&nbsp;&nbsp;SSLCertificateFile "C:/Apache2.2/conf/server.crt"
&nbsp;&nbsp;&nbsp;&nbsp;SSLCertificateKeyFile "C:/Apache2.2/conf/server.key"
&lt;/VirtualHost&gt;

※ 「SSLEngine on」を書かないと「ssl_error_rx_record_too_long」などのエラーになる。

ブラウザに自動エンコードさせない。

URLを自動生成してブログサイトなどの自動検索を行う場合、
キーワードがエンコードされてしまうと検索できない。
生データを送り付けたい場合に活用する。

(例)
https://mint123.tokyo/technology/?kw=%1B$B$O$7$b$H%1B(B  ←青文字の部分をそのままの文字列として取得する場合などに活用します。
普通に取得すると勝手にエンコーディングされて「はしもと」になってしまいます。

$kw = $_GET[kw];
urlencode($kw);
echo $kw;

配列をランダムにシャッフルする

//---------------------------------------------
// ランダム化
//---------------------------------------------
// 乱数生成
function make_seed(){
	list($usec, $sec) = explode(' ', microtime());
	return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed());
$randval = rand();
// シャッフル
shuffle($array);
$i = 0;
while($array[$i] != ''){
	echo $array[$i];
	$i ++;
}

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

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

①カートの計算で会員価格と通常価格の識別
/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;

モバイル振り分け

携帯電話のユーザーエージェントを取得して振り分ける

// UA 取得
$agent = $_SERVER['HTTP_USER_AGENT'];
if(ereg("^DoCoMo", $agent)){
  $env = "docomo";
}elseif(ereg("^UP.Browser|^KDDI", $agent)){
  $env = "au";
}elseif(ereg("^J-PHONE|^Vodafone|^SoftBank", $agent)){
  $env = "softbank";
}elseif(ereg("^MOT-|^WILLCOM", $agent)){
  $env = "willcom";
}else{
  $env = "pc";
}
$agent = $_SERVER['HTTP_USER_AGENT'];
$hoge = array('DoCoMo', 'UP.Browser', 'KDDI', 'J-PHONE', 'Vodafone', 'SoftBank', 'MOT-', 'WILLCOM' );
$env = 'pc';
$i = 0;
while($hoge[$i] != ''){
	if(preg_match("/$hoge[$i]/", $agent)){
		$env = 'mobile';
	}
	$i ++;
}
if($env != 'pc') header("Location: /m/index.php");

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

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;
?>