φ(..)メモとして残しておこう… -23ページ目

MACのbootcampでタッチパッドを無効にする。

MACBOOKにbootcampでwindows7を入れて使っているのですが、文字の入力時にいちいち反応するのがウザいので、無効にする。

デバイスマネージャーの「マウスとそのほかのポインティングデバイス」に「HID 準拠マウス」ってのがいくつかあって、そのうちのひとつがそれ。

自分の環境の場合には、
「USB入力デバイス」
「Apple Multitouch Mouse」
「Apple Multitouch」
ってのが3つ並んでて、そのうちの
「Apple Multitouch」
を無効にしたら、反応しなくなりました。

通常、自宅で使用する場合にはUSBマウスを使用するので、無駄に反応してほしくない…と。

外で使う場合には、無効にしたものを有効にすればOK。
もちろん、マウスを使用して有効にしておかないとまったく反応せず使えないってことになるので気をつけるべし。

tinyMCEの改行。

TinyMCEで[Enter]キーを押すと、<p>タグでの改行になってしまいます。

[Shift + Enter]で<br />出来ます。

いやぁ、最初は気が付かなかった。
ちゃんとドキュメント読まないとね…。

.htaccessで、PHPのファイルアップロード容量を増やす。

//アップロードしたファイルがPDFでなければ、処理を行わない
if ($_FILES['pdffile']['type'] == "application/pdf"){

}

こんな感じで、PDFファイルかどうかを判定するアップローダーで、どうあがいてもアップロードできないファイルが。

なんでだろ…。
と思ったら、アップロードできるファイル容量制限をオーバーしていた。

「php.ini」で設定出来ればいいのだけれど、それが出来ないサーバーなので「.htaccess」に以下を記述。

php_value upload_max_filesize 20M
php_value post_max_size 20M


とりあえず、20MBくらいでいいか…。

Mを入れないと、バイト指定になっちゃうので気をつけましょう。
バイト指定の場合は1M=1024byteで計算して記述しませう。

FORMのTEXT入力時に、Enterキーをブロック。

HTMLのFORMデータの入力の際、<input type="text">の部分に、Enterキーを無効にする処理をしておかないと、間違えてEnterキーを押してしまったときに、不完全なデータがPOSTされてしまう。

なので、JavascriptでもってEnterキーをブロックしておくこと。

まずは、下記を「entblock.js」というファイル名で保存。

function BlockEnter(evt){
evt = (evt) ? evt : event;
var charCode=(evt.charCode) ? evt.charCode :
((evt.which) ? evt.which : evt.keyCode);
if ( Number(charCode) == 13 || Number(charCode) == 3) {
return false;
} else {
return true;
}
}


このファイルを、使用したいFORMページに読み込む。

<script type="text/javascript" src="entblock.js"></script>


あとは、使用したい<input>に指定するだけ。
こんな感じ。

<input type="text" name="example" value="" onkeydown="return BlockEnter(event);">


これで、textボックスの中でEnterキーを押しても、Submitの誤作動を防げる。

BOM

メモ帳で編集したファイルに、勝手にBOMが付いてしまう…。

一部のサーバーでは、BOMが付いているとApacheのRewright機能が動かなくて
「Internal Server Error」
になってしまう。。。

もし「Internal Server Error」が出たら、BOMの有無を確認しよう。

iFrameのサイズを取得して、自動サイズ調整。&「5002 : 関数を指定してください」回避

ヘッダ部分に以下を記述。

<script language="javascript" type="text/javascript">

function iFrameHeight() {
var h = 0;

// Opera
if (window.opera)
{
h = document.getElementById('example').contentDocument.getElementById('inHeight').offsetHeight + 20;
document.getElementById('example').setAttribute("height",h);
}

// Safari ~ Chrome
else if (/WebKit/i.test(navigator.userAgent))
{
var posVersion = navigator.userAgent.indexOf("WebKit/");
var version = navigator.userAgent.substring(posVersion + 7, posVersion + 10);
if (parseInt(version) >= 523) // Safari 3+
{
document.getElementById('example').style.height = '20px';
}
else // Safari 1+ or 2+
{
return document.getElementById('example').style.height = '152px';
}
h = document.getElementById('example').contentDocument.height;
document.getElementById('example').style.height = h + 'px';
}

// IE
else if( document.all )
{
h = document.frames('example').document.body.scrollHeight;
document.all.example.style.height = h + 30 + 'px';
}

// Misc
else
{
h = document.getElementById('example').contentDocument.height;
document.getElementById('example').style.height = h + 65 + 'px';
}
}

</script>



BODY部分に以下のように記述する。


