Development memo

Rough Consensus And Running code

グーグルのCDNを利用してjqueryを読み込む2

以前書いたメモの追記。jqueryの1.4.2とthemeまでグーグルから呼んでしまおうという奥義です。

<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
<script src="http://www.google.com/jsapi"></script>

<script type="text/javascript">
google.load("jquery", "1.4.2");
google.load("jqueryui", "1.8");
</script>

このthemeで読み込めるthemeの種類はhttp://jqueryui.com/developmentこちらの右下にある base, black-tie, blitzer, cupertino, dark-hive, dot-luv, eggplant, excite-bike, flick, hot-sneaks, humanity, le-frog, mint-choc, overcast, pepper-grinder, redmond, smoothness, south-street, start, sunny, swanky-purse, trontastic, ui-darkness, ui-lightness, vader これらのthemeが指定できる。

サンプルコードはbaseを指定しています。

thickbox.js とIE7でバグかと・・・

thickbox.jsを使って、htmlを表示させようとしたのですが、IE7で表示すると、ページの下のほうでthickboxを使うと、ページの上部でウィンドウが開くという現象に悩まされた。jqeryのバージョンをさげたり、thickboxのパラメータをいろいろ変えたりしたけど、解決せず。

Thickboxの公式サイトをよく読んで見ると、

Before you can implement ThickBox make sure the page that invokes ThickBox has a valid DTD. This is required for ThickBox to look and function correctly.

おい。

ということで、

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>

私のhtmlの場合上記を入れることで、解決。幸せになりました。

とても気になっていたorder.phpでエラー(v1.4.0)

catalog/model/checkout/order.php

の155行目

if ($order_query->row['payment_address_format']) {
 $format = $order_info['payment_address_format'];
 }
if ($order_query->row['payment_address_format']) {
 $format = $order_query->row['payment_address_format'];
 }

これだけでは$order_query->row['payment_address_format']の

値を取得できないので、さらに4行目のクエリを一部変更

public function getOrder($order_id) {
 $query = $this->db->query("SELECT *, c1.iso_code_2 AS shipping_iso_code_2, c1.iso_code_3 AS shipping_iso_code_3, c2.iso_code_2 AS payment_iso_code_2, c2.iso_code_3 AS shipping_iso_code_3, z1.code AS shipping_zone_code, z2.code AS payment_zone_code FROM `" . DB_PREFIX . "order` o LEFT JOIN " . DB_PREFIX . "country c1 ON (o.shipping_country_id = c1.country_id) LEFT JOIN " . DB_PREFIX . "country c2 ON (o.payment_country_id = c2.country_id) LEFT JOIN " . DB_PREFIX . "zone z1 ON (o.shipping_zone_id  = z1.zone_id) LEFT JOIN " . DB_PREFIX . "zone z2 ON (o.payment_zone_id = z2.zone_id) WHERE o.order_id = '" . (int)$order_id . "'");

 return $query->row;
 }

一番うしろのほうの

zone z1 ON (o.payment_zone_id  = z1.zone_id)

だったのを

zone z1 ON (o.shipping_zone_id  = z1.zone_id)

に変更してます。

といっても既に1.4.3にバージョンアップしてる・・・バージョンアップについていけなくなってきました。

OpenCart本家を参照:http://forum.opencart.com/viewtopic.php?f=31&t=9041&p=42779&hilit=ModelCheckoutOrder#p42779

OpenCartのfilemanegerでフォルダが表示されない(IE)

Firefoxは問題ないが、IEではフォルダが表示されない。OpenCart v1.4.0
原因はjavascriptにあった。
admin/view/template/common/filamanger.tpl
の130行目
valid_children : 'all',

allの後の「,」を削除する

valid_children : 'all'

Googleのjqueryを読み込む

自分のサイトにjqueryを置かずに、Googleからjqueryを読み込むメモ。

<script src="http://www.google.com/jsapi"></script">
<script>
google.load("jquery", "1.2.3");
google.load("jqueryui", "1.7.1"); </script>

APIを利用する場合は、

<script src="http://www.google.com/jsapi?key=YOUR_API_KEY"></script>
<script>
google.load("maps", "2.x");
  google.load("jquery", "1.3.2");
  google.load("jqueryui", "1.7.1");
