Archive for category cakePHP1.2

プラグイン付属のスキーマをどうやってcreateするのか悩んでしまった。

プラグイン付属のスキーマをどうやってcreateするのか悩んでしまった。
参考にしたのは、[CakePHP]プラグインに付属のスキーマをcreate

以下、解決した方法。

一応、これで何とかなったんだけど、違ってたら教えてください。

schema run create [schema] -app [project] -path [project]/plugins/****/config/sql -name [schema file name]

app内で複数のプロジェクトを管理してるので、こんな感じになったが、それがわからず、ちょっと悩んだ。。。

-name [schema file name]のところは、ファイル名が、schema.phpじゃない場合。

まあ、自分用の覚書ということで。

No Comments

Ktaiライブラリー内に、画像サイズの縦横比を判別して画像表示するメソッドを作ってみた。

Ktaiライブラリー内に、画像サイズの縦横比を判別して生成するメソッドを作ってみました。

画像サイズを調べて、比率を計算して$ktai->image内に設定する作業が面倒臭かったのと、製作中のサイトに縦長や横長の画像が混在していたのが理由です。

単純に横サイズを指定すれば、縦も計算してくれるだけのものですが、画像サイズを調べなくていいので作業がはかどります。
※表示サイズを変えてるだけですので、重い画像を指定しないように!
縦横のサイズを計算した後は、最終的にktaiライブラリー内のimageに放り込んでいます。
ですので、高機能携帯にも対応。という事になります(ありがとう!Ktaiライブラリー!)。

//$imgurl=[画像ファイル名]
//$width_size=[画像の横幅]
//$alt=[alt]
//何らかの理由で画像が取得出来なかった場合、NoImageの画像を表示
function img_auto_strech($imgurl = null, $width_size = 240, $alt = null){

	$err = false;

	if(!empty($imgurl)){
		//画像ファイルをフルパスにする
		//IMG_URL_PATH は bootstrapに設定
		//ex. define('IMG_URL_PATH', 'home/***/cake/webroot/img/');
		$imgurl_fullpath = IMG_URL_PATH . $imgurl;

		if(!file_exists($imgurl_fullpath)){

			$err = true;

		}else{

		  //画像のサイズを取得し、計算して縦・横を合わせる
		  list($width_m, $height_m, $type, $attr) = getimagesize($imgurl_fullpath);

				$height = $height_m* $width_size / $width_m;
				$width = $width_size;

		 	//Ktaiライブラリ内のimageに放り込んで表示
			echo $this->image($imgurl, array('width' => $width, 'height' => $height, 'alt' => $alt));

		}

	}else{
		$err = true;
	}

		//画像がない場合の処理
		if($err == true){

		//no imageの画像
		echo $this->Html->image('noimage240.jpg', array('width' => '240', 'alt' => 'No Image'));

		}

}

使い方

//VIEW内に設定
//sizeが通常の携帯(240px)の場合
//altなしの場合
echo $ktai->img_auto_strech('hoge.jpg');

汎用性を持たせる為、実際に利用しているコードを書き直してます。
試してないので、エラーでるかも。

もしでたら報告して下さい(人まかせかい!)

masapさん!こんなのも作ってみましたが、どうですか?

No Comments

Ktaiライブラリ内にGoogle Static Maps APIが使えるようにしてみる

携帯でGoogleMapを利用する時、画像扱いで表示してくれるGoogle Static Maps APIですが、
Ktaiライブラリに追加してみました。

とっても簡単です。

//------------------------------------------------
//Google Static Maps API  img streching.//center=[中心の緯度],[中心の経度]
//&zoom=[ズームレベル]//&size=[画像の横幅]x[画像の高さ]
//&maptype=[mobile or roadmap]
//&markers=[マーカーの緯度],[マーカーの経度],[色][アルファベット]
//&key=[APIキー(GoogleMapと共通)]
//------------------------------------------------
function googlemapImg($lat = null, $lon = null, $zoom = 17, $i_width, $i_height , $google_key){

		if(!empty($lat) && !empty($lon)){//座標値があるなら
			$arr = $this->_lib3gk->stretch_image_size($i_width, $i_height);
			$i_width  = $arr[0];
			$i_height = $arr[1];
			$cont = 'http://maps.google.com/staticmap?center=' . $lat . ',' . $lon . '&markers=' . $lat . ',' . $lon . ',red&zoom=' . $zoom . '&size=' . $i_width . 'x' . $i_height . '&key=' . $google_key;

			return $this->Html->image($cont);

		}else{

			echo '<div align="center">地図情報はありません<div>';
		}

}

