2007/8/30 木曜日

本番環境とテスト環境でのURLの差異を吸収する

このエントリをはてなブックマークに追加医鴻医сURL綏違後のはてなブックマーク被リンク数
Filed under: cakePHP — akky @ 18:57:28

cakePHPでは開発環境はDocumentRootの下に一式展開するのだが、本番環境をセットアップするときには余計なファイルを見られないようにapp/webrootをWebサーバのDocumentRootに設定せよ。と CakePHP プログラマーズ リファレンスガイドに書かれている。これを素直に実行すると開発環境と本番環境ではURLが異なってしまう。まさか、本番環境へリリースするときにわざわざ書き換えるなんてことはしたくない。でも、それを何とかしないと開発が行い難い。特に困ったのがCSS。app/views/layout/default.thtml に読ませるCSSを指定したときに、相対パスだと読める(たどり着ける)ページとたどりつけないページが出てきて、不統一っぷりが格好悪い。

そんな問題を解決してくれるのがHTMLヘルパー。よく使うのはHtmlHelper::link。内部へのリンクはこれを使い、”/コントローラ名/〜”と書くことで出力されるHTMLをヨロシクやってくれるので、作り手が環境を気にする必要がない。上のCSSの例だとdefault.htmlに

<?php echo $html->css(”common”); ?>

とするとapp/webroot/css/common.css を読み込むようにhref属性を作ってくれる。

これを知らなかったとには、試しに本番環境へアップロードしたらNotFoundになるのでワザワザソースを書き換えていた。そのときは、「こんなんじゃ使いモノにならないじゃん」とも思った。他の人も悩んでいると思い、ぐぐってみるとhttp://li-pton.com/wordpress/php/cakephp_virtual_host.htmlにバーチャルホストで解決させるという案があった。最初に見たときは「成る程!!」とも思ったが、これは、これで面倒だとも思った。

HTMLヘルパーで解決するのが(思想的にも)スマートと思う。URLを書くたびにHTMLヘルパーを使ったコーディングになってしまうのは、それはそれで、如何なものかとも思うが、現実的な方法かな。

2007/8/29 水曜日

pagination.phpを使ったページング

このエントリをはてなブックマークに追加pagination.php篏帥c若吾潟阿里呂討淵屮奪マーク被リンク数
Filed under: cakePHP — akky @ 22:19:17

cakePHPでページングをするです。http://bakery.cakephp.org/articles/view/paginationを見て3つのソースファイルをダウンロードしてviewとcontrollerを変更します。

簡単な説明

コントローラへの変更

<?php
class PostsController extends AppController
{
    var $name = 'Posts'; // for PHP4 installs
    var $components = array ('Pagination'); // http://bakery.cakephp.org/articles/view/67  からダウンロードしたコンポーネントを使う宣言
    var $helpers = array('Pagination'); //  http://bakery.cakephp.org/articles/view/68 からダウンロードしたヘルパーを使う宣言

    function index() {
        $criteria=NULL; // WHERE句に使う条件
        list($order,$limit,$page) = $this->Pagination->init($criteria); // コンポーネントの初期化
        $data = $this->Post->findAll($criteria, NULL, $order, $limit, $page); // コンポーネントで初期化された条件を使ってDBから読み込み

        $this->set('data',$data); 
    }
}
?>

viewを変更

<h1>Paginated Posts Index</h1>
<table>
<?php
$pagination->setPaging($paging); // Initialize the pagination variables ??よくわからんです。
$th = array (
            $pagination->sortBy('id'),
            $pagination->sortBy('title'),
            $pagination->sortBy('created')
); // Generate the pagination sort links
echo $html->tableHeaders($th); // Create the table headers with sort links if desired

foreach ($data as $output)
{
    $tr = array (
        $output['Post']['id'],
        $html->link($output['Post']['title'], "/Posts/View/{$output['Post']['id']}"),
        $output['Post']['created']
        ); // 1行分のtrを作成
    echo $html->tableCells($tr,array('class'=>'altRow'),array('class'=>'evenRow'));
}
?>
</table>
<? echo $this->renderElement('pagination'); // Render the pagination element http://bakery.cakephp.org/articles/view/69 からダウンロードしたelementを使ってページ番号のリンクを作成
 ?>

その他、判ったこと

  • app/webroot/img/nav/arrowleft.gifとapp/webroot/img/nav/arrowright.gifを用意すると次ページ、前ページを意味するイメージが表示される。変更したい場合は /app/views/elements/pagination.thtml を編集すればよい
  • 1ページに表示する件数を指定するにはコントローラで $this->Pagination->init($criteria) 前で $this->Pagination->show=件数 とする
  • 勝手にajaxとして動作する場合はコントローラーで $this->Pagination->ajaxAutoDetect=false とする。判断は /app/controllers/components/pagination.php の_checkAjax()が行なっている

2007/8/23 木曜日

GoogleMapを使って住所から緯度と経度を求める