</script>

YOUR_API_KEYは自分のAPIキーに書き換えて。
GOOGLE API KEYはこちらで取得。

カラーミーで大カテゴリーの下に小カテゴリーの一覧を表示する

カラーミーでは小カテゴリーの中に商品を全部振り分けてしまうと大カテゴリーのリンクをクリックしても小カテゴリーの一覧が表示されるだけで小カテゴリーの商品は一覧表示されない。
大カテゴリーをクリックした先で小カテゴリーに登録されている商品一覧を表示させたいというカスタマイズ依頼のメモ。
カテゴリーを画像表示することが原則です。
「商品検索結果ページ」の上部に下記のようにしてcategory_id とctという変数をアサインする。
$search_category という変数に大カテゴリーの名前が入ってくるのでそれをif文で振り分ける。
category_id は大カテゴリーのIdを、
ctは大カテゴリーに属する小カテゴリーの数を入力する。

<{if $search_category == "MEN'S WEAR" }>
<{assign var="category_id" value="787440"}>
<{assign var="ct" value="8"}>

<{elseif $search_category == "LADIE'S WEAR" }>
<{assign var="category_id" value="787441"}>
<{assign var="ct" value="9"}>
・
・
・
<{elseif $search_category == "OTHERS" }>
<{assign var="category_id" value="787443"}>
<{assign var="ct" value="4"}>
<{/if}>

その後ctがアサインされているかどうかで検索結果とするのか大カテゴリーの一覧表示とするのか
振り分ける。
さらにiとkという変数を作り初期値に1をいれてループの回数($ct)回るたびにインクリメント
させると”<{$category_id}>_<{$i++}>.jpg”で画像が取得できる。リンクは”?mode=cate&cbid=<{$category_id}>&csid=<{$k++}>”です。

<{if isset($ct)}>
<a href="./">TOP</a> > <a href='/?mode=srh&amp;amp;cid=<{$category_id}>%2C0'><{$search_category}></a>
<!--// パンくずナビ -->
<{assign var="i" value="1"}>
<{assign var="k" value="1"}>
<div id="subcate"><div class="title">sub categories</div>

<{section name=cate loop=$ct }>
<div style="float: left;margin:10px 12px 0 0;">
<a href="?mode=cate&amp;amp;cbid=<{$category_id}>&amp;amp;csid=<{$k++}>">
<img src="http://img15.shop-pro.jp/PA01084/170/category/<{$category_id}>_<{$i++}>.jpg"></a>&amp;amp;nbsp;&amp;amp;nbsp;
</div>

<{/section}>
<br class="clear" />
</div>
<{else}>

<br class="clear" />
<!-- ページタイトル -->
<strong>|検索結果</strong>

<br />
&amp;amp;nbsp;&amp;amp;nbsp;ヒット件数:<strong><{$productlist_num}></strong>件
<br />
検索条件 [カテゴリー]:<{if $search_category!=""}><strong><{$search_category}></strong><{/if}>
&amp;amp;nbsp;&amp;amp;nbsp;[検索文字]:<{if $search_keyword!=""}><strong><{$search_keyword}></strong><{/if}>
<br />
<br />
<{/if}>

商品一覧、商品詳細ページのパンくずリストも変更が必要なため、以下のように変更。

ここにはグループ名がくることもあるのでグループID($group_id)もアサインしてif文で振り分ける。

<{if $search_category == "MEN'S WEAR" }>
<{assign var="category_id" value="787440"}>

<{elseif $search_category == "LADIE'S WEAR" }>

<{assign var="category_id" value="787441"}>

・
・
<{elseif $bid_name == "sassy" }>
<{assign var="group_id" value="67887"}>
<{elseif $bid_name == "conbi" }>
<{assign var="group_id" value="67888"}>
・
・
<{elseif $search_category == "OTHERS" }>
<{assign var="category_id" value="787443"}>
<{/if}>
<{ if $product.id != "" }>
<!-- パンくずナビ -->
<a href="./">TOP</a> <{if $category_id!=""}>&gt; <a href='?mode=srh&cid=<{$category_id}>%2C0'><{$bid_name}></a><{elseif $group_id!=""}>
&gt; <a href='?mode=grp&gid=<{$group_id}>'><{$bid_name}></a><{/if}><{if $sid_name != ""}> &gt; <a href='<{$sid_link}>'><{$sid_name}></a><{/if}><{if $product_name != ""}> &gt; <a href='<{$product_link}>'><{$product_name}></a><{/if}>
<!--// パンくずナビ -->
<br />
・
・
・