で、
実際にVIEWに書く場合。

//viewに書く
//GOOGLEKEYはbootstrap内に設定したら便利です
<?php $ktai->googlemapImg($lat,$lon,$zoom,240,300,GOOGLEKEY);?>

&maptypeに対して指定していませんが、問題なく動きます。

本当はガシガシとマップを動かしたいんだけど、「制限事項として1ユーザ(1IPアドレス)当たり、表示は1日1000種類の画像まで」という制限があるらしいので、ちょっと検討中。。。

2010/4/22追記

下記の事がGoogleに表記されてました。
以下、引用。
Google Static Maps API の使用でも、ビューアごとに要求できる (異なる) 画像は 1 日あたり 1,000 枚を上限としています。この制限は「キー」ごとではなく、「ビューア」ごとの割り当て数ですので、大半のデベロッパーはそれぞれの割り当て数を超える心配はありません。また、同じ画像を要求する場合、通常この制限数にカウントされるのは最初の要求だけです。

つまり、簡単に言えば、あまり深く悩まなくていいってこと?

2010/4/23追記

ソースをちょっと書き直しました。
前回はエラー回避のことを無視したコード内容でしたので、そこら辺を修正。
逆に自由に触ってもらえればいいかな?と思って主要部分だけにしてたんですが。
ま、一応こんな感じで。。。

No Comments

Eclipse PDT(PHP Development Tools)環境を試してみた

自分の開発環境が納得できずに、何年もたってしまった今日この頃・・・。
なぜか突然Eclipseのことを思い出し、今PHPでの環境ってどうなってるのかな?と思い、ちょっと調べてみようと。
それこそ、Eclipseは多分5年前くらいに一度挫折してるので、記憶から消してた(笑)

ググってみると・・・。

今はPDT(PHP Development Tools)っていう環境がフリーで構築出来るという、すばらしいお話が!
さっそく試してみよう!と。
参考にしたのは、WP: ローカル環境の構築 – XAMPP+Eclipse PDT

XAMPPは、製作にかかせないのでとっくに入ってます。
で、肝心のPDTは?

PDT 2.1 SR-2 All In Ones / Eclipse PHP Package

よくわからんから、とにかく最新版ダウンロード。

インストール。
一旦起動して、終了。

で、日本語化。
Eclipse 日本語化言語パック (サードパーティ版)

eclipse フォルダ内の features と plugins フォルダを丸ごと上書き。


Pleiades 本体ダウンロード、安定版の1.3.1

これをDLしてfeaturesとplugins フォルダを丸ごと上書き。

さらに、Eclipse のエディタで全角空白、半角空白、タブ、改行(LF、CRLF、CR)を表示可能にするプラグインを追加。
Pleiades – Eclipse プラグイン日本語化プラグイン

plugins フォルダを丸ごと上書き。

で、EclipseフォルダのEclipse.iniに以下を追加。

-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

ちなみに、Linux/UNIXの改行コードに対応する為、メモ帳などでなく、ワードパッドで編集。
で、起動すると・・・。

OK!日本語になってる!
ちょろちょろと一部、英語だけど。。。これでいいのかな?

PHP PROJECTに、cakePHPのフォルダを選択して・・・。
おおー!出てきた!出てきた!

PDT

PDT

眺めること5分・・・。
使い方がわからん・・・ガク。

No Comments

空メール送受信をcakePHP1.2で作ってみた