このエントリをはてなブックマークに追加GoogleMap篏帥c篏膩綺腟綺羆のはてなブックマーク被リンク数
Filed under: googlemap — akky @ 19:29:03

Google Maps API を使って地名もしくは住所から緯度経度を求めるには
GClientGeocoder のgetLatLng(address, callback)メソッドを使うと
GLatLang が返却される。これから緯度と経度をそれぞれ取得すればよい。

参考:http://blog.fkoji.com/2006/06142213.html

下がためしに作成したソースです。
左上のテキストボックスに地名もしくは住所を入力して得られた緯度/経度を中心にします。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>緯度経度お試し</title>
<script xsrc="http://maps.google.com/maps?file=api&v=2.x&key=YouKey" mce_src="http://maps.google.com/maps?file=api&v=2.x&key=YouKey" type="text/javascript"></script>
<script xsrc="http://www.google.com/jsapi" mce_src="http://www.google.com/jsapi" type="text/javascript"></script>
<script language="Javascript" type="text/javascript">
//<![CDATA[
var geocode = new GClientGeocoder();
var map;
var centerMarker;
var centerPoint;
/*
* bodyをロード後にGooleMapの地図を表示
*/
function load() {
centerPoint = new GLatLng(35.675888, 139.744858);
//地図のインスタンスを生成します
map = new GMap2(document.getElementById("map"));
// 中心値に移動
map.setCenter(centerPoint, 17);
// 値にマーカーを表示
centerMarker = new GMarker(centerPoint);
map.addOverlay(centerMarker);
// パン移動とスライダーズームの使える大きなコントロール
map.addControl(new GLargeMapControl());
} /*
* 住所から緯度経度を求めてGoogleMapに反映
*/
function localsearch(){
// 入力された住所の住所の一覧を取得
var address=document.getElementsByName("target_address").item(0).value;
// GClientGeocoder を使って緯度/経度を求める
geocode.getLatLng(address, function(point){
if(point != null ){
// 取得できた緯度、経度を取り出す
var lat = point.lat();
var lng = point.lng();
var msg = "lat=" + lat + " lng=" + lng;
document.getElementById("result").innerHTML = msg;
// GooelMapの中心を取得した緯度経度に移動
centerPoint = point;
map.setCenter(centerPoint);
// マーカーを新しい中心緯度経度に作り変え
if ( centerMarker != null ){
map.removeOverlay(centerMarker);
centerMarker = new GMarker(centerPoint);
map.addOverlay(centerMarker);
}
}else{
alert("「" + address + "」の緯度経度を取得できませんでした");
}
}
);
}

//]]>
</script>
</head>
<body onload="load()">
<input type="textarea" id="target_address" name="target_address" value="国会議事堂"><input type="button" name="exec" value="検索" onClick="localsearch()">
<div id="result">ここに求めた緯度経度</div>
<div id="map" style="width: 480px; height: 320px;"></div>
</body>
</html>

2007/8/22 水曜日

Windows XP proだけな環境でのNetBIOS名の解決 メモ

このエントリをはてなブックマークに追加Windows XP pro医сNetBIOS茹f浦<△里呂討淵屮奪マーク被リンク数
Filed under: windows — akky @ 18:33:30

直接的な解決方法ではないです

マスタブラウザを調べる

@IT Windowsネットワークのマスタ・ブラウザを調査する

borwstat.exeは C:\SUPPORT\TOOLS\SETUP.EXE を実行してインストールする

nbtstat を使ってみる

@IT ホスト名からIPアドレスを見つける方法

nbtstat -a ホスト名
16バイト目の説明 http://www.winningball.com/jp/software/wbNbtStat/wbNbtStat01.html

マイ ネットワークで表示される一覧をコマンドラインから

net view

LMHOSTSを編集して反映させる

NetBIOS名は%windir%\system32\drivers\etc\lmhostsに記述する。編集しただけではWindowsを再起動させないと反映されない。再起動させなないで反映させるにはnbtstatをつかう。
nbtstat -RR

Microsoft TechNet nbtstat コマンドを使って NetBIOS 名を解放および更新する

@IT LMHOSTSファイルの更新を即座に反映させる方法 

2007/8/19 日曜日

MovableTypeから引越し

このエントリをはてなブックマークに追加MovableType綣莇のはてなブックマーク被リンク数
Filed under: 未分類 — akky @ 22:50:20

この(?)ブログ2回目の引越し。MovableTypeからWordPressに変更。

変更した理由は知人に進められたから。ポジティブな理由としてはMovableTypeの管理画面全般の文字が小さくて見難かった。あと記事投稿画面が使い難いのあるかな。そこを比較してみると文字の見易さはwordPressが上。記事投稿画面は使ってみないと判断できないので、現時点では保留。

使ってみた感想はMovableTypeはすんなり応答がある。そこは静的HTMLの利点が出ている。 あとは、追々書くかも。

次のページ »