10月
28
2009
0

[PHP]YahooとGoogleのリファラーからキーワードを抽出する
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

アクセスログのrefererからキーワードを抽出するメモです。
とりあえずヤフーとグーグルだけ。

// $refererにリファラが入っているとして…
if (strpos($referer, "www.google.co.jp/search") !== false) {
	// Google
	ereg("[?&]q=([^&]+)", $referer, $tmp);
	// もしかしたら文字コード変換もしなきゃかも
} elseif (strpos($referer, "search.yahoo.co.jp")) {
	// Yahoo
	ereg("[?&]p=([^&]+)", $referer, $tmp);
	// 検索クエリーのエンコーディングを取得
	ereg("[?&]ei=([^&]+)", $referer, $encoding);
	if ($encoding[1] != "UTF-8") {
		// 文字コードがUTF-8以外なら、UTF-8に変換(urldecode⇒mb_convert_encoding⇒urlencode)
		$tmpKeyword = mb_convert_encoding(urldecode($tmp[1]), "UTF-8", $encoding[1]);
		$tmp[1] = urlencode($tmpKeyword);
	}
}

というような感じでやってますが、もしかしたらまだ穴があるかもしれません。
また、もっと効率のいい方法もあると思います。もしご教示頂ける方がいらっしゃいましたら、コメント欄やトラックバックで教えていただけるととっても嬉しいです。

【注意事項】

  • Googleの方はエンコードの変換処理を入れなくても(とりあえず僕が持っているログでは)問題が無いので、入れてません。
  • ちなみに他の検索エンジンからの訪問は、全て合わせて5%程度なので、うちでは無視してます。(検索キーワードの抽出において)
Written by suzukenn in: メモ | タグ:
10月
08
2009
0

[CakePHP][jQuery]Ajaxで論理値を変更(自分用メモ)
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

例えば、「入金済み」「未入金」みたいなフラグがあったとして、
jQueryを使って画面変遷無しで変更する方法のメモ。
※あくまで自分用のメモです。読んで頂いた方に理解できるように書く自信がありません。ごめんなさい。

やりたいこと

cs_20091008_1

変更操作する一覧形式のビュー

【サンプル】
一覧形式のビューの一番上に下記コードを記述
一覧表の入金ボタン(入切)には、onclickでchangePayFlag(id);return false;を記述 *1

<?PHP
	echo $javascript->codeBlock(
'
// 入金ステータス変更
function changePayFlag(id) {
	$.ajax({
		url: "'.$html->url("change_pay_flag").'", // ここで変更処理するアクションを指定($html->urlを使用)
		type: "POST", // メソッドを指定(GETでもいい)
		data: {id:id}, // POSTの場合はデータをセット(コントローラでの受け取り方にコツあり)
		dataType: "html",
		timeout: 10000,
		error: function(XMLHttpRequest, textStatus, errorThrown){
			// 変更が失敗したときの処理
			alert("入金ステータスを変更できませんでした");
		},
		success: function (data) {
			// 変更が成功したときの処理
			var info = eval("("+data+")");
			imgSrc = $("#paidImg"+id).attr("src");
			if (info.paid == "paid") {
				imgSrc = "'.$html->url("/img/icons/money_add.gif").'";
				imgAlt = "入金済み";
			} else {
				imgSrc = "'.$html->url("/img/icons/coins_delete.gif").'";
				imgAlt = "未入金";
			}
			$("#paidImg"+id).attr("src", imgSrc).attr("alt", imgAlt); // 対象の画像とAltを差し替え
		}
	});
}
',
		array("inline" => false)
	);
?>

入金フラグ変更処理

【サンプル】

	// 入金状態変更
	function change_pay_flag() {

		$this->layout = "ajax";
		Configure::write("debug", 0);

		$params = $this->params['form']; // ajaxでPOSTしたデータは$this->params['form']で取得

		if (!isset($params['id'])) {
			$this->flash("引数の指定がありません", "index", 2);
			return;
		}

		$order = $this->Order->read(null, $params['id']);

		if ($order['Order']['pay_flag'] > 0) {
			// 入金済みだった場合は未入金に
			$changeFlag = "0";
			$results['paid'] = "unpaid";
		} else {
			// 未入金だった場合は入金済みに
			$changeFlag = "1";
			$results['paid'] = "paid";
		}

		$this->Order->id = $order['Order']['id'];
		$this->Order->saveField("pay_flag", $changeFlag);

		$this->set(compact("results")); // ここでセットしたresultsは$.ajaxのコールバックに使用する

	}

入金フラグ変更処理のビュー

【サンプル】

<?PHP echo $javascript->object($results); // 配列をJSON形式に変換 ?>

補足

一覧形式のビューに追加したjavascriptコードの$.ajax({success:~~});に書いたvar info = eval(”(”+data+”)”);部分は、入金フラグ変更処理のビューで取得したJSON形式のデータをjavascriptの変数に展開?するために書いています。*2

  1. 正しいことかどうかわからないけど []
  2. 僕もわかってないので説明できないです>< []
Written by suzukenn in: 記事 |

| I have been indebted to Aeros Theme. | Background image owner is NASA.