スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
by MONOKo  at --:-- |  スポンサー広告 |   |   |  page top ↑

Stable1.2リリース

CakePHP 1.2 Finalがリリースされました
1月1日にリリースするのかなと思ってましたが。

ダウンロード
アドレス:http://cakephp.org/
ファイル:1[1].2.0.7962.zip (08/12/26)
スポンサーサイト
by MONOKo  at 23:08 |  未分類 |  comment (0)  |  trackback (0)  |  page top ↑

コンポーネントの作成

今回は、コンポーネント名は、「FileBehavior」とします。
自作のコンポーネントは/app/controllers/componentsにUPします。

file_behavior.php
<?php
class FileBehaviorComponent extends Object
{
var $controller = true;

//他のコンポーネントを利用する
var $components = array('Session');

function メソッド名 ( 引数 ){
//メソッドのロジックを記述します。

//モデルの読み込み
$model = & new Member();
$data = $model->findAll();
}
}
?>


コントローラに追加
作成した自作のコンポーネントをコントローラで使えるようにします。
var $components = array('FileBehavior');
$this->FileBehavior->メソッド名();


by MONOKo  at 17:41 |  component |  comment (0)  |  trackback (0)  |  page top ↑

アソシエーション

CREATE TABLE users(
	id int unsigned auto_increment primary key,
	name varchar(30) NOT NULL,
	created datetime default NULL,
	modified datetime default NULL
);

CREATE TABLE posts(
	id int unsigned auto_increment primary key,
	user_id int,
	comment text,
	created datetime default NULL,
	modified datetime default NULL
);
usersテーブルのみの場合のSQLは(条件なし)
SELECT `User`.`id`, `User`.`name`, `User`.`created`, `User`.`modified` FROM `users` AS `User` WHERE 1 = 1 

1対1のアソシエーション hasOne です。
user.php
<?php
class User extends AppModel
{
	public $name = 'Users';
	public $hasOne = array(
			'Posts' => array(
			'className' => 'Posts',
			'foreignKey' => 'user_id',
			'dependent' => false,
			'conditions' => '',
			'fields' => '',
			'order' => '',
		)
	);
}
?>
SQLは
SELECT `User`.`id`, `User`.`name`, `User`.`created`, `User`.`modified`,   `Posts`.`id`, `Posts`.`user_id`, `Posts`.`comment`, `Posts`.`created`,   `Posts`.`modified` FROM `users` AS `User` LEFT JOIN `posts` AS `Posts` ON   (`Posts`.`user_id` = `User`.`id`) WHERE 1 = 1 

1対多のアソシエーション hasMany です。
user.php
<?php
class User extends AppModel {
	var $name = 'User';
	var $hasMany = array(
			'Post' => array(
				'className' => 'Post',
				'foreignKey' => 'user_id',
				'dependent' => false,
				'conditions' => '',
				'fields' => '',
				'order' => '',
				'limit' => '',
				'offset' => '',
				'exclusive' => '',
				'finderQuery' => '',
				'counterQuery' => ''
			)
	);
}
?>
users_controller.php
$this->set('user_data', $this->User->find('all'));
by MONOKo  at 12:25 |  models |  comment (0)  |  trackback (0)  |  page top ↑

save()直後にIDを取得

save()直後にIDを取得をします。

$this->Post->create();
$this->Post->save($this->data);
$last_id = $this->Post->getLastInsertID()

by MONOKo  at 17:01 |  未分類 |  comment (0)  |  trackback (0)  |  page top ↑

PEAR::Calendarを使ってカレンダーを作ろう

PEAR::Calendarを使ってとりあえず簡単なカレンダーを作りたいと思います。
参考サイト:creative@interactive » CakePHPとカレンダー表示(2)

ダウンロード
アドレス:PEAR :: Package :: Calendar
ファイル名:Calendar-0.5.4.tar

Calendar-0.5.4.tarを解凍してCalendarフォルダにUPします。
/app
 └vendors
    └PEAR  <- 新規作成
      ├include_path.php  <- 新規作成
      └Calendar