cakePHP1.2で空メール送受信でも作ってみようと、
サーバーに.forwardを設定。
先にPHPでコードを書いて、動くかテスト。
送ってみるとバッチリ返信されてきたので、
たったの1時間ちょっとで出来ちゃった~と勢いづいて
cakePHPで試してみると・・・・動かない!
Command died with status 255:がでまくり。。。。
ここで、3時間程いじくりまわす・・・・。
で、ただの文法ミスだと気づく。。。くやしい!
で、cakePHPでもテストOK!
次は、メールを解析して、メールアドレスを取ってこないと。。。
と、いう事で色々調べて、PEARにライブラリーがあることを知った(遅いし!)
で、メール解析するPEAR::Mail_mimeDecodeをcakePHPにほうり込んで使おうとガシガシやってたんだが、またまたハマッた。
で、携帯メール解析とか、
マルチパートなメールを解析する PEAR::Mail::mimeDecode をラップするクラスとか、参考にやってたんだけど、動かないわ、エラーでるわで・・・。
で、中身をじっくり見てみると・・・。
インクルード関係がやっぱりおかしかった。

また使う時に忘れてハマリそうなのでメモ。

mineDecode.phpの65行目
require_once 'PEAR.php';
↓
App::import('Vendor','PEAR/PEAR', array('file' => 'PEAR/PEAR.php'));

で、肝心のメールアドレスの取得は

//名前付のメルアド
$from_text = mb_convert_encoding(mb_decode_mimeheader($structure->headers['from']),
mb_internal_encoding(), "AUTO");
//メルアドだけ取得
ereg("[0-9a-zA-Z_\.\-]+@[0-9a-zA-Z_\.\-]+",$from_text,$from);
$contents['from'] = $from[0];

てな感じで取得。
一件落着♪

何だかんだで1日かかったな・・・・。

No Comments

cakePHP1.2 一部のフィールドだけが保存されない

これ、メチャメチャはまりました。

テスト環境を終え、いざ本サーバーにあげて、さらにそのままデータベースの修正追加を行い、試してみると・・・。
まったく保存しない!

いくら触っても何をしても、さっぱり保存しない!
save($this->data)だから、そのまま丸ごと保存するはずなのに
何も起きない・・・。
理由がまったくわからないまま、スネて2日放置・・・。

で、ググって調べてみると、ありました!

なぜか一部のフィールドがsave()で保存できない!
ページ内に、こんな事が書いてありました。
「tmp/chache/modelsの下のキャッシュファイルを削除したら、解決した!」

その通り、削除して試してみたら、ガッツリ保存出来ました!
感謝!!
これ、絶対はまるし。

No Comments

cakePHP1.2でのQdmailの設定

Qdmail、これも単純な送信だと簡単なんだけど、
うちで使ってるサーバーから送るとヘッダー部分が見えるわ、改行がおかしいわで、結構悩んだ。
で、解決したのがこんな感じ。

//リセット
$this->Qdmail->reset();
//改行コードをCRLFからLFに変更
$this->Qdmail->lineFeed("¥n");
$this->Qdmail->unitedCharset('UTF-8');
$this->Qdmail->simpleReplace(true);

$this->Qdmail->to( $email , $name );
$this->Qdmail->subject('件名を入れる');
$this->Qdmail->from('***@***.com' , 'なんたら会社' );
$this->Qdmail->cakeText('本文' ,'エレメント名','レイアウト名');
//送信
$this->Qdmail->send();

エレメントの設定は
app/views/elements/email/text/
レイアウトの設定は
app/views/layouts/email/text/

本文は$contentで内容を設定しましょう。

No Comments

バリデーションの前にsetしないとスルーしてしまう

すんごいハマったので忘れないようメモ。
バリデーションが効かずにスルーするので、何で?って思ってたら
原因はこれだった。

//varidates通す前に、一旦モデルにセットしてやる
//これを忘れたらスルーしてしまう
$this->ModelName->set($this->data);
$this->ModelName->validates();

たったこの1行、setのし忘れの為に1日悩んだ・・・。

No Comments

elementの呼び出し方

よく忘れるのでメモ

hoge.ctpをelementsフォルダに保存。
で、
呼び出すctpファイル上に
<?php echo $this->renderElement(’hoge’); ?>
と記述すると呼び出される。

No Comments

cakePHP1.2 findでのDISTINCTの使い方

忘れないようメモです。

$stores = $this->Store->find('all',array('order'=>'name ASC',
'fields'=>'DISTINCT(UPPER(LEFT(name,1))) AS letter',
'conditions'=>array("UPPER(LEFT(name,1)) REGEXP '[A-Z]'")));

No Comments