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] == ”) ){

}

zencart で商品の一括登録

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

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

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 {