include_path.php
<?php
define('CALENDAR_ROOT', dirname(__FILE__). DIRECTORY_SEPARATOR.'PEAR'.DIRECTORY_SEPARATOR.'Calendar'.DIRECTORY_SEPARATOR);
?>

calendars_controller.php
<?php
App::import('Vendor', 'include_path');
App::import('Vendor', 'Calendar_Month_Weekdays', array('file'=>'PEAR'.DIRECTORY_SEPARATOR.'Calendar'.DIRECTORY_SEPARATOR.'Month'.DIRECTORY_SEPARATOR.'Weekdays.php'));

class CalendarsController extends AppController {

public $name = 'Calendars';

function index(){
$Month = new Calendar_Month_Weekdays( date('Y'), date('m'), 0 );
$Month->build();
$this->set('month', $Month);
}
}
?>

index.ctp
<?php
while ($Day = $month->fetch()) {
if ($Day->isFirst()) {
echo "<tr>\n";
}
if ($Day->isEmpty()) {
echo "<td> </td>\n";
}
else {
echo "<td>" . $Day->thisDay() . "</td>\n";
}
if ($Day->isLast()) {
echo "</tr>\n";
}
}
?>
by MONOKo  at 13:32 |  PEAR |  comment (0)  |  trackback (0)  |  page top ↑

GoogleMapを利用する

BakeryにGoogleMapの記事があったのですが、いまいちピンとこないので原始的な手口で・・・
[lng]と[lat]に緯度経度[address]に住所を入力します。

デーブルの作成
CREATE TABLE points (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
lng FLOAT,
lat FLOAT,
address TEXT,
created DATETIME NOT NULL,
modified DATETIME NOT NULL
);


points_controller.php
<?php
class PointsController extends AppController {

var $name = 'Points';
var $helpers = array('Html', 'Javascript');

function index($id = null){
$this->set('id', $id);
}

function getjson($id = null){
$this->layout = "ajax";
Configure::write("debug", 0);

$params = array(
'conditions' => array('Point.id' => $id)
);
$points = $this->Point->find('first', $params);

if(!empty($points['Point']['address'])){
$code = mb_detect_encoding($points['Point']['address']);
if($code != "UTF-8"){
$points['Point']['address'] = mb_convert_encoding($points['Point']['address'], 'UTF-8', $code);
}
}
$this->set("points" ,$points);
}

}
?>


index.ctp
<div id="map" style="width:400px; height:400px"></div>

<script type="text/javascript">
//<![CDATA[
if (GBrowserIsCompatible()) {
var zpoint = 16;
var map = new GMap2(document.getElementById("map"));

map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.disableDoubleClickZoom();
var geocoder = new GClientGeocoder();

GDownloadUrl("<?php echo $html->url('/points/getjson/'.$id)?>", function(data){
var points = eval("(" + data + ")");

if(points.Point.lat !=null && points.Point.lng !=null){
createMarker(new GLatLng(points.Point.lat, points.Point.lng));
}
else if(points.Point.address !=null){
var address = points.Point.address;
if(geocoder){
geocoder.getLatLng(address, createMarker);
}
}
});

function createMarker(point){
map.setCenter(point, zpoint);
var marker = new GMarker(point);
map.addOverlay(marker);
}
}
//]]>
</script>


getjson.ctp
<?php echo $javascript->object($points)?>

getjson.ctpの表示される内容は、
{"Point":{"id":"1","lng":"139.745","lat":"35.6586","address":null,"created":"2009-12-10 00:00:00","modified":"2009-12-10 00:00:00"}}

となります。
by MONOKo  at 18:20 |  未分類 |  comment (0)  |  trackback (0)  |  page top ↑

DBを使わずにFormHelperを使用するときは

DBを使わない時はモデルに「var $useTable = false;」と記述すればよいが
FormHelperを使うと、DBに接続しに行ってしまいます。
のでモデルに

<?php
class Contact extends AppModel
{
var $useTable = false;
var $_schema = array('id' => array('type' => 'integer'));
}
?>


参考サイト
formヘルパーをテーブルなしモデルで使用するとエラーの回避方法CakePHP1.2b - CPA-LABテクニカル
by MONOKo  at 16:38 |  未分類 |  comment (0)  |  trackback (0)  |  page top ↑
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。