Development memo

Rough Consensus And Running code

jquery: $(this).attr(‘href’)はIEだとフルパス!何故!?!

とあるfunction内で、a href="相対パス"のパスの値を取得して、
var dt = $(this).attr('href');
$("input[name='check_in']").attr('value',dt);

としていたんだけど(FireFox)、お客さんに渡す際、IEユーザーが多いのでIEでテストしてみたら、値が取れない!この場合はa href~”2006/6/9″とかなってると、
Firefoxの場合
dt = 2006/6/9
IEの場合
dt = ベースURL/2006/6/9
となってかえってきてしまい、正常に処理できなかった。
ということで、対策は、rel属性に渡したい日付をいれ、

var dt = $(this).attr('rel');
$("input[name='check_in']").attr('value',dt);

これで解決!

パソコンが身罷られた←でも治った・・・

今朝、突然PCが立ち上がらなくなった。BIOSの画面すら出てこない・・・突然の死、今朝グラビアの上原美優さんの自殺のニュースを聞いていたのもあって、突然の死とはこのように来るのか・・・と思った。一応データのバックアップはあるものの、PCが動かないことには仕事ができないので、とりあえず、PCのふたを開けて掃除。

ずーっと掃除していなかったので、ファンには綿埃がいっぱいでした。

これでどうだ、と思い、電源をつけてみるも、前と変わらず・・・・しばらく考えました。昨日までは何の問題もなかったし、アプリをインストールしたわけでもないし、システムもいじってないし・・・。

ということで、救急車(自分の車)にのせて、菓子折りを持って病院へ(以前お世話になっていたシステム会社)!

するとパソコン修理のプロのYさんの手により、HDDやメモリ外せるものは全部外し、原因追求が始まりました。原因の追究はメモリ→グラフィックボード→電源→マザーボードの順に追及していき、結果、マザーボードに原因があることがわかりました。GIGABITEの13、000円のマザーボードが逝ってしまったようです。

しばらく、なつかしい話をして、新しいPCを買うか、マザーボードを買うか、なんて話しているうちに、分解されたPCをYさんがもとに戻してくれていました。

最後に電源を入れてみると・・・・・

ついた!

何事もなかったかのようにつきました。

結局原因は不明のままですが、Yさんの話によると、いろいろと差込が甘くなっていて、さし直したら治ることもよくあること、と言ってました。

さすがYさん、感謝感謝です。

みなさん、PCが壊れた際は、掃除をして差込みをし直して見ましょう。といっても、PCが立ち上がらないときはインターネットで情報を集めることができないんでしょうけど・・・フフフ。

OpenID導入で躓く・・・Windows&Linuxまとめ

OpenIDをOpenCartに導入したときのメモ

簡単に出来るという声も多いので導入してみたが・・・完全に動作するまで3日かかったヨ・・・。

必要なもの

  • サンプルをこちらでダウンロード
  • cacert.pemをこちらでダウンロード
  • JanrainのPHP OpenID Libraryをこちらからダウンロード

で、サンプルをphpが動くサーバーにまず置く。

でPHPのショートタグを許可していない人はここですでに動かないので、php.iniが触れる人はショートタグを有効にするし、

<?php echo $xxx ; ?>を<?=$xxx ?>でも動くように設定を変更する (どんな設定か忘れた)。

php.iniが触れない人は、<?で始まっているスクリプトをすべて<?phpに変更する。

上記の<?=の部分もすべて<?php echo に変更する。

次に、PHP OpenID Libraryを解凍したフォルダ内のAuthだけ必要なので(厳密にはAuthフォルダ内のOpenIDフォルダとYadisフォルダとOpenID.php)それらの相対パスをサンプルのcommon.phpのLine:92で書き換える。

ダウンロードしたcacert.pemもcommon.phpのLine:10で書き換える。

phpinfo()でcurl OpenSSLが使えるか確認をしておく(common.phpでも確認してるけど)。

これで動くはずです。

login_view.phpのログインのアドレスが、

<A href=”login.php?id=https%3A%2F%2Fmixi.jp”><IMG src=”http://winofsql.jp/test/openid/openid_sample/login_btn002.gif” border=0></A>
<br><br>
<A href=”login.php?id=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid”>Google でログイン</A>
<br><br>
<A href=”login.php?id=https%3A%2F%2Fme.yahoo.co.jp”>Yahoo でログイン</A>

こうなっているので、

<A href=”login.php?id=https://mixi.jp”><IMG src=”http://winofsql.jp/test/openid/openid_sample/login_btn002.gif” border=0></A>
<br><br>
<A href=”login.php?id=https://www.google.com/accounts/o8/id”>Google でログイン</A>
<br><br>
<A href=”login.php?id=https://me.yahoo.co.jp”>Yahoo でログイン</A>

に直す(直さないと私の環境ではだめだった。)

yahooはcacert.pem不要だと思っていたら、間違いでした。

二つの問題を残してOpenIDは完成しました。

  1. Returntoにパラメータつきのパスを設定するとログインは成功してもfailureが帰ってきてしまいます。理由、・・・それで数日使いましたが、結局追求できず、断念;;
  2. ポップアップウィンドウから実行しようとうすると、Yahooでは認証画面が出るけど、mixiやGoogleでは認証画面が出ない。InlineFlameを使って、Jqueryでモーダル化させての実験結果。こちらも、疲れて断念;;

上記二件について、良案お持ちの方は是非とも教えてくださ~~い!!

OsがLinuxの時はファイルストアのパスのパーミッションが有効かどうか確認する必要があります。

MYSQLのアップデート文の作成

mysqlではサブクエリ FROM 節と更新対象の両方に同じテーブルを使用することはできないらしいです。ちょっと解決に時間がかかったのでメモ。

update article_description set language_id = 2
where (Select * from article a Left JOIN article_description ad ON ( a.article_id= ad.article_id ) where ad.language_id = 1 and a.store_id= 2)
上記は
#1241 – Operand should contain 1 column(s)
のエラーになる。

解決したsqlは、
update article_description set language_id = 2
where article_id in(select x.article_id from
(Select a.article_id from article a Left JOIN article_description ad ON ( a.article_id= ad.article_id ) where ad.language_id = 1 and a.store_id= 2 ) as x)

グーグルの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を全部書き出すよりはイイ!
画像登録はカテゴリー管理から登録すること。

  • What I'm Doing...

    Posting tweet...

  •  

    2012年5月
    « 6月    
     123456
    78910111213
    14151617181920
    21222324252627
    28293031