2012年7月18日水曜日
2012年7月17日火曜日
[cakephp 1.3] 複数あるサブミットボタンのどれが押されたか調査する。
コントローラーに以下のファンクションを追加する。
ビューには
とかを用意して置いて
コントローラーで次のように_getSubmitButtonName()を呼ぶ
ビューには
とかを用意して置いて
コントローラーで次のように_getSubmitButtonName()を呼ぶ
返値をnameでチェックして処理を分ければよい。
2012年7月9日月曜日
[cakephp] Formヘルパー
$this->Form->chckbox()のオプション
echo $this->Form->checkbox('hoge',array('label'=>'hoge'));
と書いた時以下のように出力される。
この時チェックされなかった時に値が"0"となるようにする仕掛けhiddenが要らない時
optionsに'hiddenField'=>false入れておくとこれが表示されない。
2012年6月29日金曜日
[apache] さくらのレンタルサーバーとmod_rewrite
さくらのレンタルサーバーはRewriteEngine OnしてもRewriteBase の記述がないとうまく動かない。
↓↓これでは動かない↓↓
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
↓↓こうしないとダメ↓↓
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
サーバーのスペックは
FreeBSD 7.1-RELEASE-p16 i386
Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e
PHP 5.2.17
です。
↓↓これでは動かない↓↓
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
↓↓こうしないとダメ↓↓
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
サーバーのスペックは
FreeBSD 7.1-RELEASE-p16 i386
Apache/1.3.42 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e
PHP 5.2.17
です。
2012年6月5日火曜日
[Mercurial][win] マーキュリアル分散型バージョン管理システムの導入 for Win
Windowsなので迷わずTortoiseHgを導入します。MacのようにGitもMercurialのどちらでも使えるようなものがあればいいのですが・・・。Mercurialの公式サイトにTortoiseHg with Mercurial というのがありますのでこれをダウンロードしてインストールします。
- TortoiseHg Workbenchを実行します。
- ファイルメニューの設定をクリックします
- 左のメニューリストTortoiseHgをクリックし、マージツール、差分表示ツールをWinmergeuに、エディタをお使いのエディタに設定します
- コミットをクリック、ユーザー名にご自分のメールアドレスを入力します
- マスターリポジトリのサーバーが自己証明書を使っている場合は証明書を登録します。ファイルを開くボタンをクリックして以下を追加します。
[web] cacerts=C:\Users\username\cacert-root.crt
- OKをクリックして設定を閉じます。
- マスターリポジトリがあるならファイルメニューのリポジトリのクローンを実行します
- ソースに URL(https://example.com/hg/testdemo等、任意)を入力します。
- ターゲットに (/Users/username/hg/testdemo)を入力し、「クローン」ボタンをクリックします。
- ユーザーIDパスワードを入力ししばらく待ちます。完了が表示されたら、ウインドウを閉じます。
2012年6月4日月曜日
[cakephp] 画像ディレクトリ等の変更
app/webroot/index.phpの
"if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) {"の前に
以下を挿入するとimgをimagesに変更できるが、スタイルシート等に記述した
background-image:url("../img/background.gif"); は手で変更しなくてはいけないので注意が必要。
if (!defined('IMAGES_URL')) {
define('IMAGES_URL', 'images/');
}
[Mercurial][Mac] マーキュリアル分散型バージョン管理システムの導入 for Mac
windowsならば迷わずTortoiseシリーズを使うところだが、MacならばAppストアーで扱っているSourceTreeというが凄いらしいのでこれを使ってみます。
まず、mercurialがインストールされていない場合は、Mercurialの公式サイト でダウンロードしてきます。公式サイトの右上のボタンを押すとダウンロードが始まります。ダウンロードしているOSに併せてファイルが違うので、snow leopard ならMercurial-2.2.2-py2.6-macosx10.6.zipが Lion ならMercurial-2.2.2-py2.7-macosx10.7.zipがダウンロードされますので間違えのないようにお願いします。mercurial-2.2.2+20120602-py2.7-macosx10.7.mpkgを実行してインストールします。
次にAPPストアーからSourceTreeをインストールします。今なら(2012.06.03現在)無料ですのでお早めに!!。
これで準備はできました。
まず、mercurialがインストールされていない場合は、Mercurialの公式サイト でダウンロードしてきます。公式サイトの右上のボタンを押すとダウンロードが始まります。ダウンロードしているOSに併せてファイルが違うので、snow leopard ならMercurial-2.2.2-py2.6-macosx10.6.zipが Lion ならMercurial-2.2.2-py2.7-macosx10.7.zipがダウンロードされますので間違えのないようにお願いします。mercurial-2.2.2+20120602-py2.7-macosx10.7.mpkgを実行してインストールします。
次にAPPストアーからSourceTreeをインストールします。今なら(2012.06.03現在)無料ですのでお早めに!!。
これで準備はできました。
- SourceTreeを実行します。
- 初めて実行すると、ようこそウィンドウが表示されるのでユーザー名とメールアドレスを入力、「・・設定ファイルを更新することを許可する」にチェックを入れて、次へをクリックします
- オンラインサービスにアカウントがあれば入力、なければそのまま次へ
- ローカルリポジトリがあれば検索して登録、なければそのまま仕上げ
- ブックマークというウインドウが立ち上がるのでツールバーの左端のリポジトリの追加ボタンを押します。
- マスターリポジトリが有るのなら「リポジトリをクローン」タブを新規ならば「リポジトリを作成」タブを選びます。
- 「クローン」タブを選んだ場合はソースパスにURL(https://example.com/hg/testdemo等、任意)を入力します。
- 認証ウインドウが開きますのでユーザー名とパスワードを入力します。
- 保存先のパス(/Users/username/hg/testdemo)を入力し、「クローン」ボタンもしくは「作成」ボタンをクリックします。
2012年6月1日金曜日
[javascript] JSONの使い方
まず、http://www.json.org/ のJavaScript json2.js を取得する。
github から ZIPボタンを押してダウンロード、解凍して適当に設置する。
<script type="text/javascript" src="../js/json2.js"></script>
これで準備は整った。
github から ZIPボタンを押してダウンロード、解凍して適当に設置する。
<script type="text/javascript" src="../js/json2.js"></script>
これで準備は整った。
オブジェクトや配列からJSON文字列に変換するには JSON.stringify() を使う JSON.stringify(value, replacer, space) value オブジェクトや配列 replacer space 入れ子の構造のインデント値、整形して表示するような時に使用する。 通常のJSON文字列にする場合は指定しない。 ここにスペースを入れておくと、phpのvar_dump()ようにインデントする。 JSON文字列からオブジェクトに変換するには JSON.parse()を使う JSON.parse(text, ) text reviver
2012年5月31日木曜日
[javascript] オブジェクトの表示phpのvar_dumpみたいなもの
function printProperties(obj) {
var properties = '';
for (var prop in obj){
properties += prop + "=" + obj[prop] + "\n";
}
document.write(properties);
}
[php] JSONと連想配列の相互変換
$arrayData = (array) json_decode($jsonData);
$jsonData = json_encode((object) $arrayData);
2012年5月28日月曜日
[cakephp][jQuery] radioボタンを選択する時は"["と"]"をエスケープする。
<input class="category" type="radio" name="category" value="1" />携帯 <input class="category" type="radio" name="category" value="2" />スマートフォン <div id="category_select"> </div>
こういうラジオボタンで下の id="category_select" のdivブロックを下記のjavascriptで
表示したり非表示にしたりしているのは良くある話ですが。
<script>
$(document).ready(function(){
function displayVals() {
var singleValues = $('input[name="category"]:checked').val()
if(singleValues == 2){
$("#category_select").css("display","block");
}else{
$("#category_select").css("display","none");
}
}
$('input[name="category"]:radio').change(displayVals);
displayVals();
});
</script>
cakephpでデータをやり取りすると少し困ってしまう。
普通のヘルパーを使って
<?php
echo $form->input('category', array(
'type'=>'radio',
'legend' => false,
'label'=> true,
'class'=>'category',
'options'=>array('1'=>'携帯', '2'=>'スマートフォン'),
));
?>
このようにViewを書くとname部分が"data[Mobile][category]"になってしまい<div class="input radio"> <input type="hidden" name="data[Mobile][category]" id="MobileCategory_" value="" /> <input type="radio" name="data[Mobile][category]" id="MobileCategory1" class="category" value="1" /> <label for="MobileCategory1">携帯</label> <input type="radio" name="data[Mobile][category]" id="MobileCategory2" class="category" value="2" /> <label for="MobileCategory2">スマートフォン</label> </div>
こんなコードが出力される。
javascriptのSelectors部分がダブルクォーテーションで囲まれているから
input[name="category"] を input[name="data[Mobile][category]"] こう書き換えると
良いように思うが、これでは上手く行かない。理由は上手く説明できないので割愛するが
下記のように"["と"]"をエスケープしてやらなくてはいけない。
input[name="data\[Mobile\]\[category\]"]
だから正しいjavascript文は
<script>
$(document).ready(function(){
function displayVals() {
var singleValues = $('input[name="data\[Mobile\]\[category\]"]:checked').val()
var defined = 0;
if(singleValues == 2){
$("#category_select").css("display","block");
}else{
$("#category_select").css("display","none");
}
}
$('input[name="data\[Mobile\]\[category\]"]:radio').change(displayVals);
$(window).load(function () { displayVals();});
});
</script>
こうなる。