完全自動ではないが、HTMLを全部書き出すよりはイイ!
画像登録はカテゴリー管理から登録すること。

Diceが実行されない Fedora

Diceの更新が止まってしまうという現象に悩まされたが、解決。Diceが実行されないとホームページも表示できないし、メールも送受信されないので困っていました。
以下のように設定をしました。

dice
参考URL:http://www.aconus.com/~oyaji/ddns/ddns_linux.htm
Dice:http://www.hi-ho.ne.jp/yoshihiro_e/dice/

jqueryをgoogleのjsapiで読み込む

javascriptのファイルを置けないサーバーでもjqueryを使えるようにしたときのメモ。
こう書くことで自分のサーバー上にjqueryのjsファイルがなくてもjqueryを書くことができる。便利。

<script>
google.load("jquery", "1.2.3");
google.load("jqueryui", "1.7.1"); </script>

php.iniのmbstringで設定した文字コードとスクリプトの文字コードが違う場合の文字化け

だいぶ前に作成したプログラムを久々に動かしてみたところ、EUC-JPで作成されていたため(php.iniの文字コード設定はUTF-8 )ブラウザで表示されるたびに文字化けが起こる。ブラウザの「表示」→「エンコード」でEUC-JPに直せば問題なく表示できるのだが、ページを遷移したりリロードするたびに直さなくてはならない。

その際のおまじないがこちら。

mb_http_output('EUC-JP');
mb_internal_encoding('EUC-JP');
ini_set("default_charset", "EUC-JP");

これをすべてのスクリプトが読み込む部分に記述した。文字コードがphp.iniと合っていたとしても上記のように記述しておくと環境が変わっても文字化けしなくてよいかも、と思った。ちなみにUTF-8の場合は下記のように。

mb_http_output('UTF8');
mb_internal_encoding('UTF8');
ini_set("default_charset", "UTF8");

文字化けなんて、もうしない!

phpのバージョンが変わらない[Windows php5.2.9]

かなりはまりました。phpとApacheのインストールはWindows Serverで何十回も行っているのですが、バージョンアップは初でした。で、はまりました。

以前のバージョンはPHP5.2.3なんですが今回バージョンアップを試み最新バージョン(PHP5.2.9)のインストーラーをダウンロードしてきました。バージョンアップする必要なし!というつっこみはおいといて・・・

で、以前のバージョンのはインストーラではなくてバイナリをダウンロードしてきたものでしたので、そのままゴミ箱へ。そして最新バージョンのをインストーラーでインストール。でApache再起動でOK!と思っていました。

でも、phpinfo()でみると以前のバージョンのまま・・・なぜ??

PHP何度も削除してインストールしてを繰り返しましたが結局だめでした。最終的にはバイナリ版を持ってきて丸ごとフォルダにコピーしてもやっぱりバージョンは変わらない・・・

コマンドラインから php -v

とやると、PHP5.2.9と出るんです。でもphpinfo()だとPHP5.2.3と出るんです・・・。

でもって

echo phpversion();

でも PHP5.2.3と出るんです。

echo PHP_VERSION

でも PHP5.2.3と出るんですよ。

でも、解決しました。原因はバイナリ版を以前コピペでインストールしたとき、php.iniとphp5ts.dllがC:\WINDOWSにコピーしてあったんです。それがPHP5.2.3を表示させている原因でした。php.iniはこの現象の原因とは関係ないですが。

C:\WINDOWSにあるphp5ts.dllを削除
ついでにC:\WINDOWS\php.iniも紛らわしいので削除(インストーラではphp.iniはphpをインストールしたディレクトリに置かれ、Apacheのhttpd.confに勝手にINI_PATHを書き込んでくれるため)

解決!4時間くらい悩みました。