<iframe
id="example"
name="iframe"
src="読み込みたいページのソース"
width="100%"
height="100%"
scrolling="no"
align="top"
frameborder="0"
onload="iFrameHeight()">
</iframe>



しかし…本当に使いにくいな…アメブロのエディタは。




追記。

// IE
else if( document.all )
{
h = document.frames('example').document.body.scrollHeight;
document.all.example.style.height = h + 30 + 'px';
}

の青い部分を


h = document.frames.example.document.body.scrollHeight;

にしとかないと、IE9で「5002 : 関数を指定してください」ってエラーが出るょ。

それから、クロスサイトには無効です。
なので、一度クロスサイトのコンテンツをまるっと(サーバー上に)持ってきて、そいつをiFrameで読み込むようにしないとです。

まあ、特殊な案件でない限りそんなことをする必要はないのだけれど、MySQLが使えない・php-mysqlが入っていないサーバー上からMySQLを使って処理をしたいなんて案件の場合には…。

サーバー引越しちゃえば?って言いたいけど、そうもいかないクライアントもいたりして…。
大変です。

ほかのサイトから本店のEC-CUBEカートをつかう。その2

支店から本店のカートを使用した場合、どの支店からカーとの使用があったかをデータベースに保存したいので…。

data/class/helper/SC_Helper_DB.php


/*会員情報から SQL文の値を生成する.

の部分に

function sfGetCustomerSqlVal($uniqid, $sqlval) {
$objCustomer = new SC_Customer();
// 会員情報登録処理
if ($objCustomer->isLoginSuccess(true)) {
// 登録データの作成
$sqlval['order_temp_id'] = $uniqid;
$sqlval['update_date'] = 'Now()';

      //こいつを追加しちゃう
$sqlval['"dtb_order"に新たに追加したカラム'] = $_SESSION['from_url'];


オーダー情報の中にデータを突っ込んでしまい、処理。

これで、その注文はどのサイトから呼び出されたカート内で行われた注文なのかがわかる。

もちろん、これだけでは動かない。
ちゃんとほかにも設定しなきゃならないところはあるけれど…。

DBを弄って、アフィリエイト登録できるようにして、リファラでどこから飛んできたか管理すれば…。

EC-CUBEを使って、ちょっとしたアフィリエイトサービスまでできちゃいますな。

ほかのサイトから本店のEC-CUBEカートをつかう。

まずは、支店のサイトから本店のカートを使用するためにデータをPOST。

<form name="products" id="products" method="post" action="http:/○○/html/products/detail.php?product_id=商品コード">
<input type="hidden" name="mode" value="cart" />
<input type="hidden" name="product_id" value="商品コード" />
<p>数量:</p>
<select name="quantity">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<p class="botton">
<a href="javascript:void(document.products.submit());">
<img src="../../image/cart-156-52.jpg" width="156" height="52" alt="カゴに入れる" name="cart" id="cart" />
</a> </p>
</form>


こんな感じで、本店の商品詳細ページにカートのデータをPOSTする。

で、
/data/class/pages/products/LC_Page\/Products_Detail.php
のカート処理の最後で

//HTTP_REFEREをセッション変数に入れておく
//(後々、どの支店のカートからの購入か判断するため)
$_SESSION['from_url'] = $_SERVER['HTTP_REFERER'];

print <<< EOF
<script>
var url = document.referrer;

if( ( n = url.indexOf("本店サーバー(EXAMPLE.JP)") != -1 ) ){

//本店からなら、mediaboxを開く
parent.Mediabox.open('http://○○/html/cart/index.php', '<a href="" onClick="function.close()"></a>', 'mediabox[external]');

}

if( ( n = url.indexOf("本店サーバー(EXAMPLE.JP)") == -1 ) ){

//そうでなければ、支店用のカートページへ移動
parent.location.href='http://EXAMPLE.JP/cart.html';
}
</script>
EOF;



ってな具合でカート処理を分ける。
別に、分けなくてもいいんだろうけど、支店のデザインが本店と違っていたら、カートも違うデザインにしたいので…。

tinyMCEの日付入力のフォーマット変更

tinyMCEの日付入力のフォーマット変更

jscripts/tiny_mce/langs/ja.js

date_fmt":"%Y-%m-%d"

date_fmt":"%Y.%m.%d"
に変更すると、2000-01-01から2000.01.01に変更できる。

Call to undefined function mysql_connect()

ショップサーブの話。

#!/usr/local/bin/php

これをphpに書くことで、phpプログラムが使えるようになるのは分かった。

でも、MySQLは使えないようですね…。

Fatal error: Call to undefined function mysql_connect()

くっそ…